2015-12-15 38 views
2

Matlab將圖像存儲爲三維數組。前兩個維度對應於上述圖片軸上的數字。每個像素由圖像第三維中的三個條目表示。三層中的每一層代表像素陣列中的紅色,綠色和藍色的強度。爲什麼紅,綠,藍分離的圖像通道是灰度級的(Matlab)?

redChannel = rgbImage(:, :, 1); 
greenChannel = rgbImage(:, :, 2); 
blueChannel = rgbImage(:, :, 3); 

例如原始圖像是:
enter image description here

如果顯示紅,綠,藍色通道,你得到這些灰度化圖像,我們可以通過提取出的圖像的獨立的紅綠藍分量: enter image description here

如果您將其中一個通道與兩個黑色矩陣(零矩陣)連接起來,您將獲得彩色圖像。讓我們串接與黑色圖像矩陣的每個通道的剩餘通道:

blackImage = uint8(zeros(rows, columns)); 
newRedChannel = cat(3, redChannel, blackImage, blackImage); 
newGreenChannel = cat(3, blackImage, greenChannel, blackImage); 
newBlueChannel = cat(3, blackImage, blackImage, blueChannel); 

它輸出以下圖片: enter image description here

爲什麼它以這種方式工作?爲什麼每種顏色的單獨通道必須與零矩陣(黑色圖像)連接起來才能顯示剩餘通道?爲什麼個別頻道的色彩實際上只是單獨顯示的灰度圖像?

回答

6

在MATLAB中,灰度圖像被表示爲2D矩陣。彩色圖像爲3D矩陣。紅色圖像仍然是彩色圖像,因此它仍然必須是3D圖像。由於它是純粹的紅色圖像,因此沒有其他顏色,因此綠色和藍色通道應爲空,因此爲零的矩陣。

請注意,當我們說灰度時,我們確實指的是indexed image。所以你可以通過應用colourmap來製作彩色圖像。如果您要應用從黑色到紅色範圍的色彩映射,那麼您的2D矩陣將顯示爲上面的紅色圖像。問題是,MATLAB如何知道應用哪種色彩映射?是的,這佔用的空間比彩色圖像少。但它增加了代碼的複雜性。

另一方面,問問自己,如果將兩個顏色通道設置爲零,您會希望圖像看起來像什麼?唯一合乎邏輯的答案就是上面創建的單獨顏色通道圖像。

如果您喜歡,請嘗試將您的問題改爲「MATLAB如何實現這個功能?」。換句話說,如果你的紅色通道是2D圖像,MATLAB怎麼會知道它是紅色通道而不是綠色通道或灰度圖像?挑戰自己,思考一種更實際的方式來表示這些數據。我認爲這個練習會讓你相信在這個問題上MATLAB的設計選擇的優點。

另外值得注意的是許多文件格式,例如.bmp,以同樣的方式工作。

相關問題