Matlab Bug - 矩阵元素保持最大化

时间:2013-07-17 15:59:32

标签: matlab scaling

我的代码中有一个奇怪的错误,我似乎无法弄明白。对于上下文,我是一个图像,一个矩阵,由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,但元素仍然是最大的当我用222替换术语时,如下所示:

ngtdm(I(r,c)+1)=ngtdm(I(r,c)+1)+222; 

我得到正确的值,大于255的数字。

我似乎无法弄清楚为什么我的元素总是在255处达到最大值。这可能与我的值在0到255之间缩放的事实有关。我非常肯定getSpatAvg是不是问题,因为正在返回正确的值。

谢谢

1 个答案:

答案 0 :(得分:1)

这不是错误 - 听起来你使用的是uint8数据类型。如果转换为具有更多位的数据类型 - 例如uint16,uint32,single,double等 - 你不会遇到这个问题。我猜您正在使用图像,因为使用imread读取的图像默认为uint8读取以节省内存。最快的修复:在函数开始时使用I=double(I);,或者在将函数放入函数之前使用变量I。

相关问题