我用以下内容阅读了图片:
W=double(imread('rose32.bmp'));
然后:
imshow(W,[]);
或
imshow(W);
但是显示的图像似乎与原始图像相反。我怎么解决这个问题 ?这是一个MATLAB问题吗?
答案 0 :(得分:2)
问题可能是由于格式化图像文件造成的!
当您使用imread
时,它返回的内容取决于图像文件中图像的格式。 imread
会返回树值[A,map,transparency] = imread(___)
,其中A
可能是h
x w
- 矩阵或h
x w
x { {1}} - 矩阵(3
和h
是几个不同类别的高度和宽度的缩写)(例如。w
或double
)。
对于uint8
x h
x w
- 矩阵,输出变量3
将为空,您可以使用{{}直接显示图像1}}。这称为RGB图像。
另一种可能性(称为索引图像)是map
x imshow(A)
- 矩阵。在这种情况下,h
是一个色彩映射,您可以按w
显示图像。
您可以通过map
和imshow(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);