本篇文章仅为本人加深图像处理算法的理解,有不严谨的地方,不作为学习的参考。
参考书籍:精通Matlab数字图像处理与识别,张铮等,人民邮电出版社。
局部二进制模式(LBP),最早用于图像纹理的描述,其在描述局部区域的特征方面有着卓越的能力。
1.理论基础
图像多为分区图像,标准的LBP直方图的维数较高,且局部直方图过于稀疏。基于此提出统一化模式的概念。
统一化模式:二进制串***循环***变化的次数小于等于2.大于2的为非统一化模式。
每个统一化模式占一个收集箱,非统一化模式统一占一个收集箱。如8邻域,收集箱的个数为:2+0+56+1=59.
分为:
3.统一化LBP算子matlab程序实现
3.1生成映射表
function vecmapping=getmapping1(sp); %生成映射表 % sp为采样点个数 cnt=sp; bits=zeros(1,8); vecmapping=zeros(1,256); ibcnt=1; for i=0:255 num=i; icnt=0; while(num) bits(cnt-icnt)=mod(num,2); num=floor(num/2); icnt=icnt+1; end if IsUniform(bits) vecmapping(i+1)=ibcnt; ibcnt=ibcnt+1; else vecmapping(i+1)=59; end end save('LBPmapping.mat','vecmapping'); function result = IsUniform( bits ) n=length(bits); njump=0; for i=1:n-1 if bits(i)~=bits(i+1); njump=njump+1; end end if bits(n)~=bits(1); njump=njump+1; end if njump>2 result=false; else result=true; end
3.2 得到图像的LBP81
function histLBP = getimageLBP( B,r ) %LBP81 load 'LBPmapping.mat'; image=B; [m,n]=size(image); if (m<=2*r) || (n<=2*r) error('image is too small'); end imageLBP=zeros(m-2*r,n-2*r); image_LBP=zeros(1,8); histLBP=zeros(1,59); for i=1+r:m-r for j=1+r:n-r ncn=1; image_LBP(ncn)=image(i,j-r); ncn=ncn+1; value1=image(i-1,j-1)+0.2929*(image(i-1,j)-image(i-1,j-1)); value2=image(i,j-1)+0.2929*(image(i,j)-image(i,j-1)); value=value1+0.2929*(value2-value1); image_LBP(ncn)=value; ncn=ncn+1; image_LBP(ncn)=image(i-1,j); ncn=ncn+1; value1=image(i-1,j)+0.7071*(image(i-1,j+1)-image(i-1,j)); value2=image(i,j)+0.7071*(image(i,j+1)-image(i,j)); value=value1+0.2929*(value2-value1); image_LBP(ncn)=value; ncn=ncn+1; image_LBP(ncn)=image(i,j+1); ncn=ncn+1; value1=image(i+1,j)+0.7071*(image(i+1,j+1)-image(i+1,j)); value2=image(i,j)+0.7071*(image(i,j+1)-image(i,j)); value=value1+0.2929*(value2-value1); image_LBP(ncn)=value; ncn=ncn+1; image_LBP(ncn)=image(i+1,j); ncn=ncn+1; value1=image(i+1,j-1)+0.2929*(image(i+1,j)-image(i+1,j-1)); value2=image(i,j-1)+0.2929*(image(i,j)-image(i,j-1)); value=value1+0.2929*(value2-value1); image_LBP(ncn)=value; for i1=1:ncn if image_LBP(i1)>=image(i,j) imageLBP(i-r,j-r)=imageLBP(i-r,j-r)+2^(ncn-i1); end end end end for i2=1:m-2*r for j2=1:n-2*r histLBP(vecmapping(imageLBP(i2,j2)+1))= histLBP(vecmapping(imageLBP(i2,j2)+1))+1; end end end
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


