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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xinzhangyanxiang/article/details/37317863

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

1        引言

之前讲了人脸识别中的Haar特征,本文则关注人脸检测中的LBP特征,说是对于人脸检测的,其实对于其他物体也能检测,只需修改训练数据集即可。所以本文的题目是物体检测识别,比如可以检测是否汽车是否有车牌号等。

在opencv实现的haar特征的人脸识别算法中,LBP特征也被支持。

haar特征的博文链接:http://blog.csdn.net/stdcoutzyx/article/details/34842233

2        LBP的历史

1996年,Ojala老大爷搞出了LBP特征,也即参考文献1。当时好像并未引发什么波澜。到了2002年的时候,老大爷又对LBP的特性进行了总结,产生了参考文献2,这篇文献目前为止引用数目4600+,足见其分量之重了。

到了2004年的时候,Ahonen将LBP特征首次用于人脸检测,即参考文献3。由于该特征的简单易算性,虽然其总体效果不如Haar特征,但速度则快于Haar,所以也得到了广泛的使用。

2007年的时候,中科院的一帮大神将Haar特征计算的积分图方法引入进来,产生了多尺度的LBP特征,也即参考文献4。使得LBP在人脸识别的检测率上又提高了不少。

LBP特征与多尺度LBP以及LBP在人脸识别中的应用就是本文的主要内容。

3        LBP特征

言归正传,什么是LBP特征呢?LBP,是Local Binary Pattern(局部二值模式)的缩写。其定义如下:

以邻域中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3x3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该邻域中心像素点的LBP值,并用这个值来反映该区域的纹理信息。

下图反应了某个像素的具体的LBP特征值的计算过程,需要注意的是,LBP值是按照顺时针方向组成的二进制数。


用公式来定义的话,如下所示:


其中代表3x3邻域的中心元素,它的像素值为ic,ip代表邻域内其他像素的值。s(x)是符号函数,定义如下:


4        LBP特征的圆形化改进

原始论文[1]中定义了基础LBP后,还定义了一种改进方法,即圆形化LBP。

基本的 LBP算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对 LBP 算子进行了改进,将 3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子。

比如下图定了一个5x5的邻域:


上图内有八个黑色的采样点,每个采样点的值可以通过下式计算:


其中为邻域中心点,为某个采样点。通过上式可以计算任意个采样点的坐标,但是计算得到的坐标未必完全是整数,所以可以通过双线性插值来得到该采样点的像素值:


下图列举了几种不同半径不同采样点的LBP算子样例。


5        LBP特征的再转化

经过LBP算子的计算后,图像上对应于每个像素都会有一个LBP特征值,如果LBP特征计算时采样点是8个的话,那么LBP特征值的范围也是0~255。也可以表示成一张图像。称之为LBP图谱。如下图所示:


上图中,上面一行是原图,下面一行是LBP图谱。可以看到LBP特征的一个优势,就是LBP对光照有很好的鲁棒性。

但是,在实际应用中,并不使用LBP图谱做特征。那使用什么哩?

对于八采样点的LBP算子来说,特征值范围为0~255,对每个特征值进行统计,比如得到特征值为1的LBP值有多少个、特征值为245的LBP值有多少个等等。这样就形成了一个直方图,该直方图有256个bin,即256个分量,也可以把该直方图当做一个长度为256的向量。

如果直接使用该向量的话,那么对八采样点的LBP算子来说,一张图片至多会形成一个256长度的一个向量,这样位置信息就全部丢失了,会造成很大的精度问题。所以在实际中还会再有一个技巧,就是先把图像分成若干个区域,对每个区域进行统计得到直方图向量,再将这些向量整合起来形成一个大的向量。下图就将一张人脸图像分成了7x7的子区域。


6        LBP特征的使用

本文介绍两个LBP特征的使用。其一是图像相似度计算,其二是人脸检测。

6.1   图像相似度计算

每个图像都可以使用一个LBP特征向量来表示,图像的相似度就可以使用向量的相似度来计算。

向量的相似度计算方法有很多,比如余弦、距离等。在文献3中,这种基于直方图向量的相似度计算方法给出了三种,如下图所示。


上图中公式只是针对一个直方图的,使用中还会将图像分为多个区域分别计算直方图。所以在实际使用中,还可对不同区域进行加权。


6.2   特定人脸检测

在上述计算图像相似度的公式中,需要对每个分量计算一个值(差值、最小值等),然后将这些值累加。我们还可以这样考虑,不将每个分量计算出的值累加,而是形成一个新的向量,暂时称之为差异向量。这样就可以针对特定人脸进行检测了。

具体训练方法是这样:

a)        首先准备训练集,正例是同一个人的人脸的两张图像的差异向量,负例是不同人的人脸的两张图像的差异向量。

b)       然后,使用如Adaboost、SVM、朴素贝叶斯等分类方法对训练集进行训练,得到分类模型。

在测试时,假设有一张图像A,现在需要判断图像B与图像A中的人脸是否是同一个人,那么首先计算出两张图像的差异向量,然后使用训练得到的分类模型对其进行分类,如果分类为正,则是同一个人。当然,前提假设是图像A与图像B都是人脸图像。

7        LBP特征降维

一个LBP算子可以产生不同的二进制模式,对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生2^P种模式。很显然,随着邻域集内采样点数的增加,二进制模式的种类是急剧增加的。例如:5×5邻域内20个采样点,有2^20=1,048,576种二进制模式。如此多的二值模式无论对于纹理的提取还是对于纹理的识别、分类及信息的存取都是不利的。同时,过多的模式种类对于纹理的表达是不利的。例如,将LBP算子用于纹理分类或人脸识别时,常采用LBP模式的统计直方图来表达图像的信息,而较多的模式种类将使得数据量过大,且直方图过于稀疏。因此,需要对原始的LBP模式进行降维,使得数据量减少的情况下能最好的代表图像的信息。

为了解决二进制模式过多的问题,提高统计性,Ojala提出了采用一种“等价模式”(Uniform Pattern)来对LBP算子的模式种类进行降维。Ojala等认为,在实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。因此,Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)。比如下图给出了几种等价模式的示意图。


通过这样的改进,二进制模式的种类大大减少,而不会丢失任何信息。模式数量由原来的2P种减少为 P ( P-1)+2种,其中P表示邻域集内的采样点数。对于3×3邻域内8个采样点来说,二进制模式由原始的256种减少为58种,这使得特征向量的维数更少,并且可以减少高频噪声带来的影响。

由上可见,等价模式降维的理论基础是至多包含两次跳变的模式的数目占全部模式的大多数。实验也表明,一般情况下,基础LBP特征中,至多包含两次跳变的模式的数目占了全部模式数目的90%。

8        多尺度LBP

本节主要是参考文献4的成果。

基本LBP是计算的单个像素与其相邻像素的差值信息。它捕捉的是微观特征。但是不能捕捉宏观上的特征。文献4在此方面进行了改进。它提出可以将LBP算子等比例放大,计算区域与区域之间的差值信息。如下图所示:


上图就是放大3倍后的LBP算子,这时,中心元素变为了0区域9个像素的像素和,该区域的LBP特征值就变为0区域和其他区域的像素和之间的计算了。在此需要注意的是,此时的LBP特征针对的是一个区域而不是一个像素了。在计算像素和之差的时候,可以使用Haar特征时提到的积分图方法进行加速计算。

多尺度模式下,等价模式类降维的理论基础不复存在。那么,它是如何降维的呢?

论文中提到的方法是直接采用统计的方法对不同尺度的LBP算子的模式进行统计,选取占比例较高的模式。而不是利用跳变规则。

9        总结

LBP特征与Haar特征虽然计算方法差异很大,但它们都有一个共同的目标,那就是对图像的信息进行表示,从而使图像的所存储的信息能更充分的被算法所利用。图像中像素与LBP特征、Haar特征之间的关系比较类似于文本分析中字与词之间的关系。文本分析中,如果想要获得语义理解的话,那应该需要处理句子、短语、词语等,单单分析字是远远不够的。图像处理中,要想得到丰富的图像包含的信息,单单分析像素也是不够的。

本文与Haar特征的那篇博文都使用到了Adaboost分类器,但其使用的目的却完全不一样,Haar特征中使用Adaboost是对有脸和无脸的图像进行分类,而本文是对是不是同一个人的脸进行分类。从这就可以感觉的到,很多机器学习问题其实本质上都可以化为分类问题,当然,另一大类是回归问题。

个人觉得本篇博文对LBP的讨论已经够全面了。有想深入学习的同学请阅读参考文献,欢迎来信讨论。

转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/37317863

参考文献

[1]. Ojala, T., Pietik¨ainen, M., Harwood, D.: A comparative study of texture measures with classification based on feature distributions. Pattern Recognition 29 (1996)51–59.
[2]. Ojala T, Pietikainen M, Maenpaa T. Multiresolution gray-scale and rotation invariant texture classification with local binary patterns[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 2002, 24(7): 971-987. 
[3]. Ahonen T, Hadid A, Pietikäinen M. Face recognition with local binary patterns[M]//Computer vision-eccv 2004. Springer Berlin Heidelberg, 2004: 469-481. 
[4]. Liao S, Zhu X, Lei Z, et al. Learning multi-scale block local binary patterns for face recognition[M]//Advances in Biometrics. Springer Berlin Heidelberg, 2007: 828-837. 

[5]. http://blog.csdn.net/smartempire/article/details/23249517

[6]. http://blog.csdn.net/zouxy09/article/details/7929531

展开阅读全文

没有更多推荐了,返回首页