0

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

这是代码的一部分:

x = imread('test.jpg');

y = max(x(:));

例如,我得到 226 作为最大强度值。我尝试 x/y 并得到一个矩阵,其值为 1,并且在单个数字强度值上大部分为 0。这里有我缺少的部分吗?

我尝试创建一个对角线为 255 的零 4x4 矩阵。然后我将它与 y 分开。我得到一些“相同的整数类错误”。

4

1 回答 1

2

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

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

A =

    1    2
    3    4

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

>> B = A / 4

B =

    0    1
    1    1

这是因为图像类型是uint8,所以当发生除法并且结果是浮点数时,结果是rounded,这很可能是您的情况发生的情况。


如果要保持浮点精度,则需要将图像显式转换为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);
于 2016-02-17T06:52:58.253 回答