簡體   English   中英

不確定MATLAB中的hist函數如何工作

[英]Not sure how the hist function in MATLAB works

我不太確定MATLAB中的hist函數如何工作。 我似乎沒有什么問題。

基本上,在下面的代碼中,我正在嘗試運行旋轉不變的統一局部二進制模式(LBP)代碼。 LBP代碼沒有問題,但問題出在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

返回的向量

RIUHist=hist(data, bins)

是距離bins向量所標識的點最近的data元素數量的計數。 因此,如果您的值為178114 ,則意味着在bins中存在最接近匹配索引的178114data元素。

您可以使用

[RIUHist, binsOut] = hist(data)

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM