使用imshow时uint8和double图像之间的区别

时间:2017-01-10 04:45:05

标签: matlab image-processing imshow imread

以下代码段会生成double image

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

然而,此其他代码段会产生uint8 image

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

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

1 个答案:

答案 0 :(得分:5)

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

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

imshow(h, [])

或者您可以在显示图片前使用doublemat2gray版本进行规范化

h = mat2gray(h);
imshow(h)