imshow命令不会显示与原始相同的二进制图像

时间:2015-12-14 12:39:36

标签: image matlab image-processing matlab-figure

我用以下内容阅读了图片:

 W=double(imread('rose32.bmp'));

然后:

 imshow(W,[]);

 imshow(W);

result

但是显示的图像似乎与原始图像相反。我怎么解决这个问题 ?这是一个MATLAB问题吗?

1 个答案:

答案 0 :(得分:2)

问题可能是由于格式化图像文件造成的! 当您使用imread时,它返回的内容取决于图像文件中图像的格式。 imread会返回树值[A,map,transparency] = imread(___),其中A可能是h x w - 矩阵或h x w x { {1}} - 矩阵(3h是几个不同类别的高度和宽度的缩写)(例如。wdouble)。

对于uint8 x h x w - 矩阵,输出变量3将为空,您可以使用{{}直接显示图像1}}。这称为RGB图像。

另一种可能性(称为索引图像)是map x imshow(A) - 矩阵。在这种情况下,h是一个色彩映射,您可以按w显示图像。

您可以通过mapimshow(A,map)轻松转换这两种类型的图片。

您需要注意的另一件事是图像类。

如果你有一个类ind2rgb(A,map)的rgb-image,那么image的值将是0到255之间的整数,而类型rgb2ind(A)的rgb-images的值介于0和1之间。绝不应该像uint8这样的函数将图像转换为double - 类;而是使用double

因此,要解决您的问题,请尝试以下代码:

double

现在im2double应该正确显示图像。或者您只需使用以下代码:

[img,map] = imread('rose32.bmp');
if ~isempty(map)
  img = ind2rgb(img,map);
end
img = im2double(img);