将图像转换为double类型

时间:2016-12-30 11:30:46

标签: matlab image-processing casting computer-vision

我正在使用以下命令读取图像:

lefty = imread('sintra2.JPG');

imshow();给了我很好的回复。但如果我尝试使用:

lefty = double(imread('sintra2.JPG'));

imshow()给了我一张白色图片。我正在使用相对较大的图像shared here。有联系吗?

如果有必要,我如何转换为double?有人告诉我,在MATLAB中处理图像处理和计算机视觉时,最好使用double。

2 个答案:

答案 0 :(得分:6)

当您阅读图像时,其类型为uint8,因此lefty包含0到255之间的值(2 8 = 256)。当您使用double时,它会将类从uint8转换为double,但值保持不变,即0-255。

这里需要im2double,它不仅将值转换为双精度,而且还通过将输入的所有条目除以输入数据类型的最大可能值来重新调整0-1范围内的值。因此,在您的情况下,由于输入数据类型为uint8,其最大可能值为255,因此所有值将除以255.请注意,图像数据中的最大值可能不是255但由于uint8的最大可能值为255,因此所有值将除以255.

以下是您正在寻找的内容:

lefty = imread('sintra2.JPG');
imshow(lefty)
figure
imshow(im2double(lefty))

答案 1 :(得分:3)

问题在于imshow所需的数据类型。如果图像的类型为int,则其范围应介于0到255之间。如果是双倍 - 介于0.0和1.0之间。试试这个:

lefty = imread('sintra2.JPG');
imshow(lefty)

或:

lefty = imread('sintra2.JPG');
imshow(double(lefty)/double(max(lefty(:))))