LBP特徵Matlab和C實現
阿新 • • 發佈:2018-11-11
LBP特徵成為區域性二值模式,具有旋轉不變性,不受光照影響
主要分為一下幾個步驟:
1.中心點鄰域內8個畫素,以中心點畫素值為閾值,鄰域內八個畫素值大於中心點畫素值即為1,小於中心點畫素值即為0
2.周圍八個畫素點形成一個八位的二進位制串比如11111111,即為255,00000000即為0,所以二進位制串再(0,255)範圍內
3.進行旋轉,從左上角開始,然後按順序進行旋轉,形成八個二進位制串,然後找出這個八個中的最小值代替中心點畫素值,因此具有旋轉不變性
Matlab程式碼如下:
function [LBPImage]=GetLBPImage(image) B=rgb2gray(image); [m,n]=size(B); X=[-1,0,1,1,1,0,-1,-1];%定義8個方向 Y=[-1,-1,-1,0,1,1,1,0]; prop=[];%屬性,是否大於中心點畫素值 value=0; for i=2:m-1 for j=2:n-1 for k=1:8 y=i+Y(k);//新座標 x=j+X(k); if B(i,j)>B(y,x) prop(k)=0;%小於中心點即為0 else prop(k)=1;%大於中心點即為1 end end for m=1:8 value=value+(2^(8-m))*prop(m);%計算新的畫素值 end LBPImage(i,j)=value; value=0; end end
C語言程式碼:
在C語言中影象是陣列形式,引數為:輸入影象,LBP特徵圖
void CalculateLBPImage(X_UInt8 image[IMAGE_HEIGHT][IMAGE_WIDTH],X_UInt8 LBPImage[IMAGE_HEIGHT][IMAGE_WIDTH])
{
int i,j,k;
int x,y;
int BinaryValue[8];
int value;
vector<int>LBPvalue;
//定義八個方向
int direction[8][2]={{-1,-1},{0,- 1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}};
for(i=1;i<IMAGE_HEIGHT-1;i++)
{
for(j =1;j<IMAGE_WIDTH-1;j++)
{
for(int k=0;k<8;k++)
{
x=j+direction[k][0];//周圍的座標
y=i+direction[k][1];
if(image[y][x]> image[i][j])
{
BinaryValue[k]=1;
}
else
{
BinaryValue[k]=0;
}
}
for(int m=0;m<8;m++)
{
value+=BinaryValue[m]*(2^(7-m));//計算每一次旋轉之後的畫素值
}
LBPImage[i][j]=value;
}
}
}
原圖:
LBP影象: