我有一张由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显示上面的图像及其细节?谢谢所有
答案 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.因此,max
和I2
将显示为黑色,因为它们的所有像素都在0到1之间,远小于256。
要解决此问题,您可以在连接和显示之前规范化所有数据(使用mat2gray
)。
I4
或者,您可以在他们自己的轴上显示每个图像,他们将获得与其动态范围相匹配的I_int = cat(1, mat2gray(I1), mat2gray(I2), mat2gray(I3), mat2gray(I4));
。