当我实现以下代码时,我在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>
请帮帮我。
答案 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
本身。