以下代码段会生成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
显示这两个图像的结果是不同的,但这种差异背后的原因是什么?
答案 0 :(得分:5)
假设double
类型的图像的值介于0和1之间,假设uint8
图像的值介于0和255之间。由于double
数据包含0到0之间的值255(因为您只是将其转换为double
并且不执行任何缩放),因为大多数值都大于1,所以它将显示为大部分白色。
您可以使用imshow
的第二个输入来表示您要忽略此假设并自动将显示缩放到数据的动态范围
imshow(h, [])
或者您可以在显示图片前使用double
对mat2gray
版本进行规范化
h = mat2gray(h);
imshow(h)