原始LBP特征即是以gc为中心,比较其灰度值与它邻近的8个像素点灰度值的大小关系:如果大于等于,则取1;否则,取0。从而得到8bit的一个二进制数。后来,为了满足多尺度的要求,又引入邻域半径R:以R为半径的P点邻域,gc为中心,gp为邻域点 ;区分邻域比中心亮度大还是小。公式及示意图如下:
改变P,R 可形成多尺度LBP
原始LBP实现源码:
void LBP(IplImage* src, IplImage* dst)
{
int width=src->width;
int height=src->height;
for(int j=1;j<width-1;j++)
{
for(int i=1;i<height-1;i++)
{
uchar neighborhood[8]={0};
neighborhood[7] = CV_IMAGE_ELEM( src, uchar, i-1, j-1);
neighborhood[6] = CV_IMAGE_ELEM( src, uchar, i-1, j);
neighborhood[5] = CV_IMAGE_ELEM( src, uchar, i-1, j+1);
neighborhood[4] = CV_IMAGE_ELEM( src, uchar, i, j-1);
neighborhood[3] = CV_IMAGE_ELEM( src, uchar, i, j+1);
neighborhood[2] = CV_IMAGE_ELEM( src, uchar, i+1, j-1);
neighborhood[1] = CV_IMAGE_ELEM( src, uchar, i+1, j);
neighborhood[0] = CV_IMAGE_ELEM( src, uchar, i+1, j+1);
uchar center = CV_IMAGE_ELEM( src, uchar, i, j);
uchar temp=0;
for(int k=0;k<8;k++)
{
temp+=(neighborhood[k]>=center)<<k;
}
CV_IMAGE_ELEM( dst, uchar, i, j)=temp;
}
}
}