我不太清楚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
答案 0 :(得分:1)
返回的向量
RIUHist=hist(data, bins)
是data
的元素最接近bins
向量标识的点的计数。因此,如果您的值为178114
,则juts意味着178114
的{{1}}个元素最接近data
中的匹配索引。
您可以使用
bins
让Matlab选择垃圾箱(我相信它使用20个垃圾箱)或
[RIUHist, binsOut] = hist(data)
让Matlab选择垃圾箱,但强制使用一定数量的垃圾箱(我经常使用100或200)。