0

私のコードには、理解できないような奇妙なバグがあります。文脈上、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 が問題ではないことはかなり確信しています。正しい値が返されているためです。

ありがとうございました

4

1 に答える 1