2014-01-19 40 views
0

我在手動創建灰度圖像中灰度值的直方圖時遇到了一些麻煩。以下是我正在使用爲要創建的圖創建箱的代碼。該代碼適用於除最後兩個之外的每個bin。由於某些原因,如果強度爲254或255,則它將兩個值都放入254箱中,並且在255箱中不累計任何值。使用Matlab數組的奇怪行爲

bins= zeros(1,256); 
[x,y]=size(grayImg); 
for i = 1:x 
    for j = 1:y 
     current = grayImg(i,j); 
     bins(current+1) = bins(current+1) + 1; 
    end 
end 
plot(bins); 

我不明白爲什麼這種行爲發生。我已經打印出254個強度和255個強度的計數,它們都是正確的。但是,使用上述代碼累積強度值時,它無法正常工作。

編輯:增加了我使用的圖像,不正確的圖形(一個我用上面的代碼獲得),以及正確的

grayscale image

Incorrect graph

Correct graph

回答

1

一你的代碼的第一個問題是bins的初始定義。看來你來自C或財產以後這樣的,但定義應該是─bins=zeros(1,256);

B.第二點是,你不需要嵌套循環,你有一個MATLAB函數特別是對:

bins=hist(grayImg(:),1:256);  % now, you don't need the pre-definition for 'bins'. 
plot(bins); 

下嘗試使用功能,如barimhisthist(grayImg(:)),它可以節省您的這一切,並提供一個很好的情節。

+0

感謝您的迴應,我曾嘗試使用箱=零(1,256),但沒有幫助。我也知道有關hist函數,但我試圖通過不使用函數中的構建來創建圖形。 – EricF

+0

哪種格式是'grayImg'?如果是uint8,嘗試用double函數將它轉換爲double。 – Adiel

+0

是的,它是單位8.感謝你的回答,我真的明白了這一點。我必須做的是轉換爲int16,因爲8位數字的值不能是256,這正是我想要做的。 – EricF