1

以下代码片段生成double 图像

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

然而,这个其他代码片段会产生一个uint8 图像

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

在显示这两个数字时,这两个图像使用的显示结果imshow是不同的,但是这种差异背后的原因是什么?

4

1 回答 1

6

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

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

imshow(h, [])

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

h = mat2gray(h);
imshow(h)
于 2017-01-10T04:50:03.213 回答