使用imshow时uint8和double image的区别

The difference between uint8 and double images when using imshow

以下代码片段产生 double image.

f = imread('C:\Users\Administrator\Desktop.tif');
h = double(f);
figure;
imshow(h);

然而,这个其他代码片段会产生 uint8 image.

f = imread('C:\Users\Administrator\Desktop.tif');
figure;
imshow(f);

在显示这两个图的时候,这两个图片使用imshow显示出来的结果是不一样的,请问是什么原因造成的呢?

假定类型 double 的图像具有 0 到 1 之间的值,并且假定 uint8 图像具有介于 0 到 255 之间的值。由于您的 double 数据包含介于0 和 255(因为您只是将其转换为 double 并且不执行任何缩放),它将显示为大部分白色,因为大多数值都大于 1。

您可以使用 imshow 的第二个输入来表示您想要忽略此假设并自动将显示缩放到数据的动态范围

imshow(h, [])

或者您可以在显示图像之前使用 mat2gray 标准化 double 版本

h = mat2gray(h);
imshow(h)