欢迎光临
我们一直在努力

MATLABimshowf和imshowf 的区别

问题
在第三章频率域滤波,显示图像傅里叶谱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 便宜美国vps 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 时,两者显示的图像没有区别

27723348

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。