圆形领域LBP特征

今天师兄给了我一个博士写的LBP特征源码。上网搜索了一些资料,并结合代码,大致有了思路。

原始LBP特征是根据相邻的像素点与中间相邻点相比的大小确定置为1或0,然后对每个像素点的领域信息进行整合,变为领域个位的数的编码。然后对一个块中所有像素的编码进行直方图的统计,得到LBP特征。

圆形LBP特征就是在每一个像素点周围用圆形区域进行编码采样,其余和原始LBP特征相同。

这里有图,说的更加明白 http://blog.csdn.net/dujian996099665/article/details/8886576

这里有一个问题,假如你在圆上采样,那必然会导致部分计算出来的采样点的坐标不是整数。而在图像中,每个像素点的坐标都必须是整数。

如下图所示:若设领域半径R = 1,且采样的8个像素点等间隔的分布在这个圆上。因为红色标出的点为要计算编码的像素点,因此它的坐标为整数(x,y)。那么绿色标出的点的坐标必定不是整数,因此也无法从图像上得到这个点的像素值。

当然简单的方法可以用最近的一个点的值进行代替,但更好的方法是进行双线性插值。

也就是用绿色点周围的四个点像素值的线性组合来表示绿色“点”(在实际图像上不存在)的像素值。

也就是两次线性插值来完成绿色点的估计

双线性插值简单明了的讲解:http://www.cnblogs.com/linkr/p/3630902.html

代码给出如下,起始很乱...

void calcLBPH(IplImage *pImg, CvMat* pLBPH)
{

	int i,j,k,p;
	CvMat* pImg_mat = cvCreateMat(pImg->height,pImg->width,CV_32FC1);
	cvConvert(pImg,pImg_mat);
	CvMat * pLBP_mat = cvCreateMat(pImg->height-4,pImg->width-4,CV_32FC1);
	if(pImg->nChannels != 1)//图像必须为单通道
	{
	//	AfxMessageBox("The channels of images must be 1!");
	}
	//LBP图像像素灰度值清零
	for(i=0; i<pLBP_mat->height; i++)
	{
		for(j=0; j<pLBP_mat->width; j++)
		{
			cvmSet(pLBP_mat, i, j, 0);
		}
	}

    int weight[8]; //八个周边像素的权值
	weight[0] = 1;
	for(i=1;i<8;i++)
		weight[i] = 2 * weight[i-1];

	//为每个像素计算LBP编码
	int height = pImg->height;
	int width = pImg->width;

	double temp[4][2] = {-chaZ,chaZ,-chaZ,-chaZ,chaZ,-chaZ,chaZ,chaZ};
	double temp_y[4] = {0},temp_x[4] = {0};
	int temp_Iy[4] = {0},temp_Ix[4] = {0};
	double dis_y[4] = {0},dis_x[4] = {0};
	double wei[4][4] = {0};
	double end[4] = {0};

	for(i=2,k=0; i<height-2; i++,k++)
	{
		for(j=2,p=0; j<width-2; j++,p++)
		{
			//插值准备
			for(int m = 0;m<4;m++)
			{
				temp_y[m] = temp[m][0]+i;//插值点坐标
				temp_x[m] = temp[m][1]+j;
				temp_Iy[m] = (int)temp_y[m];
				temp_Ix[m] = (int)temp_x[m];
				dis_y[m] = temp_y[m]-temp_Iy[m];
				dis_x[m] = temp_x[m]-temp_Ix[m];
				wei[m][0] =(1-dis_x[m])*(1-dis_y[m]);
				wei[m][1] =dis_x[m]*(1-dis_y[m]);
				wei[m][2] =(1-dis_x[m])*dis_y[m];
				wei[m][3] =dis_x[m]*dis_y[m];
			}
			//插值赋值
			for(int n = 0;n<4;n++)
			{
				switch(n)
				{
				case 0:
					end[n] = (cvmGet(pImg_mat,i-2,j+1)*wei[n][0]+cvmGet(pImg_mat,i-2,j+2)*wei[n][1]+
						cvmGet(pImg_mat,i-1,j+1)*wei[n][2]+cvmGet(pImg_mat,i-1,j+2)*wei[n][3]);
					break;
				case 1:
					end[n] = (cvmGet(pImg_mat,i-2,j-2)*wei[n][0]+cvmGet(pImg_mat,i-2,j-1)*wei[n][1]+
						cvmGet(pImg_mat,i-1,j-2)*wei[n][2]+cvmGet(pImg_mat,i-1,j-1)*wei[n][3]);
					break;
				case 2:
					end[n] = (cvmGet(pImg_mat,i+1,j-2)*wei[n][0]+cvmGet(pImg_mat,i+1,j-1)*wei[n][1]+
						cvmGet(pImg_mat,i+2,j-2)*wei[n][2]+cvmGet(pImg_mat,i+2,j-1)*wei[n][3]);
					break;
				case 3:
					end[n] = (cvmGet(pImg_mat,i+1,j+1)*wei[n][0]+cvmGet(pImg_mat,i+1,j+2)*wei[n][1]+
						cvmGet(pImg_mat,i+2,j+1)*wei[n][2]+cvmGet(pImg_mat,i+2,j+2)*wei[n][3]);
					break;
				}
			}
			if(cvmGet(pImg_mat,i,j+2) >= cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[0]);
			}
			if(end[0] >= (double)cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[1]);
			}
			if(cvmGet(pImg_mat,i-2,j) >= cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[2]);
			}
			if(end[1] >= (double)cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[3]);
			}
			if(cvmGet(pImg_mat,i,j-2) >= cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[4]);
			}
			if(end[2] >= (double)cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[5]);
			}
			if(cvmGet(pImg_mat,i+2,j) >= cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[6]);
			}
			if(end[3] >= (double)cvmGet(pImg_mat, i, j))
			{
				cvmSet(pLBP_mat,k, p,cvmGet(pLBP_mat,k,p)+ weight[7]);
			}
		}
	}
    hist_num_make(pLBP_mat,pLBPH);
	cvReleaseMat(&pLBP_mat);
}
时间: 2024-10-10 02:40:12

圆形领域LBP特征的相关文章

图像特征提取三大法宝:HOG特征,LBP特征,Haar特征

(一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合 SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal 在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM

EasyPR源码剖析(6):车牌判断之LBP特征

一.LBP特征 LBP指局部二值模式,英文全称:Local Binary Pattern,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点. 原始的LBP算子定义在像素3*3的邻域内,以邻域中心像素为阈值,相邻的8个像素的灰度值与邻域中心的像素值进行比较,若周围像素大于中心像素值,则该像素点的位置被标记为1,否则为0.这样,3*3邻域内的8个点经过比较可产生8位二进制数,将这8位二进制数依次排列形成一个二进制数字,这个二进制数字就是中心像素的LBP值,LBP值共有

图像处理之图像特征提取之(二)LBP特征

LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.它是首先由T. Ojala, M.Pietik?inen, 和D. Harwood 在1994年提出,用于纹理特征提取.而且,提取的特征是图像的局部的纹理特征: 1.LBP特征的描述 原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0.这样,

图像物体检测识别中的LBP特征

1        引言 之前讲了人脸识别中的Haar特征,本文则关注人脸检测中的LBP特征,说是对于人脸检测的,其实对于其他物体也能检测,只需修改训练数据集即可.所以本文的题目是物体检测识别,比如可以检测是否汽车是否有车牌号等. 在opencv实现的haar特征的人脸识别算法中,LBP特征也被支持. haar特征的博文链接:http://blog.csdn.net/stdcoutzyx/article/details/34842233. 2        LBP的历史 1996年,Ojala老大

学习LBP特征

1.LBP特征背景介绍 LBP指局部二值模式,英文全称:Local Binary Pattern,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点. 它是由T. Ojala, M.Pietik?inen, 和 D. Harwood [1][2]在1994年提出,由于LBP特征计算简单.效果较好,因此LBP特征在计算机视觉的许多领域都 得到了广泛的应用,LBP特征比较出名的应用是用在人脸识别和目标检测中,在计算机视觉开源库OpenCV中有使用LBP特征进行人脸识别的

目标检测的图像特征提取之(二)LBP特征

LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征提取.而且,提取的特征是图像的局部的纹理特征: 1.LBP特征的描述 原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0.这样,

LBP特征

LBP(Local Binary Pattern)局部二值特征是一种纹理描述子,它度量和提取图像的局部纹理信息,对旋转和光照具有不变性.单纯的LBP记录像素点与像素点的 对比信息.LBP算子定义为在3*3窗口内,以窗口中心像素为阈值,将相邻的八个像素与其进行比较,若周围像素值大于中心像素值,则该点的标记为1,否则为0. 这样,3*3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数,即LBP码,共256种),即得到该窗口中心像素点的LBP值,并以此反映该区域的 纹理信息.如下例: 二进制

用python实现LBP特征点计算

1 import cv2 2 import numpy as np 3 4 5 def olbp(src): 6 dst = np.zeros(src.shape,dtype=src.dtype) 7 for i in range(1,src.shape[0]-1): 8 for j in range(1,src.shape[1]-1): 9 pass 10 center = src[i][j] 11 code = 0; 12 code |= (src[i-1][j-1] >= center)

【计算机视觉】LBP纹理特征

LBP简介 LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.它是首先由T. Ojala, M.Pietik?inen,和 D. Harwood 在1994年提出,用于纹理特征提取.而且,提取的特征是图像的局部的纹理特征. 从纹理分析的角度来看,图像上某个像素点的纹理特征,大多数情况下是指这个点和周围像素点的关系,即这个点和它的邻域内点的关系.从哪个角度对这种关系提取特征,就形成了不同种类的特征.有了特