2012-11-02 50 views
1

我試圖使用找到的在Matlab圖像的每個像素的base 10log以下代碼Matlab的錯誤,同時尋找日誌

m1 = imread('owl','pgm'); 
for x = 1:size(m1,1) 
    for y = 1:size(m1,2) 
     m1(x,y) = log10(m1(x,y)); 
    end 
end 

這裏m1是順序的2-d陣列221 X 201 但我面對這個錯誤

??? Undefined function or method 'log2' for input arguments of type 'uint8'. 

Error in ==> log10 at 20 
y = log2(x); 

Error in ==> q2 at 38 
     m1(x,y) = log10(m1(x,y)); 

但是當我調試日誌功能,使用下面的代碼

fprintf('log of 190 is %d', log10(190)); 

它給了我正確的輸出我不知道當我在循環中使用相同的代碼時發生了什麼。

回答

3

錯誤消息告訴你問題出在哪裏,你試過將log10函數應用於uint8類型的值,並且該函數沒有爲該類型的數字定義。你沒有意識到的是,當一個圖像文件符合某些標準(閱讀這些標準的文檔)時,imread將把像素數據捕獲到uint8的數組中,而不是實數。

如果你想利用uint8你要麼必須定義自己的對數函數,它接受這樣的投入,或者更直白的對數,鑄uint8以這樣一種類型,log10很滿意。例如,你可以寫:

log10(double(m1(x,y))) 

而現在你已經意識到爲什麼你的診斷測試沒有告訴你任何有用的事情,當你執行命令log10(190) Matlab的,默認情況下,決定190是鍵入double並計算對數而不抱怨。 log10(uint8(190))講述了一個不同的故事。