2011-12-14 55 views
1

我不是很確定MATLAB中的hist函數是如何工作的。我似乎沒有什麼問題。基本上,在下面的代碼中,我試圖運行旋轉不變的統一局部二元模式(LBP)代碼。我對LBP代碼沒有任何問題,但問題出在hist功能上(如下面的代碼所示)。不知道MATLAB中的hist函數如何工作

問題是,我應該得到的範圍是從0:9,但是當我應用直方圖函數時,我得到的值大於9,例如35,27,甚至值如178114.不確定如何更正它。

I2 = imread('test.png'); 
RIUniformHist=[]; 
m=size(I2,1); 
n=size(I2,2); 
for i=1:10:m 
    for j=1:10:n 
     for k=i+1:i+8 
      for l=j+1:j+8 
      J0=I2(k,l); 
      I3(k-1,l-1)=I2(k-1,l-1)>J0; 
      I3(k-1,l)=I2(k-1,l)>J0; 
      I3(k-1,l+1)=I2(k-1,l+1)>J0; 
      I3(k,l+1)=I2(k,l+1)>J0; 
      I3(k+1,l+1)=I2(k+1,l+1)>J0; 
      I3(k+1,l)=I2(k+1,l)>J0; 
      I3(k+1,l-1)=I2(k+1,l-1)>J0; 
      I3(k,l-1)=I2(k,l-1)>J0; 
      LBP=I3(k-1,l-1)*2^7+I3(k-1,l)*2^6+I3(k-1,l+1)*2^5+I3(k,l+1)*2^4+I3(k+1,l+1)*2^3+I3(k+1,l)*2^2+I3(k+1,l-1)*2^1+I3(k,l-1)*2^0; 
      bits = bitand(LBP, 2.^(7:-1:0))>0; 
      if nnz(diff(bits([1:end, 1]))) <= 2 
       RIULBP(k,l)=abs(I3(k-1,l-1)-I3(k-1,l))+ abs(I3(k-1,l)-I3(k-1,l+1))+ abs(I3(k-1,l+1)-I3(k,l+1))+ abs(I3(k,l+1)-I3(k+1,l+1))+abs(I3(k+1,l+1)-I3(k+1,l))+abs(I3(k+1,l)-I3(k+1,l-1))+abs(I3(k+1,l-1)-I3(k,l-1)); 
      else 
       RIULBP(k,l)=9; 
      end 
      end 
     end 
     RIULBP=uint8(RIULBP); 
     RIULBPv=reshape(RIULBP,1,size(RIULBP,1)*size(RIULBP,2)); 
     RIUHist=hist(RIULBPv,0:9); % problem 
     RIUniformHist = [RIUniformHist RIUHist]; 
    end 
end 
+0

請發佈一些更簡單的示例代碼。 – 2011-12-14 17:57:57

回答

1

載體通過

RIUHist=hist(data, bins) 

返回是的data許多元素如何最接近由bins向量識別的點計數。因此,如果您的值爲178114,那麼這意味着有178114個元素databins中的匹配索引最接近。

您可以使用

[RIUHist, binsOut] = hist(data) 

讓Matlab的選擇箱(我相信它使用20個箱)或

[RIUHist, binsOut] = hist(data, binCount) 

爲了讓Matlab的選擇垃圾桶,但強制一定數量箱(我經常使用100或200)。

+0

所以是我的代碼錯誤或正確? – user999450 2011-12-14 18:22:41

相關問題