2016-12-05 52 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)); 

问候