2016-12-05 48 views
0

我在Matlab(m,n,3)[double]中有一個顏色,rgb圖像。我分別在每個通道上執行線性擴散過程。 LinearDiffusion輸出中的第一個元素是雙數組(m,n,1)。Matlab。無法將雙數組合併成RGB圖像

[m,n,j]=size(noisy_image) 
rgb_im=zeros(m,n,3); 
for chn=1:3   
    noisy_chn=noisy_image(:,:,chn);  
    [rgb_im(:,:,chn), diff_un]=LinearDiffusion2016(noisy_chn, 0, dt, maxnl); 
end  

我想顯示rgb_im,它是(m,n,3)[double]。但是不管我做什麼,總是得到一個空白的方塊,儘管圖像值不夠飽和。我對灰度(uint8)圖像沒有任何問題。有任何想法嗎?

UPDATE:源圖像是(M,N,3)[unit8],但我將每個信道爲雙到其饋送到LinearDiffusion。

謝謝。

+1

獲得一個空白方塊意味着,當你使用'繪製它imshow'看起來是白色的?如果您的圖片是雙倍的,則必須標準化爲[0..1]。嘗試使用'imshow(yourimage,[])',你應該看到正確的圖像。 –

+0

rgb_im實際上是uint。這是我修補的形象,誰把它變成雙重饋送給LinearDiffusion。我的錯,對不起。 – javierjsa

回答

3

其原因是MATLAB在圖像解釋浮點數爲0和1(含)之間的分數,而整數0和之間解釋爲位值255(含)。你已經將你的整數值轉換爲雙精度值,對它們進行數學運算,然後直接將它們傳回imshow。 MATLAB發現它們是雙精度的,並將所有大於1的值限制在1,所以你看到的只有白色,除非碰巧有一些純粹的黑色像素。你有兩個選擇:按照自己的答案轉換回整數,或者除以255來重新調整值。

如果該信息是在imshow幫助文件中給出的這將是有益的,但你必須向下挖掘到低級別CData圖像屬性來獲取這樣的信息:

圖像色彩數據,在規定其中一種形式:

  • RGB三元組的三維陣列 - 此格式使用RGB三元組值定義真彩色圖像數據。每個RGB三元組爲圖像的一個像素定義顏色。 RGB三元組是一個三元素矢量,用於指定顏色的紅色,綠色和藍色分量的強度。三維陣列的第一頁包含紅色組件,第二頁包含綠色組件,第三頁包含藍色組件。由於圖像使用真彩色而不是色彩圖顏色,因此CDataMapping屬性不起作用。

    • 如果CData是一個類型的雙,然後[0 0 0]的RGB三元值對應於黑色和[1 1 1]對應於白色。

    • 如果CData是整數類型,那麼圖像將使用全部數據範圍來確定顏色。例如,如果CData類型爲uint8,則[0 0 0]對應於黑色,[255 255 255]對應於白色。如果CData類型爲int8,則[-128 -128 -128]對應於黑色,[127 127 127]對應於白色。

    • 如果CData是邏輯類型,則[0 0 0]對應於黑色,[111]對應於白色。

1

假設rgb圖像的每個通道必須是uint8(不是雙重!!)。這條線的伎倆:

imshow(uint8(rgb_im)); 

問候