我的代码中有一个我似乎无法弄清楚的特殊错误。对于上下文,I 是一个图像,一个矩阵,由从 0 到 255 的缩放值组成。GetSpatAvg 是一个不包含在此处的函数。我面临的问题是 ngtdm 中的元素总是最大为 255。当这个函数完成时,我得到矩阵 ngtdm 包含许多 255 的值。下面的代码与我的计算机上显示的完全一样。
function ngtdm = getNGTDM(I,d)
[rowI, colI] = size(I);
ngtdm = zeros(256, 1);
for r=1+d:rowI-d
for c=1+d:colI-d
term = I(r,c)-getSpatAvg(r,c);
ngtdm(I(r,c)+1)=ngtdm(I(r,c)+1)+term;
end
end
end
我在下面的代码中隔离了 I 中的特定值 254。
function ngtdm = getNGTDM(I,d)
[rowI, colI] = size(I);
ngtdm = zeros(256, 1);
for r=1+d:rowI-d
for c=1+d:colI-d
if(I(r,c)==254)
term = I(r,c)-getSpatAvg(r,c);
disp(term);
ngtdm(I(r,c)+1)=ngtdm(I(r,c)+1)+term;
end
end
end
end
在本例中,变量“term”始终为 222。有 369 个实例为 222。因此 ngtdm(255) (254+1=255) 处的值应大于 255,但该元素仍最大为 255。当我用 222 替换术语时,如下所示:
ngtdm(I(r,c)+1)=ngtdm(I(r,c)+1)+222;
我得到了正确的值,一个大于 255 的数字。
我似乎无法弄清楚为什么我的元素总是在 255 时达到最大值。这可能与 I 的值在 0 到 255 之间缩放这一事实有关。我很肯定 getSpatAvg 不是问题因为正在返回正确的值。
谢谢你