2010-08-11 42 views
3

这是我的代码:为什么我的MATLAB数组饱和值为255?

arr = zeros(fx-10,1); 
frm = frams(x).cdata; 
for k=1:fx-10 
    for i=1:10 
     for j=1:fy 
      arr(k) = arr(k)+ abs(frm(k+i-1,j)-model(i,j)) 
     end 
    end 
end 

为什么阵列只接收多达255个值?

我尝试定义:

arr = zeros(fx-10,1,'int64'); 

和代码失败:

???对于 'int64'类型的输入参数,未定义的函数或方法 '加'。

+0

您可以给我们提供'卫生组织的输出常用3 FRM model' – Amro 2010-08-11 13:47:14

+0

MATLAB的是什么版本?非双数学在MATLAB中已经有一段时间了,但并不是永远。 – MatlabDoug 2010-08-11 14:30:32

回答

5

虽然你的阵列arr是double类型,我相信一个或多个要从frmmodel得到的值是UINT8类型,当运算完成到具有255最大值将这些值添加到arr,我相信计算是使用整数算术完成的,并且结果被转换为一个双精度值以放入arr。当你不断增加UINT8值加在一起,价值最终饱和为最大255

要解决这个问题,你可以使用函数DOUBLE将值从frmmodel转换为做算术之前double类型。像这样的东西应该工作:

arr(k) = arr(k) + abs(double(frm(k+i-1,j))-double(model(i,j))); 
+0

谢谢 它非常帮助我 – sari 2010-08-11 14:33:18