特征提取之二—局部二进制模式(LBP)

本篇文章仅为本人加深图像处理算法的理解,有不严谨的地方,不作为学习的参考。
参考书籍:精通Matlab数字图像处理与识别,张铮等,人民邮电出版社。

局部二进制模式(LBP),最早用于图像纹理的描述,其在描述局部区域的特征方面有着卓越的能力。

1.理论基础

图像多为分区图像,标准的LBP直方图的维数较高,且局部直方图过于稀疏。基于此提出统一化模式的概念。
统一化模式:二进制串***循环***变化的次数小于等于2.大于2的为非统一化模式。
每个统一化模式占一个收集箱,非统一化模式统一占一个收集箱。如8邻域,收集箱的个数为:2+0+56+1=59.
分为:

image.png

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,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864