如何显示具有不同类型的集成图像
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
以适应您数据的 min
和 max
。所以黑色设置为 0,白色为 256。因此,I2
和 I4
将主要显示为黑色,因为它们的所有像素都在 0 和 1 之间,远小于 256。
要解决此问题,您可以在连接和显示之前规范化所有数据(使用 mat2gray
)。
I_int = cat(1, mat2gray(I1), mat2gray(I2), mat2gray(I3), mat2gray(I4));
或者,您可以在它们自己的轴上显示这些图像中的每一个,它们将在其中获得它们自己的 clims
与它们的动态范围相匹配。
我有一张由 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
以适应您数据的 min
和 max
。所以黑色设置为 0,白色为 256。因此,I2
和 I4
将主要显示为黑色,因为它们的所有像素都在 0 和 1 之间,远小于 256。
要解决此问题,您可以在连接和显示之前规范化所有数据(使用 mat2gray
)。
I_int = cat(1, mat2gray(I1), mat2gray(I2), mat2gray(I3), mat2gray(I4));
或者,您可以在它们自己的轴上显示这些图像中的每一个,它们将在其中获得它们自己的 clims
与它们的动态范围相匹配。