欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MATLAB:imshow(f)和imshow(f,[ ])的区别

程序员文章站 2022-03-10 10:43:37
...

问题
在第三章频率域滤波,显示图像傅里叶谱S的结果不一样

F = fft2(f);
S = abs(F);
imshow(S),figure,imshow(A,[])

MATLAB:imshow(f)和imshow(f,[ ])的区别

在这之前,一直以为,imshow(f)imshow(f,[ ]) 显示的结果是一样的都是将图像显示出来。

查看帮助文档:
imshow(f): displays the grayscale image I in a figure. imshow optimizes figure, axes, and image object properties for image display.
大概意思:在图中显示优化后的灰度图像

imshow(f,[ ])displays the grayscale image I, scaling the display based on the range of pixel values in I. imshow uses [min(I(:)) max(I(:))] as the display range. imshow displays the minimum value in I as black and the maximum value as white. For more information, see the DisplayRange parameter.
大概意思:根据 f 中像素值的范围缩放显示.使用 [min(f(:))max(f(:))] 作为显示范围。 imshow 将 f 中的最小值显示为黑色,将最大值显示为白色。

上述解释的并不清楚,还是没看出来,区别

问题原因

imshow(f)
在matlab中,为了保证精度,经过了运算的图像矩阵 f 其数据类型会从 uint8 型变成double 型。imshow()显示图像时对 double 型是认为在0~1范围内,即大于1时都是显示为白色,imshow显示uint8型时是0~255范围

查看图像 S 的类型:
MATLAB:imshow(f)和imshow(f,[ ])的区别

imshow(f,[ ]):是将 f 的最大值(max(f))和最小值(min(f))分别作为纯白(255)和纯黑(0)。中间的 K 值相应地映射为 0到255 之间的标准灰度值,这样就可以正常显示了,相当于将 double 型的矩阵 S 拉伸成为了 0-255 的 uint8 型的矩阵,因此就可以正常显示。

结论

所以,使用 imshow(f),显示的图像如果是double类型,就会出现白色图,与imshow(f,[ ])也就显示出来了区别,当显示的图像如果是 uint8 时,两者显示的图像没有区别