基本LBP:
逐行扫描图像,以图像中的每个像素点得灰度值为阈值,对其周围3*3的8邻域进行二值化,并从左上点开始按照顺时针方向(或逆时针,统一即可)将二值化结果组成一个二进制数,转换为十进制作为中心点的响应。这样可以得到一个LBP图像。
例如:
这个响应图像的直方图称为LBP统计直方图或LBP直方图。
生成LBP图像MATLAB代码:
%局部二进制模式LBP
close all
clear all
img=imread('sophie.bmp');
[m n]=size(img);
I=zeros(m,n);
for i=1:m
for j=1:n
b0=0;
b1=0;
b2=0;
b3=0;
b4=0;
b5=0;
b6=0;
b7=0;
if(i-1>0 && j-1>0 && i+1<=m && j+1<=n)
if(img(i-1,j-1)>img(i,j))
b0=1;
end
if(img(i-1,j)>img(i,j))
b1=1;
end
if(img(i-1,j+1)>img(i,j))
b2=1;
end
if(img(i,j+1)>img(i,j))
b3=1;
end
if(img(i+1,j+1)>img(i,j))
b4=1;
end
if(img(i+1,j)>img(i,j))
b5=1;
end
if(img(i+1,j-1)>img(i,j))
b6=1;
end
if(img(i,j-1)>img(i,j))
b7=1;
end
if(img(i+1,j-1)>img(i,j))
b5=1;
end
b=b0+b1*2^1+b2*2^2+b3*2^3+b4*2^4+b5*2^5+b6*2^6+b7*2^7;
I(i,j)=b;
end
end
figure
subplot(1,2,1),subimage(img);
title('原图');
subplot(1,2,2),subimage(I);
title('LBP图像');
运行结果如下: