不确定MATLAB中的hist函数是如何工作的

不确定MATLAB中的hist函数是如何工作的,matlab,Matlab,我不太清楚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=

我不太清楚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
I2=imread('test.png');
RIUniformHist=[];
m=尺寸(I2,1);
n=尺寸(I2,2);
对于i=1:10:m
对于j=1:10:n
对于k=i+1:i+8
对于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;
位=位和(LBP,2.^(7:-1:0))>0;

如果nnz(diff(位([1:end,1]))由

RIUHist=hist(data, bins)
是距离
向量标识的点最近的
数据
元素数。因此,如果您的值为
178114
,则突出表示
178114
数据的
元素与
箱中的匹配索引最接近

你可以用

[RIUHist, binsOut] = hist(data)
让Matlab选择存储箱(我相信它使用20个存储箱)或


让Matlab选择存储箱,但强制使用一定数量的存储箱(我通常使用100或200)。

返回的向量

RIUHist=hist(data, bins)
是距离
向量标识的点最近的
数据
元素数。因此,如果您的值为
178114
,则突出表示
178114
数据的
元素与
箱中的匹配索引最接近

你可以用

[RIUHist, binsOut] = hist(data)
让Matlab选择存储箱(我相信它使用20个存储箱)或


要让Matlab选择存储箱,但强制使用一定数量的存储箱(我通常使用100或200)。

请发布一些更简单的示例代码。请发布一些更简单的示例代码。这取决于您尝试执行的操作。我不确定LDB代码的作用是什么,我无法按原样运行示例代码(我没有“test.png”)。我只是想回答一个特定的问题,即当您尝试从0到9创建箱子时,为什么可以从hist中获得一个大值。那么如何获得值,使RIUHist中的值介于0到9之间?这取决于您尝试执行的操作。我不确定LDB代码的作用是什么,我无法按原样运行示例代码(我没有“test.png”)。我只是想回答一个特定的问题:当你试图从0到9创建箱子时,为什么你可以从hist中获得一个大的值。那么如何获得值,使RIUHist中的值介于0到9之间?