【個人理解】關於矩陣【層,行,列】和圖像【高,寬,通道數】的理解

這是我之前一直混淆沒弄明白的一個問題
就是誒圖像的通道數和矩陣的層數爲什麼不對應啊或者一張圖像表示成矩陣的時候,爲什麼shape不是我們理解的[層,行,列]的形式?
下午看了不少大佬寫的文章
總算是搞清楚了(應該吧哈哈哈哈)

我們先理解一下三維矩陣。

吐司大家應該都吃過吧?
通常定義的三維矩陣,一層就是一片吐司,一個吐司就是一個二維矩陣,有n行m列,這裏假設有c片吐司,那這個三維矩陣的shape就是[c, n, m]。
這下大家腦海裏應該都有一點想象了吧?

然後就是真實的三維矩陣,寫在代碼裏,在數據上,應該是怎麼表示的?
具體例子:看例子點我
參考鏈接:https://blog.csdn.net/weixin_38267508/article/details/83539395

然後,有一點很重要的是,不同的工具,對於數據結構的定義可能是不一樣的。Python中的numpy的數據結構就是這樣的[h,w,c],如果你用caffe的話默認[n,c,w,h],這裏n是batch_size,剩下就是通道,寬,高。
參考鏈接:https://www.zhihu.com/question/318026075

然後再來說說圖像
我們獲取到一張RGB圖像以後,輸出圖像的size,一般都是[h, w, 3]。
RGB圖像表示的是三通道圖像,這個時候通道數,放在了最後。
我們都知道,一個像素點的值,一般都是一個一維數組[R, G, B]來表示的。
可能有些朋友會想:圖像表示成矩陣以後,去看這個矩陣,這個矩陣明明是3列的,爲什麼說是3層?這個跟我們認知裏的三維矩陣應該是[層數,行,列]不一樣啊?
有這個疑問的朋友,這時候已經把這兩種不同的表示方式混淆起來了。
記住一點,[ 層,行,列 ]和[ 高,寬,通道數 ]的定義都存在,儘量只從一個角度去看這個三維矩陣。
你處理的是圖像,那就只需要記住[ 高,寬,通道數 ];你定義了一個[c, n, m]的矩陣,那就只需要記住[ 層,行,列 ]。
具體應該是什麼順序,要看你使用的是什麼庫,人家是怎麼定義的這個數據結構了。

這篇主要是寫給我自己看的。提醒自己不要混淆了。
如果有大佬看了覺得我理解的我寫的有問題,請一定要告訴我!我好及時改正!

參考鏈接:三維矩陣Shape的理解
參考鏈接:矩陣進行concat()的理解
參考鏈接:numpy中np.shape的理解
參考鏈接:Python中三維變二維矩陣(用reshape)後各個維度的關係
參考鏈接:爲什麼python讀取一張圖片形成的矩陣維度是(高,寬,通道數),而不是(二維數組個數,行,列)?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章