时间:2024-07-28
周恒
(天津工业大学,天津300160)
人脸检测是个非常先进的话题,它是人脸研究的一个主要方向。人脸研究主要包括人脸识别和人脸检测两大方向的研究。然而最初的人脸研究工作主要集中在人脸识别方面上。人们在这个方向上的研究也持续了很长一段时间,那时研究人员的重心几乎都放在了两张人脸的对比上,也就是说这项工作的主要任务是探讨如何在一个人脸库中快速准确地检索到需要的人脸。由于早期的相关算法都是在假设已经得到正面人脸或者人脸很容易获得的前提下进行的,因而相关研究成果的实际意义随着人脸应用范围的不断扩大和开发实际系统需求的不断提高而变得很弱。这种假设条件下进行的研究很难满足实际的需求。于是人脸检测开始作为独立的研究内容发展起来。
人脸检测就是对于任意一幅给定的图像,采用一定的策略对其进行搜索以确定其中是否含有人脸,如果是则返回人脸的位置、大小和姿态。人脸检测作为物体检测的一个特例,长期以来备受关注。人脸检测的难点主要集中在两方面:1)由人脸内在变化所引起的,如外貌,表情,头部饰物等,称其为内因;2)由外在条件变化所引起的,如成像角度、光照影响等,称其为外因。人的外貌和表情等内因的微妙变化会导致识别效果的不理想,并且人脸的遮挡物等物品会造成人脸图像的不完整,这也是影响检测结果的重要因素。至于外因,情况更加复杂,光照的影响在很大程度上会改变肤色的灰度范围,增加了识别难度。其次由于成像角度的不同有可能会造成人脸的多姿态。而且图像的成像条件,如设备的焦距、成像距离等都是不可预料的。
近年来出现了大量人脸检测的方法,简单地分为两类:基于特征的方法和基于图像的方法。前者指以某种特征为最小处理单元,后者指以图像中的像素为处理单元。但他们都有一些不足。目前认为,Pail Viola和Michael Jones在《Rapid object detection using a Boosted cascade of simple features》一文中提出的快速对象识别算法将人脸检测推向了一个新的高度,他将Adaboost和Cascade算法综合运用到实时人脸检测系统中,从根本上解决了检测速度的问题,且具有较好的识别效果。经典Adaboost算法是基于Haar特征的,也是目前正确率最高的算法之一。
系统构成分为训练和检测两大部分,如图1所示。
(1)训练部分:使用Adaboost算法对预先收集的正样本(图像中含有人脸)和负样本(图像中不含人脸)进行处理;从这两类样本集中提取特征进行计算,生成一个级联分类器。级联分类器是由若干个强分类器组成的。
(2)检测部分:使用训练过程中得出的级联分类器,按某个策略对待检测图像进行分析;并对检测结果进行后处理,最后得出图像中人脸的位置、大小等参数。
Paul viola和Michael Jones首先提出了“积分图”的概念。这使得检测器中的特征的计算非常快。
如图2所示,像素(x,y)点的积分图像定义为该点左上方矩形图像区域内像素点的和,即
这里ii(x,y)指的是积分图像,i(x,y)是原图像。使用如下的迭代公式,再遍历一遍原图像后可以得到每个像素的积分图像。
这里s(x,y)是像素的行累加和,并且为了计算方便,定义s(x,-1)=0,ii(-1,y)=0。
利用积分图像就可以快速地计算上图的矩形特征,如图3所示矩形D内的像素可以由四个参考矩阵计算得到。位置1的积分图像是矩阵A的像素和,位置2的是A+B,位置3的是A+C,位置4的是A+B+C+D。所以D的像素和可以由4+1-(2+3)得到。所以二矩阵特征可以通过6个参考矩阵求得,三矩阵特征可以通过8个参考矩阵求得,四矩阵特征可以通过9个参考矩阵求得。
在人脸检测过程中,需要对候选图像进行分析,判断是否为人脸,多数人脸检测系统都是使用特征对人脸模式进行建模,这些特征都应有一定的人脸和非人脸的区分性。Adaboost用于人脸检测时,需要从人脸中抽取大量的简单特征。在训练分类器时,利用图像的特征空间而不是直接的像素灰度分布往往会取得更好的分类效果。因为特征空间会在一个更高维的空间内更好地描述图像的本质,而这是显示的图像本身很难具备的。如图4就是Paul Viola和Michael Jones提出的4个Haar-like特征。其中a,b表示的是两个矩形框的Haar-like特征,c表示的是3个矩形框的Haar-like特征,d表示的是4个矩形框的Haar-like特征。每一类矩形的特征值就是用图中所示的灰色矩形内的像素值之和减去白色矩形内的像素值之和得到的。
如果图像是由两个矩形构成的特征,如图4中的A,可使用4个矩形的积分图计算黑色框中矩形的像素之和,则可得运算式E+A-B+C,而计算白色框中矩形的像素值,则可得运算式F+C-D-E,因此仅需A,B,C,D,E,F 6个参考矩形就可计算出期望的特征值,最终特征值的计算表达式为(F+C-D-E)-(E+A-B-C).
而一幅图像又有多少矩形特征呢?如果矩形特征原型的宽为w,高为h,图像的宽为W,高为H,定义:
X=[W/w],Y=[H/h]
并且规定矩形特征在不同尺度下保持一定的宽高比,那么可以用如下的公式计算除矩形特征的个数:
同理也可以计算出其它矩形特征原型所派生出来的特征值,把他们加在一起,就是整幅图像所含有的特征值。
Adaboost算法是一种分类器算法。具体来说,Adaboost学习算法的核心思想是从一个很大的特征集中选择很小的一部分关键的视觉特征,从而产生一个极其有效的分类器。它利用大量的分类能力使一般的简单分类器通过一定的方法叠加起来,构成一个分类能力很强的强分类器,再将若干个强分类器串联成为分级分类器完成图像搜索检测。串联的级数依赖于系统队错误率和识别速度的要求。这种用“分级”来不断组合成更复杂的分类器的方法可以使图像的背景区域能够很快地被排除而将更多的计算花费在更有希望成为目标的区域。对于每一种特征而言,弱学习器决定弱分类器的最佳的门限值,使其具有最小的误分样本数。全部的检测过程的形式就是这样的一个退化的决策树。
其中弱分类器hi(x)由一个特征fi,一个阈值θi,和一个控制不等式方向的pi组成,如下所示:
算法的具体描述如下:
给定样本图像集(xi,yi)1,…(xn,yn)n,其中yi=0,1分别对应负样本和正样本。
初始化权重,yi=0时ωi,t=1/(2m),yi=1时ωi,t=1/(2l),其中m,l分别为负样本与正样本的数量。
对于每个t=1,…,T
(1)权重归一化
(2)对于每个特征j,生成对应的弱分类器hi,计算相对于当前权重的ωt的错误率:
(3)选择ht,使得εt最小。
(4)更新权重,wt+1,j=wt,1βt1-ei
式中如果第i个样本被正确分类,则ei=0,反之ei=1,
(5)最后得到的强分类器为:
级联分类器是由多个强分类器组合而成,它的每一层都是由Adaboost算法训练得到的强分类器,从第一层分类器出来的正确结果触发第二层分类器,而从第二层出来的正确结果将触发第三层分类器,以此类推。相反,从任何一个结点输出的被否定了的结果都会导致对这个子窗口的检测立即停止。通过设置每层的阈值,使得绝大多数人脸都能通过,而绝大部分的非人脸不能通过,这样靠近级联分类器后端的层拒绝了大部分的非人脸,其整个过程如图5所示。
进一步的处理可以使用诸如增加其它分级分类器的级数或者用其它的检测系统代替等方法。层叠分类器的特殊结构源自人脸检测时遇到的实际问题,其目的是尽可能使在前面的层拒绝可能多的人脸。
人脸检测是目前非常前沿的技术,Adaboost算法实现起来比较复杂,但应用OPENCV提供的函数和分类器进行人脸检测是十分容易的。经过编程和调试后能很好地检测出人脸。实践证明Adaboost算法最大的特点就是识别效果好,实时性好,具有极强的实用性。
如图6所示,通过Adaboost算法进行人脸检测得到人脸检测效果图可以进行身份识别等。
文章详细介绍了Adaboost算法及人脸检测的检测方法及基本原理,用积分图求像素值的方法对其进行了说明与扩展。分析了Haar-like特征和它构造的分类器的算法。该方法从根本上解决了检测速度的问题,具有良好的应用前景。
[1]赵楠.基于Adaboost算法的人脸检测[D].北京,北京大学物理学院物理学系,2005.
[2]阮秋琦.数字图像处理学[M].北京:电子工业出版社,2001.
[3]田捷,沙飞,张新生.实用图像分析与处理技术[M].北京:电子工业出版社,1995.
[4]刘文耀等.光电图像处理[M].北京:电子工业出版社,2002.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!