天天看点

MATLAB显示图像为什么一片白imshow错误使用其他

MATLAB显示图像为什么一片白

  • imshow
  • 错误使用
  • 其他

by HPC_ZY

经常有朋友问,为什么我imshow出来的图一片白,我这明明是灰度图的。

这是因为没弄好图片的类型。

imshow

这个函数能显示两大类型的图像

  1. 整形,最常见 uint8
  2. 非整形,最常见double

当图像为uint8类型时,其支持范围 0~255

当图像为double类型时,其支持范围 0~1(大于1的为白色,小于0的为黑色)

错误使用

  1. 把uint8的图像转为double后直接显示,问题代码如下
%% 问题代码
im = imread('*.*');
im = double(im);
imshow(im)
           

所有大于1的像素就都为白色了,这也是最最最常见的错误。

如果就想转为double,同时还想显示,解决方法如下

%% 解决方法
im = imread('*.*');
im = double(im)/255;
imshow(im)

或
im = imread('*.*');
im = im2double(im);
imshow(im)
           
  1. 把已经归一化的图像转为uint8后直接显示,问题代码如下
%% 问题代码
im = imread('*.*');
im = mat2gray(im); % 归一化
im = uint8(im)
imshow(im)
           

最大的值才1,整个图像都黑了,这也第二类的错误。

如果需要这么转,解决方法如下

%% 解决方法
im = imread('*.*');
im = mat2gray(im); % 归一化
im = uint8(im*255)
imshow(im)
           

其他

  1. 所以使用imshow前,需要核对图像的类型。有必要的时候还可以在工作区点开矩阵看看,里面都是些什么值。
  2. 有时不想去费心思,也可以使用imagesc()代替imshow()。

继续阅读