MATLAB:imshow(f)和imshow(f,[ ])的区别
问题:
在第三章频率域滤波,显示图像傅里叶谱S的结果不一样
F = fft2(f);
S = abs(F);
imshow(S),figure,imshow(A,[])
在这之前,一直以为,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 的类型:
imshow(f,[ ]):是将 f 的最大值(max(f))
和最小值(min(f))
分别作为纯白(255)和纯黑(0)。中间的 K 值相应地映射为 0到255 之间的标准灰度值,这样就可以正常显示了,相当于将 double 型的矩阵 S 拉伸成为了 0-255 的 uint8 型的矩阵,因此就可以正常显示。
结论:
所以,使用 imshow(f),显示的图像如果是double类型,就会出现白色图,与imshow(f,[ ])也就显示出来了区别,当显示的图像如果是 uint8 时,两者显示的图像没有区别
上一篇: python怎么提取数组中的数