如何显示具有不同类型的集成图像

How to show the integrated image which has different type

我有一张由 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 显示上面的图像及其细节?谢谢大家

首先,您的变量的数据类型 没有 不同(我有点不明白为什么您认为它们是不同的)。使用 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 以适应您数据的 minmax。所以黑色设置为 0,白色为 256。因此,I2I4 将主要显示为黑色,因为它们的所有像素都在 0 和 1 之间,远小于 256。

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

I_int = cat(1, mat2gray(I1), mat2gray(I2), mat2gray(I3), mat2gray(I4));

或者,您可以在它们自己的轴上显示这些图像中的每一个,它们将在其中获得它们自己的 clims 与它们的动态范围相匹配。