使用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)
以下代码片段产生 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)