Matlab imread功能混乱

时间:2016-02-17 06:45:03

标签: image matlab image-processing imread

我正在灰度图像中实现蚁群算法,我很难获得正确的启发式值。我总是得到0或1。

以下是代码的一部分:

x = imread('test.jpg');

y = max(x(:));

例如,我得到226作为最大强度值。我尝试x / y,得到一个值为1的矩阵,大多数是0的单位数强度值。这里有一部分我不见了吗?

我尝试在对角线上创建一个零度为4x4的矩阵。然后我把它除以y。我得到一些“相同的整数类错误”。

1 个答案:

答案 0 :(得分:2)

这是因为您使用imread读取的图像的图像类型是无符号整数类型之一,很可能是uint8,因此当您执行除法时,它实际上是执行整数除法,因此“十进制值”被截断或删除。这是一个可重复的例子。假设我有uint8格式的以下2 x 2图像:

>> A = uint8([1 2; 3 4])

A =

    1    2
    3    4

现在如果我试图将每个强度图像除以4,我得到:

>> B = A / 4

B =

    0    1
    1    1

这是因为图像类型是uint8,因此当发生除法并且结果是浮点数时,结果是舍入,这很可能是正在发生的事情在你的情况下。

如果要保持浮点精度,则需要将图像显式转换为double

x = imread('test.jpg');
x = double(x); %// Change
y = max(x(:));
out = x / y;

顺便说一下,既然您想要将图片标准化以使其落在[0,1]的范围内,我强烈建议您不要这样做并使用im2double功能代替。它将为您执行此规范化以及进行其他健全性检查:

x = imread('test.jpg');
out = im2double(x);