私のコードには、理解できないような奇妙なバグがあります。文脈上、I は 0 から 255 までのスケーリングされた値で構成される画像 (行列) です。GetSpatAvg は、ここには含まれていない関数です。私が直面している問題は、ngtdm の要素が常に 255 で最大になることです。この関数が終了すると、255 の多くの値で構成される行列 ngtdm が返されます。コードは、私のコンピューターに表示されるとおりです。
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 でした。222 の 369 個のインスタンスがありました。したがって、ngtdm(255) の値 (254+1=255) は 255 より大きくなければなりませんが、要素はまだ 255 で最大になっています。以下に示すように、term を 222 に置き換えると、次のようになります。
ngtdm(I(r,c)+1)=ngtdm(I(r,c)+1)+222;
255 より大きい数値という正しい値を取得します。
私の要素が常に 255 で最大になっている理由を理解できないようです。I の値が 0 から 255 の間でスケーリングされるという事実と関係があるのでしょうか。getSpatAvg が問題ではないことはかなり確信しています。正しい値が返されているためです。
ありがとうございました