如何显示具有不同类型

时间:2016-03-08 14:55:33

标签: matlab matlab-figure

我有一张由4张图片生成的图像。每个图像都有不同的类型代码

nrow=256;
ncol=256;
%% Image with double type
I1=randi(256,[nrow ncol]);
%% Image with float type in range 
r2 = randn(nrow*ncol,1);
I2=reshape(r2,[nrow ncol]);
I3=I2.*20;
%% Binary image
I4=randi([0 1],[nrow ncol]);
%% make row images
I_int=[I1;I2;I3;I4]
imshow(I_int,[]);

但是,imshow无法显示上述I_int图片。它只显示图像I3和I2,而其他I1,I4是黑色。如何使用imshow显示上面的图像及其细节?谢谢所有

1 个答案:

答案 0 :(得分:2)

首先,变量的数据类型不是不同(我为什么认为它们有点混淆)。使用class来检查这一点总是一个好主意。

cellfun(@class, {I1, I2, I3, I4}, 'uni', 0)

   'double'    'double'    'double'    'double'

显示强度的差异是因为每个子图像的动态范围非常不同。

  • I1介于1到256之间
  • I2介于0和1之间
  • I3介于0到20之间
  • I4介于0和1之间

因此,当您合并它们并使用imshow显示它们时,imshow(第二个输入指定为[])会设置轴clims以适合{数据的{1}}和min。因此,黑色设置为0,白色设置为256.因此,maxI2将显示为黑色,因为它们的所有像素都在0到1之间,远小于256。

要解决此问题,您可以在连接和显示之前规范化所有数据(使用mat2gray)。

I4

enter image description here

或者,您可以在他们自己的轴上显示每个图像,他们将获得与其动态范围相匹配的I_int = cat(1, mat2gray(I1), mat2gray(I2), mat2gray(I3), mat2gray(I4));