2010-08-11 49 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