線性索引與行列號索引

一、含義

線性索引,顧名思義就是說把圖像矩陣展平,相當于變成一維的圖像數組,故像素點的線性索引就是其在圖像數組中的索引值

行列號索引,對于一個二維的圖像矩陣有行有列,知道行號和列號就可以唯一確定一個點的位置,類似于二維的坐標(橫坐標,縱坐標)

下面舉個例子來具體地闡述一下線性索引和行列號索引的含義:

例如,有一張大小為 100x100 的灰度圖,那么可以用一個二維的圖像矩陣來表示,也就是100行100列的矩陣,如下圖所示:

綜上所述就是關于線性索引和行列號索引的簡要介紹,下面我們再來討論一下線性索引和行列號索引之間如何相互轉換?

二、線性索引轉換為行列號索引

可以使用 Python 的整除 ( // )取余( % )運算

在進行轉換的講解之前,我們要先知道二維矩陣(此處以二維矩陣為例)是按照什么方式進行數據存儲的,也就是說是行優先存儲還是列優先存儲。

1.行優先存儲

含義:元素先存滿第一行后再存儲第二行,也就是第一行所有的元素都在第二行之前

假設有一個n行m列的矩陣以及一個線性索引index,可以用下面的代碼轉換線性索引為行列號索引:

rows = n  # 矩陣行數
cols = m  # 矩陣列數
index = index  # 線性索引#計算行列索引
row_index = index // cols  # 取商
col_index = index % cols   # 取余print("Row index:",row_index)
print("Column index:",col_index)

這段代碼首先使用整除運算 // 計算行索引,然后使用取余運算 % 計算列索引

這是因為在行優先的二維矩陣中,每存儲cols個元素,行數就增加1(注意:在Python中行號和列號都是從0開始的)

2.列優先存儲

含義:元素先存滿第一列后再存儲第二列,也就是第一列所有的元素都在第二列之前

接著上面的例子來進行講解,列優先存儲就要先計算列號,然后通過余數計算行號

rows = n  # 矩陣行數
cols = m  # 矩陣列數
index = index  # 線性索引#計算行列索引
col_index = index // rows  # 取商
row_index = index % rows   # 取余print("Row index:",row_index)
print("Column index:",col_index)

這段代碼首先使用整除運算 // 計算列索引,然后使用取余運算 % 計算行索引

這是因為在列優先的二維矩陣中,每存儲rows個元素,列數就增加1(注意:在Python中行號和列 號都是從0開始的)

3. 行優先和列優先存儲的差異

下面我們再來看看對于同一個點進行 行優先存儲 和 列優先存儲 的區別:

?

其中,region_edge_s.mat 是存儲了如上圖二值圖像所示的連通域,屬于每個連通域點的線性索引信息的Matlab文件,并且是以結構體形式存儲的,如下圖所示:

?

下面我們來將存儲在文件中的線性索引轉換為對應圖像中的行列號索引,經過上圖所示文件的讀取操作后,field變量已經將連通域中點的線性索引進行了保存。

首先定義了一個函數 linear_index_to_2d_index ,此函數接受線性索引 linear_index 和 列數 num_cols 作為參數,計算行號和列號并進行返回

然后新建了一個大小為512x512的全零圖像矩陣image(初始的圖像為全黑),將得到的行號和列號所對應的位置處的像素值置為255(也就是以白色來顯示)

最后使用matplotlib庫來繪制圖像image,代碼以及運行結果如下圖所示:

  • 按列優先存儲:

  • 按行優先存儲

綜上所如圖所示,可以很清楚地看到? 按行存儲 和 按列存儲 之間的差異。

注意:?? 在這個例子中,可以看到? 按列存儲? 圖像可以得到和原始圖像一樣的結果,?? 這說明文件 region_edge_s.mat 中的線性索引是按列存儲的。因為 Matlab是按照列優先的原則存儲元素。所以在進行線性索引轉換行列號索引的時候,一定要清楚該圖像是按行存儲的信息還是按列存儲的。

?三、行列號索引轉換為線性索引

將行列號索引轉換為線性索引的方法取決于如何排列數據(按行存儲的數據還是按列存儲的數據)

下面舉個 按行存儲 的行列號轉換為線性索引 的例子:

一般情況下,對于二維矩陣或數組,行列號索引可以轉換為線性索引的公式如下:

假設有一個矩陣或數組,行數為 num_rows,列數為 num_cols,行索引為 row_index,列索引為 col_index,那么線性索引可以通過以下公式計算:

線性索引 = row_index * num_cols + col_index

這個公式基于矩陣在內存中的布局方式。行索引乘以列數得到的值代表了前面所有行占據的位置數量,再加上列索引得到具體位置的偏移量。

假設有一個3x3的矩陣,要將行列索引轉換為線性索引:

num_rows = 3
num_cols = 3
row_index = 1
col_index = 2linear_index = row_index * num_cols + col_index
print("線性索引:", linear_index)
  • 在這個例子中,當 row_index 為 1,col_index 為 2 時,根據公式計算得到線性索引為 5

    同樣,如果要從線性索引計算出行列索引,可以使用以下公式:

    row_index = linear_index // num_cols
    col_index = linear_index % num_cols

    這樣就可以根據需要在行列索引和線性索引之間進行轉換

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206820.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++的排序算法

一&#xff1a;merge 是 C STL 中的一個算法函數&#xff0c;用于將兩個已排序的序列合并成一個有序序列。 template<class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator merge(InputIterator1 first1, InputIterator1 …

java基礎之循環

Java中有三種主要的循環結構&#xff1a; while 循環do…while 循環for 循環 1、while循環 1.1、結構 while( 布爾表達式 ) { //循環內容 } 1.2、實例 public class TestWhile {public static void main(String[] args) {int x 1;while (x<10){System.out.println("…

組個最小數

給定數字0-9各若干個。你可以以任意順序排列這些數字&#xff0c;但必須全部使用。目標是使得最后得到的數盡可能小&#xff08;注意0不能做首位&#xff09;。例如&#xff1a;給定兩個0&#xff0c;兩個1&#xff0c;三個5&#xff0c;一個8&#xff0c;我們得到的最小的數就…

f2fs解析(一)f2fs如何解決wandering tree

wandering tree問題是log-structured 文件系統&#xff08;LFS&#xff09; 特有的一個問題&#xff0c;因為LFS的臟數據是追加更新的&#xff0c;所以如果一個數據塊變臟了&#xff0c;那么那個數據塊的直接索引塊、間接索引塊都會變臟&#xff08;因為索引的地址變臟&#xf…

阿里云通義千問720億參數模型開源,適配企業級、科研級高性能應用

12月1日&#xff0c;阿里云舉辦通義千問發布會&#xff0c;開源通義千問720億參數模型Qwen-72B。Qwen-72B在10個權威基準測評創下開源模型最優成績&#xff0c;成為業界最強開源大模型&#xff0c;性能超越開源標桿Llama 2-70B和大部分商用閉源模型。未來&#xff0c;企業級、科…

Spring Cloud + Vue前后端分離-第2章 使用Maven搭建SpringCloud項目

Spring Cloud Vue前后端分離-第2章 使用Maven搭建SpringCloud項目 Maven兩大核心功能&#xff1a; 依賴管理&#xff08;Jar包管理&#xff09; 構建項目&#xff08;項目打包&#xff09; 使用Eureka搭建注冊中心 使用spring initializr創建spring cloud項目 SpringCloud…

FastAPI之聲明請求參數示例數據

在Pydantic模型中添加額外的JSON模式數據 您可以聲明Pydantic模型的示例&#xff0c;這些示例將被添加到生成的JSON模式中。 示例代碼 from fastapi import FastAPI from pydantic import BaseModelapp FastAPI()class Item(BaseModel):name: strdescription: str | None …

(C語言實現)高精度除法 (洛谷 P2005 A/B Problem II)

前言 本期我們分享用C語言實現高精度除法&#xff0c;可通過該題測試點我點我&#xff0c;洛谷 p2005。 那么話不多說我們開始吧。 講解 大家還記不記得小學的時候我們是怎么做除法的&#xff1f;我們以1115為例。 我們的高精度除法也將采用這個思路進行&#xff0c;分別用兩…

在 TS 中解析 ipa 文件

在 TS 中解析 ipa 文件 ipa即Xcode打包出來的APP的安裝包&#xff0c;通過解析ipa中的文件&#xff0c;我們可以獲得APP的DisplayName、Version、BundleIdentifier等信息&#xff0c; 同時也可以獲取到APP證書的相關信息&#xff0c;包括APP的安裝環境、證書的有效期、APP開通…

Python-算術運算符詳解

運算符 算術運算符 關系運算符 邏輯運算符 賦值運算符 算術運算符&#xff1a;加減乘除 %求余 **平方 // 先算乘方&#xff0c;再算乘除&#xff0c;最后是加減。括號可以改變優先級 0不能作為除數&#xff08;不論是整型0還是浮點0&#xff09; 除法截斷&#xff1a;舍棄小…

UDP群聊

客戶端 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

LeetCode738. Monotone Increasing Digits

文章目錄 一、題目二、題解 一、題目 An integer has monotone increasing digits if and only if each pair of adjacent digits x and y satisfy x < y. Given an integer n, return the largest number that is less than or equal to n with monotone increasing digi…

使用VBA快速統計詞組(單詞組合)詞頻

實例需求&#xff1a;產品清單如A列所示&#xff0c;現在如下統計詞組詞頻。想必各位小伙伴都指定如何使用字典對象實現去重&#xff0c;進而實現單個單詞的詞頻統計。 但是統計詞組詞頻就沒有那么簡單了&#xff0c;為了便于演示&#xff0c;此處的詞組只限于兩個單詞的組合。…

自動駕駛右向輔助功能規范

目 錄 Contents 目錄 1. 介紹 Introduction. 8 1.1 此文檔的范圍和目的 Scope and Purpose of This Document 8 1.2 參考文檔References. 9 1.3 文檔的維護 Maintenance of the Document 10 1.4 縮略詞Abbreviations. 10 1.5 文檔概述Document Overview.. 11 1.6 功能…

GoLong的學習之路,進階,Viper(yaml等配置文件的管理)

本來有今天是繼續接著上一章寫微服務的。但是這幾天有朋友說&#xff0c;再寫Web框架的時候&#xff0c;遇到一個問題&#xff0c;就是很多的中間件&#xff08;redis&#xff0c;微信&#xff0c;mysql&#xff0c;mq&#xff09;的配置信息寫的太雜了&#xff0c;很不好管理。…

【解決辦法】Pycharm中新添加或者導入項目文件名紅色!

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、問題描述二、問題原因三、解決辦法 一、問題描述 Pycharm的代碼中添加新的文件夾&#xff0c;發現文件夾下的文件名是紅色的&#xff0c;如下圖&#xff1a; …

jvm-sandbox-repeater 精簡版部署之standalone模式

jvm-sandbox-repeater 僅僅提供了錄制回放的能力&#xff0c;如果需要完成業務回歸、實時監控、壓測等平臺&#xff0c;后面須要有一個數據中心負責采集數據的加工、存儲、搜索&#xff0c;repeater-console提供了簡單的demo示例&#xff1b;一個模塊管理平臺負責管理JVM-Sandb…

設計模式——單例模式(Singleton Pattern)

概述 單例模式確保一個類只有一個實例&#xff0c;而且自行實例化并向整個系統提供整個實例&#xff0c;這個類稱為單例類&#xff0c;它提供全局訪問的方法。單例模式是一種對象創建型模式。單例模式有三個要點&#xff1a;一是某個類只能有一個實例&#xff1b;二是它必須自行…

矩陣基本操作算法

題目描述&#xff1a; 題目描述 根據主函數和頭文件提示&#xff0c;編寫子函數void matrixInput(int (*mat)[COL]); void matrixPrint(int *mat[ROW]); void matrixAddT(int *mat); ? 分別實現矩陣的輸入&#xff0c;輸出&#xff0c;與自身的轉置相加&#xff1a;void matr…

微信小程序開發中的圖片缺少后自動居中問題的解決,自動居中樣式,自適應圖片多少的寫法

下面是寫的wxml的view樣式類似于web開發中的HTML文件 home-grid是我創建的一個父樣式&#xff0c;采用子絕父相的定位方式 我在home-grid的父view&#xff08;類似于web中div&#xff09;中包含了三個小的子樣式分別是下述代碼中的class“yellowstar”&#xff0c;class“maint…