将图像转换为 double 类型

Converting an image to type double

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

lefty = imread('sintra2.JPG');

imshow(); 给了我一个很好的结果。但如果我尝试使用:

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

imshow() 给我一个白色图像。我正在处理一个相对较大的图像 shared here。有联系吗?

如果有必要,我该如何转换为 double?我被告知在 MATLAB 中从事图像处理和计算机视觉工作时最好使用 double。

问题出在 imshow 需要的数据类型上。如果图像是 int 类型,它的范围应该在 0 到 255 之间。如果它是双精度的——在 0.0 到 1.0 之间。试试这个:

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

或:

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

当您读取图像时,它的类型是 uint8,因此 lefty 包含从 0 到 255 的值(28 = 256)。当您使用 double 时,它将 class 从 uint8 转换为 double,但值保持不变,即 0-255。

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

所以以下是您要查找的内容:

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