目标检测的图像特征提取之三---LBP特征

        LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。

LBP特征描述

       原始的LBP算子定义为3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0.这样,3*3领域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点LBP值,并用这个值来反映该区域的纹理信息。(见LBP特征计算.jpg)

 

LBP的改进版本

1)圆形LBP算子

       基本的LBP算子的最大缺陷就是只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要,为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求。改进后的LBP算子允许在半径为R的圆形领域内有任意多个像素点,从而得到诸如半径为R的圆形区域内含有p个采样点的LBP算子(见LBP算子.jpg)

2)LBP旋转不变模式

    从LBP定义可以看出,LBP算子是灰度不变的,但却不是旋转不变的,图像的旋转就会得到不同的LBP值。为了得到旋转不变性,即不断旋转圆形领域得到一系列初始定义的LBP值,取其最小值作为该领域的LBP值。(见旋转不变的LBP示意.jpg)

3)LBP等价模式

       一个LBP算子可以产生不同的二进制模式,对于半径为R的圆形区域内含有p个采样点的LBP算子将会产生2的p次方中模式,显然,随着领域内采样点数的增加,二进制模式的种类急剧增加。如此多的二值模式对于纹理的表达是不利的。如将LBP算子用于纹理分类或人脸识别时,常采用LBP模式的统计直方图来表达图像的信息,而较多的模式种类将使得数据量过大,且直方图过于稀疏,因此,需要对原始的LBP模式进行降维,使得数据减少的情况下能最好的代表图像的信息。

 

     采用一种“等价模式”来对LBP算子的模式种类进行降维(见LBP等价模式1和2.jpg)

 

LBP特征用于检测的原理

       显而易见,上述提取的LBP算子在每个像素点都可以得到一个LBP“编码”,那么,对于一副图像(记录的是每个像素的灰度值)提取其原始的LBP算子之后,得到的原始LBP特征依然是“一副图片”(记录的是每个像素点的LBP值)。

LBP的应用中,如纹理分类、人脸分析等,一般都不将LBP图谱作为特征向量用于分类识别,而是采用LBP特征谱的统计直方图作为特征向量用于分类识别。

       因为,从上面分析可以看出,这个“特征”跟位置信息是紧密相关的。 直接对两幅图提取这种特征并进行分析的话,会因为“位置没有对准”而产生很大误差。改进:可以将一副图片划分为若干的子区域,对每个子区域内的每个像素点都提取LBP特征,然后,在每个子区域内建立LBP特征的统计直方图。如此一来,每个子区域,就可以用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成。之后我们用各种相似性度量函数就可以判断两幅图像之间的相似性了。

 

对LBP特征向量进行提取的步骤

1)首先将检测窗口划分为16*16的小区域(cell)

2)对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0.这样,3*3领域内的8个点经过比较可产生8位二进制数,即得到该窗口中心像素点的LBP值;

3)然后计算每个cell的直方图,即每个数字出现的频率,然后对该直方图进行归一化处理

4)最后将得到的每个cell的统计直方图进行连接成一个特征向量,也就是整幅图的LBP纹理特征向量

然后便可以用SVM或者其他机器学习算法进行分类了。

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(openCV)