在以下代码中获取错误

时间:2013-09-13 06:46:05

标签: matlab

当我实现以下代码时,我在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。 / p>

请帮帮我。

1 个答案:

答案 0 :(得分: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本身。