1

当我实现以下代码时,我在 M 的值上遇到问题。它为 M(i,j) 的所有值给出 1。我该如何解决这个问题???

img = rgb2gray(imread('Einstein.bmp'));
img1 = double(img);
M = double(zeros(size(img,1),size(img,2)));
for i=1:size(img,1)
    for j=1:size(img,2)
        M(i,j)=1+(double(exp(-img1(i,j))));
    end
end

问题是当我写M(i,j)=(double(exp(-img1(i,j)))); 然后我在 M 中得到浮点值,但是当我写M(i,j)=1+(double(exp(-img1(i,j)))); 然后我将矩阵 M 的所有值都设为 1。

请帮我。

4

1 回答 1

0

这基本上是由于有效数字数量的限制而发生的double。我尝试了一段简单的代码:

for(i=0:255)
    if(exp(-i)+1==1)
        i
        break
    end
end

这在我的计算机上给出了 37,这基本上表示任何img1大于或等于 37 的值将在取指数时映射到 1,因为1+exp(-img1)超过了允许的有效数字的数量double(我们坚持单位位置是有效数字)。显然,当您使用 时,这不是问题exp(-img1),因为它只是需要更改的指数,而不是有效位数。

根据您要采用的原因1+exp(-img1),我建议尝试将图像中的值标准化,使其在 [0,30] 内,或使用 [0...255]img1本身的整数值。

于 2013-09-13T07:16:22.353 回答