用传统的特征加分类器的方法做人脸检测的应用,涉及到图像特征的问题,刚好回顾一下这几个特征并作一下总结,本文涉及到的特征有,HARR,HOG,LBP,SIFT,SURF。
1.HARR
1.1、首先看看定义了下面的这几种harr特征:
可以分为4类,当然也有分为3类的,这个没关系。
然后在给定的图片上用上面的这几种特征遍历图片用黑色的部分覆盖的像素和减去白色部分的像素和得到的值就是特征值(opencv中的实现好像是是白色部分减去黑色部分,没关系,只要训练和应用是相同的计算方式就行)
上图只是harr特征的形状,实际上在图像(假设训练图像大小是20x20)上的每一个特征的的大小是2x2,4x4,6x6...20x20。每种尺寸还可以放在不同的位置求取,也就是遍历可能的位置(0,0),...(20-sizex,20-sizey),那么提取的特征数量是很大的,远远超过20x20=400维。
1.2、积分图
这种计算可想而知,每次计算某一块像素的和,计算的冗余度很大,那么聪明的前辈就发明了积分图的方法,这种方法就大大减少了冗余的计算量。
如下图所示,图像中的每个点(x,y)保存以它为右下角的矩形内样本图像的灰度和。
有了积分图像之后,求取一个矩形内像素的和变得非常简单快捷,例如下图中的情况,我们要求取D矩形的像素和,D区域可以分解为以下四个矩形的运算结果:
(A+B+C+D)-(A+B)-(A+C)+A
可见在积分图像上求取一个矩形像素点的和只需要一次加法和两次减法。
2、HOG
方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。
颜色空间归一化—>梯度计算—>梯度方向直方图—>重叠块直方图归一化—>HOG特征
2.1 颜色空间归一化
由于图像的采集环境、装置等因素,采集到的人脸图像效果可能不是很好,容易出现误检或漏检的情况,所以需要对采集到的人脸进行图像预处理,主要是处理光线太暗或太强的情况,这里有两次处理:图像灰度化、Gamma校正。
图像灰度化好理解,在同一灰度的维度下减少变化量,Gamma校正是在图像照度不均匀的情况下,可以通过Gamma校正,将图像整体亮度提高或降低。在实际中可以采用两种不同的方式进行Gamma标准化,平方根、对数法。经过上述的两种变换的图像的对比图如下:
2.2 梯度计算
对经过颜色空间归一化后的图像,求取其梯度及梯度方向。分别在水平和垂直方向进行计算,梯度算子为:
水平方向:[-1,0,1] 垂直方向:[-1 0 1]T
2.3 梯度方向直方图
将图像划分成若干个cells(单元),8x8=64个像素为一个cell,相邻的cell之间不重叠。在每个cell内统计梯度方向直方图,将所有梯度方向划分为9个bin(即9维特征向量),作为直方图的横轴,角度范围所对应的梯度值累加值作为直方图纵轴,每个bin的角度范围如下。
2.4 重叠块直方图归一化
假设一幅图像是640*480,若分成若干个8x8的cells,就是没有重叠的80*60个cells,当然如果图像不能被8整除那先resize一下图像,保证整除。
由于图像中光照情况和背景的变化多样,梯度值的变化范围会比较大,特征标准化对于检测率的提高相当重要。标准化的方法多种多样,大多数的都是将celll放在block中,然后标准化每个block。那么有80*60个cells,将左右上下相邻的2*2个cells当做一个block,block的步长为1,那么就有79*59个block。
对block进行标准化,一个block内有4个cell,每个cell含9维特征向量,故每个block就由4x9=36维特征向量来表征。
一般采用L2-norm,简单 且检测中效果相对较好。
经过上述对有重叠部分block的直方图归一化之后,将所有block的特征向量都组合起来,则形成79x59x36=167796维特征向量,这就是HOG特征,这个特征向量就可以用来表征整个图像了。
实际上不是提取整个图像的特征,而是用固定的窗口来遍历原图像,步长为定值,然后判断一个一个的固定窗口中是否有待检测的目标。
3、LBP
http://blog.csdn.net/quincuntial/article/details/50541815
LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。提取的特征是图像的局部的纹理特征;
3.1 原始LBP特征的描述
原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。
3.2 圆形LBP算子
基本的 LBP算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对 LBP 算子进行了改进,将 3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子;
3.3 旋转不变LBP
LBP 算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的 LBP值。
Maenpaa等人又将 LBP算子进行了扩展,提出了具有旋转不变性的 LBP 算子,即不断旋转圆形邻域得到一系列初始定义的 LBP值,取其最小值作为该邻域的 LBP 值。
3.4 等价LBP
一个LBP算子可以产生不同的二进制模式,对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生P2种模式。很显然,随着邻域集内采样点数的增加,二进制模式的种类是急剧增加的。例如:5×5邻域内20个采样点,有2的20次方=1,048,576种二进制模式(疑问1:5×5邻域内为什么是20个采样点,基于圆形的LBP采样点数目是可以调整吗?)。如此多的二值模式无论对于纹理的提取还是对于纹理的识别、分类及信息的存取都是不利的。同时,过多的模式种类对于纹理的表达是不利的。例如,将LBP算子用于纹理分类或人脸识别时,常采用LBP模式的统计直方图来表达图像的信息,而较多的模式种类将使得数据量过大,且直方图过于稀疏。因此,需要对原始的LBP模式进行降维,使得数据量减少的情况下能最好的代表图像的信息。
Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)。通过这样的改进,二进制模式的种类大大减少,而不会丢失任何信息。模式数量由原来的2的P次方种减少为 P ( P-1)+2种,其中P表示邻域集内的采样点数。
具体实现:采样点数目为8个,即LBP特征值有28种,共256个值,正好对应灰度图像的0-255,因此原始的LBP特征图像是一幅正常的灰度图像,而等价模式LBP特征,根据0-1跳变次数,将这256个LBP特征值分为了59类,从跳变次数上划分:跳变0次—2个,跳变1次—0个,跳变2次—56个,跳变3次—0个,跳变4次—140个,跳变5次—0个,跳变6次—56个,跳变7次—0个,跳变8次—2个。共9种跳变情况,将这256个值进行分配,跳变小于2次的为等价模式类,共58个,他们对应的值按照从小到大分别编码为1—58,即它们在LBP特征图像中的灰度值为1—58,而除了等价模式类之外的混合模式类被编码为0,即它们在LBP特征中的灰度值为0,因此等价模式LBP特征图像整体偏暗。
(疑问2:这里的 P ( P-1)+2计算的,还没推断分析,注意这里的每类跳变的计算是循环统计跳变次数)
3.5 MB-LBP特征
将图像分成一个个小块(Block),每个小块再分为一个个的小区域(类似于HOG中的cell),小区域内的灰度平均值作为当前小区域的灰度值,与周围小区域灰度进行比较形成LBP特征,生成的特征称为MB-LBP,Block大小为3*3,则小区域的大小为1,就是原始的LBP特征,上图的Block大小为9*9,小区域的大小为3*3。
opencv中的人脸检测中的LBP用了该方法,这里看看源码。
还没有结束,作者对得到LBP特征又进行了均值模式编码,通过对得到的特征图求直方图,得到了LBP特征值0-255之间(0-255即直方图中的bin)的特征数量,通过对bin中的数值进行排序,通过权衡,将排序在前63位的特征值看作是等价模式类,其他的为混合模式类,总共64类,作者在论文中称之为SEMB-LBP(Statistically Effective MB-LBP )。类似于等价模式LBP,等价模式的LBP的等价模式类为58种,混合模式类1种,共59种。二者除了等价模式类的数量不同之外,主要区别在于:对等价模式类的定义不同,等价模式LBP是根据0-1的跳变次数定义的,而SEMB-LBP是通过对直方图排序得到的。当然下一步要做的就是将SEMB-LBP变为LBPH进行使用。
MB-LBP有点类似于先将图像进行平滑处理,然后再求LBP特征。而SEMB-LBP是在MB-LBP进行编码后的图像。类似于等价模式LBP,先求LBP特征,再用等价模式进行编码。当Scale=3时,MB-LBP和SEMB-LBP就是LBP和等价模式LBP。
3.6 LBPH
LBPH,Local Binary Patterns Histograms,即LBP特征的统计直方图,LBPH将LBP特征与图像的空间信息结合在一起。这种表示方法由Ahonen等人在论文[3]中提出,他们将LBP特征图像分成m个局部块,并提取每个局部块的直方图,然后将这些直方图依次连接在一起形成LBP特征的统计直方图,即LBPH。
1. 计算图像的LBP特征图像,在上面已经讲过了。
2. 将LBP特征图像进行分块,Opencv中默认将LBP特征图像分成8行8列64块区域
3. 计算每块区域特征图像的直方图cell_LBPH,将直方图进行归一化,直方图大小为1*numPatterns
4. 将上面计算的每块区域特征图像的直方图按分块的空间顺序依次排列成一行,形成LBP特征向量,大小为1*(numPatterns*64)
5. 用机器学习的方法对LBP特征向量进行训练,用来检测和识别目标
说明:
上面的LBP特征都是较经典的LBP特征,除此之外,LBP特征还有大量的变种,如TLBP(中心像素与周围所有像素比较,而不是根据采样点的数目),DLBP(编码标准四个方向的灰度变化,每个方向上用2比特编码),MLBP(将中心像素值替换成采样点像素的平均值),MB-LBP(上面有介绍),VLBP(没太看懂),RGB-LBP(RGB图像分别计算LBP,然后连接在一起)等
4、SIFT
待完善
5、SURF
待完善