一种基于HOG特征的人脸检测方法
技术领域
本发明涉及图像处理技术,特别涉及人脸检测技术。
技术背景
人脸识别通过采集人脸图像,在图像中检测到人脸位置后,把人脸图像提取后和数据库中特征对比得到识别结果。
在人脸识别系统中,主要需要解决两个问题:(1)人脸检测;(2)人脸特征提取。人脸检测是该系统的核心技术,通过合适的算法,从图像中准确快速地找出人脸在图片中的位置并且获得人脸的大小。在人脸检测后,通过特征提取算法提取人脸特征,然后和特征库对比,从而得到人脸的身份。人脸检测得到的结果是人脸识别阶段的材料基础,所以人脸检测的准确性直接影响人脸识别和整个系统性能。在实际中,待检测的人脸图像常常受光照,遮挡,表情,背景等因素影响。对其进行适当的数学建模,实现准确快速的人脸线检测是研究的主要问题。
经过几十年的研究,研究者们提出了大量人脸检测算法,但对于光照,表情,环境变化等的鲁棒性有待提高,检测速度和精度的矛盾有待改善。
发明内容
本发明所要解决的技术问题是,提供一种具有更强鲁棒性的人脸检测方法。
本发明为解决上述技术问题所采样的技术方案是,一种基于HOG特征的人脸检测方法,包括以下步骤:
对当前图像进行光照预处理;
对当前图像进行分块,提取各分块图像的局部HOG特征,根据各分块位置将局部HOG特征输入对应局部分类器,将局部分类结果组合成特征向量,最后将特征向量输入最终分类器得到当前检测结果;
所述局部分类器通过以下步骤训练而成:
将各训练样本进行以不同尺寸进行多次分块处理,每个分块位置对应一个局部分类器;所述训练样本包括正样本、负样本;
提取训练样本各分块的局部HOG特征;
根据训练样本各分块位置对应的局部HOG特征用支持向量机SVM训练出局部分类器;
所述最终分类器通过以下步骤训练而成:
使用训练样本对所有训练出的局部分类器进行测试,对应不同分块位置的局部分类器从训练样本提取对应分块的局部HOG特征,并将该局部HOG特征输入对应位置的局部分类器;根据各局部分类器输出的分类结果选出分类正确率大于预设分类概率的局部分类器作为优选局部分类器并记录其对应的分块位置;预设分类概率大于随机分类概率;
将所有优选局部分类器输出的分类结果组成特征向量{(xi,yi)},其中,yi是第i个训练样本类别,yi=1表示正样本,yi=-1表示负样本,xi=[xi1,xi2,...,xiL]T,xi表示对第i个训练样本的局部分类结果,xik∈{1,-1},k=1,2,...,L,表示第k个优选局部分类器对第i个训练样本的局部分类结果,L表示局部分类器个数;
将特征向量{(xi,yi)}输入支持向量机SVM训练出最终分类器。
本发明先训练出大量基于HOG特征的局部SVM分类器,然后从这些局部分类器中选出分类效果较好的。把选出的各个分类器对训练样本的分类结果组合成新的特征向量,最后对这些向量再次用SVM训练出最终的分类器。
进一步的,在进行当前图像方向梯度直方图HOG特征之前,对当前图像进行光照预处理。
进一步的,为了加快计算速度,使用HOG积分图计算分块的HOG特征。
本发明的有益效果是,利用HOG局部特征结合局部分类器,对表情、局部光照不均等情况具有较强鲁棒性。
附图说明
图1为积分图示意图;
图2为积分图计算示意图;
图3为对比人脸检测流程图;
图4为光照预处理前后图像。
具体实施方式
为了方便地描述本发明内容,首先介绍本实施例涉及的现有技术:
HOG:(方向梯度直方图,Histogram of Oriented Gradients)。HOG是一种特征提取算子,下面以20x20的窗口为例,介绍HOG特征的提取方法,其计算步骤如下:
1.窗口由横竖线分为大小想等的小方块(5x5),最小的那种方块叫做细胞cell。4个相邻的cell构成一个较大的正方形叫做块block。block与block之间可以重叠,也可以不重叠。
2.然后用梯度算子求各个像素的横向梯度H(x,y)和纵向梯度V(x,y);
3.然后求每个像素点(x,y)的梯度方向θ(x,y)和幅度m(x,y),计算公式为:
m(x,y)=[H(x,y)2+V(x,y)2]1/2;θ(x,y)=tan-1[V(x,y)/H(x,y)]
4.θ(x,y)取值范围为-90度到90度,我们把它平均分成9份。然后每个cell中按梯度方向投票,权重为m(x,y),这样每个cell就得到一个9维的向量,把同一个block中的4个cell得到的向量连起来就得到了一个block的36维特征向量。最后把所有向量连起来就得到了该窗口的HOG特征向量。
HOG积分图:对于图像内一个像素点点(x,y),我们用M(x,y)=[M(x,y)1,M(x,y)2,...,M(x,y)9]T表示该像素点在9个梯度方向的幅值。对于任意像素点(x,y),M(x,y)i,i=1,...,9这9个分量中只有1个非零。假设图像高m,宽为n。我们先计算图像各列HOG积分和s(x,y),把这m×n个值存入内存。
在计算完列积分图后,我们计算矩形HOG积分图。A(x,y)表示如图1所示阴影部分的HOG积分。
由上式可以计算出整张图像的HOG积分图。
整张图像的HOG积分图计算完毕后,存入内存中的列积分可以释放掉,同时把各种矩形积分存入内存。当求得个像素梯度方向和幅度后,只需要扫描图像两遍就可以得到整张图像的HOG积分图。
在得到矩形HOG积分后,可以通过简单的计算得到图像中任意细胞cell的HOG特征。
如要统计图2阴影区域D梯度直方图(HOG向量):
D区域的HOG向量=A4+A1-A2-A3
其中A1表示区域A的HOG矩形积分,A2表示区域A和区域B的HOG矩形积分,A3表示区域A和区域C的矩形积分,A4表示区域A、区域B、区域C和区域D的HOG矩形积分。
SVM(支持向量机,Support Vector Machine)。SVM是模式识别领域一直经典的分类方法。对于n维训练样本集{(xi,yi|i=1,2,...k),xi∈Rn,yi∈[-1,1]},其中Rn表示n维向量,xi是Rn空间中向量;yi对应xi的样本类别,以yi的正负分别表示正样本和负样本。对于二分类问题,支持向量机的基本思想如下。先把这k个特征向量放在Rn中,在Rn空间中找到一个n-1维超平面,使得全部正样本分布在这个超平面一侧,而全部负样本分布在超平面另一侧,这也就是使得经验风险最小。同时还要使得该超平面与两类样本的距离相等的情况下尽量的大,这就是使得置信区间最小。
训练人脸分类器:通常基于HOG特征目标检测中,用全局HOG特征结合SVM来训练分类器,这种方法的局限性在于:1)特征维数很高,检测速度较慢;2)由于把整个人脸各个部分公平对待,引入了很多干扰信息,不利于分类,因而识别率较低。
实施例
人脸检测方法,包含下列步骤,如图3所示:
步骤1.对图像进行光照预处理;
步骤2.计算图像HOG积分图;
步骤3.检测当前窗口:根据当前窗口位置,先提取该窗口中各个局部HOG特征,将局部HOG特征输入各局部分类器,将局部分类结果组合成特征向量,最后将特征向量输入最终分类器得到当前窗口的检测结果;
步骤4.如不是最后一个窗口,则移动窗口,返回步骤3,如果是最后窗口,则变换检测尺度并判断是否超过最大窗口尺度,如否返回步骤3,如是,检测结束。
图像预处理用于处理光线太暗的图像和光照太强的情况,具体包括以下步骤:
(1)图像灰度化。对于彩色图像,将其RGB分量分别乘以一个权重,然后相加得到灰度图像Y:
Y=0.3R+0.59G+0.11B
(2)灰度校正。为了克服强光照射,本实施例提出一种校正方法,低灰度像素范围用γ<1的Gamma校正,高灰度像素范围用γ>1的Gamma校正。实现了低灰度像素范围的向高灰度拉伸,高灰度范围像素向低灰度的拉伸:
其中I(x,y)为原图像像素灰度值,Y(x,y)为处理后图像像素灰度值。图像I为双精度图像,像素取值为0到1;预处理前后对比图如附图中图4所示,图像左边为预处理前,右边为预处理后。
局部分类器设计:
把20×20的训练图片分成大量的块,把块大小设置为k×k,其中k分别取8,10,12,14,16,块分成4个0.5k×0.5k大小的细胞,向右和向下的移动步长都设置为2。这样可以得到大量的块,每个块对于一个36维特征的SVM分类器,也就是有大量的局部分类器。
以下训练每个块位置对应分类器,训练步骤如下:
将各训练样本进行以不同尺寸进行多次分块处理,每个分块位置对应一个局部分类器;所述训练样本包括正样本、负样本;
提取训练样本各分块的局部HOG特征;
根据训练样本各分块位置对应的局部HOG特征用支持向量机SVM训练出局部分类器;
最终分类器设计:
上述步骤,已经得到大量局部分类器。如果单独用某个分类器来作人脸检测,效果当然不会好,因为只用了局部信息。但是它很可能有一定的分类能力,如有53%的概率能正确分类(正样本分类为正样本或者负样本分为非人脸的概率),它比随机分类概率(50%正确率)要好一点。我们就是利用大量的比随机分类器稍好一点的局部分类器,可以组合成一个具有很好分类能力的分类器。具体做法为:
使用训练样本对所有训练出的局部分类器进行测试,对应不同分块位置的局部分类器从训练样本提取对应分块的局部HOG特征,并将该局部HOG特征输入对应位置的局部分类器;根据各局部分类器输出的分类结果选出分类正确率大于53%的局部分类器作为优选局部分类器并记录其对应的分块位置;
将所有优选局部分类器输出的分类结果组成特征向量{(xi,yi)},其中,yi是第i个训练样本类别,yi=1表示正样本,yi=-1表示负样本,xi=[xi1,xi2,...,xiL]T,xi表示对第i个训练样本的局部分类结果,xik∈{1,-1},k=1,2,...,L,表示第k个优选局部分类器对第i个训练样本的局部分类结果,L表示局部分类器个数;
将特征向量{(xi,yi)}输入支持向量机SVM训练出最终分类器。