1 人脸检测的意义,国内外的情况综述
基于视频流的人脸分析是目前计算机模式识别和图形图像领域中的研究热点,其目的是在视频中自动检测、定位、跟踪和识别人脸。该技术能广泛应用于基于内容的图像检索、视频编码、生物认证、计算机安全、电子商务等领域。虽然已经有很多人脸检测和识别算法,但至今仍有大量的研究者在研究这项技术,这是因为人脸是一个动态的目标,在表达形式上有高度的可变性,导致该项技术仍然是机器视觉中的难点。
基于WebCam(Internet上的摄像头)的人脸检测和跟踪技术是将人脸分析技术与基于Internet的视频流相结合的一项技术,可以应用于在Internet上的身份认证和安全。目前已经有大量的生物认证技术(如指纹识别,虹膜识别,人脸识别)应用于身份认证,用于加强传统身份认证技术(如口令)。但是这些技术均只能用于本机操作,而不能用于Internet上身份的验证。例如,我系计算机教育与应用研究所开发出了基于B/S模式的考试系统,从理论上说可以实现在Internet上的考试。然而,由于不能解决在Internet上的身份认证,该系统目前只能适用于在局域网中进行在线测试。可以设想,如果有了基于WebCam的人脸检测和跟踪技术,我们就可以在此基础上实现考试过程中的身份认证和考试监控。
基于WebCam(Internet上的摄像头)的人脸检测和跟踪技术的核心是人脸分析。人脸分析的任务包括人脸检测,人脸识别和人脸跟踪。人脸检测是许多后期应用的预处理过程。有许多方法可以用于人脸检测,这些方法可以分成四大类:
(1)基于知识(Knowledge-based)的方法,是基于规则的方法,试图对人脸特征在直觉上建模。
(2)基于特征不变性(Feature invariant)的方法,是利用特征的不变性进行检测,如比例、方位、灰度级和肤色等)。
(3)模板匹配(Template matching)的方法,通过手工定义人脸的模板,或者是脸部特征,来与输入图像进行匹配。
(4)基于外貌(Appearance-based)的方法,通过机器学习的方法找到人脸中的相关特征。
方法 |
代表文章 |
基于知识 |
Multiresolution rule-based method |
不变特征 |
|
面部特征 |
Grouping of edges |
肌理(皮肤) |
Space Gray-Level Dependence matrix(SGLD) of face pattern |
肤色 |
Mixture of Gaussian |
多重特征 |
Integration of skin color,size and shape |
模板匹配 |
|
预先确定的人脸模板 |
Shape template |
可变的(人脸)模型 |
Active Shape Model(ASM) |
基于外观的(识别)方式 |
|
特征人脸 |
Eigenvector decomposition and clustering |
分布式 |
Gaussian distribution and multiplayer perceptron |
神经系统网络 |
Ensemble of neural nerworks and arbitration schemes |
支持矢量机技术 |
SVM with polynomial kernel |
简单贝叶斯分类 |
Joint statistics of local appearance and position |
隐马尔可夫模型 |
Higher order staticstics with HMM |
信息理论法 |
Kullback relative information |
表格一 概括了单一图像中这四类人脸检测的算法和具有代表性的文章
其中,人脸的肤色作为一种有效的特征已经在人脸识别和人手跟踪等许多应用中得到使用和证明。虽然不同的人有不同的肤色,但经研究表明:这主要是由于肤色的亮度和色度之间存在差异造成的。
许多基于肤色不变性的人脸识别方法都是构建一个肤色模型。最简单的肤色模型是定义一个肤色像素的色调阈限,用Cr,Cb标识值,例如R(Cr,Cb)是从肤色模型像素的实例中取值的。选用适合的阈限(Cr1,Cr2)和(Cb1,Cb2),如果一个像素(Cr,Cb)的值符合这个范围域内,即Cr1<=Cr<=Cr2且Cb1<=Cb<=Cb2,那么这个像素被认为是表示肤色的像素。
Crowley和Coutaz根据规格化RGB彩色空间中的直方图h(r,g)的(r,g)值,得到由特殊RGB向量给出的某像素的出现概率,如果h(r,g)>=τ,τ是从直方图的实例中根据经验选定的一个表示肤色像素出现概率的域值,那么这个像素被归类到相应的肤色中去。
Saxe和Foulds提出一种迭代的皮肤识别方法,这种方法使用HSV色彩空间〔138〕的直方图交集。肤色像素中的一个初始化的点,被称为控制点。这些点是由用户选择的,常被用于迭代算法的初始化。为了识别肤色的区域,他们的方法是通过一幅图像中某一时刻的点移动,把来自该图像的控制直方图和当前直方图的比较关系表现出来。直方图交集被用于比较控制直方图和当前直方图,如果匹配值或公共的实例数目(例如交集)比一个域值大,那么当前点被当做肤色来分类。
相对于前面所述的非参数方法,高斯密度函数和混合高斯是常被用于模拟肤色的参数方法。Kjeldsen和Kender定义一个在HSV色彩空间中用来从背景中区分出皮肤区域的色彩术语。常常使用可能性大的值来估算单峰高斯分布中的参数,且宁可使用一种混合高斯而不使用一种多模型分布,因为有报告表明不同种族背景的有色人种不能构造一种多模型的分布的色彩直方图。
Jones和Rehg在从规格化RGB色彩空间中搜集来的、近十亿个被标识的皮肤色调像素中进行一项大级别的实验。比较直方图的性能和混合模型对皮肤的识别,他们发现直方图模型在正确度和计算代价上更有优势。如果肤色模型能够完全适应于不同光照条件的需要,那么肤色信息是用于识别脸部区域和特殊脸部特征的有效工具。然而,这样的肤色模型在光源变化显著的光谱中就无效了。换句话说,由于背景和前景光照的变化,肤色表现出来的状态经常是不稳定的。虽然通过使用物理学模型能明确地表达色彩稳定不变的性质,但是在光照条件变化的情况下使用肤色识别还是存在有些问题的。
McKenn提出一个适应性色彩混合模型,用来在光照条件变化的情况下跟踪人脸。相对于依赖一个基于稳定不变性质的肤色模型,他们使用随机模型来估算一个对象的在线肤色分布,且这个模型能适应观察和光照条件的调和变化。初步结论显示他们的系统能够在一个大范围的光照条件下跟踪人脸,但是这种方法不能应用在单一人脸图像的人脸识别。
本次毕业设计的初衷是实现基于WebCam(Internet上的摄像头)的人脸检测和跟踪技术,而这项技术又可以分为如下几部分:
(1)利用WebCam获取视频流;
(2)人脸的检测(包括从背景中确定人脸的存在,以及验证检测到人脸是否是参加在线考试的人员);
(3)人脸的跟踪(在在线考试的过程中实时监控考试对象)。
因为时间有限,在此次毕业设计中,本文要研究的内容和目标是“利用WebCam获取视频流”和“在获取的视频流中,进行单帧人脸定位”。图一给出了本次毕业设计的总体实现流程:
|
2 单帧图像的人脸定位
我们之所以能通过眼睛和大脑把单帧图像中的人脸从背景区域中区分出来,很重要的一点原因就是人脸和背景之间存在着可以区分的色彩差异,这种差异同样可以成为程序区分人脸和背景的依据。因此,本文采用人脸中最大块,最集中的不变特征――肤色作为从背景中区分人脸的依据。
2.1彩色空间,以及彩色空间的转换
本文是通过WebCam和AVICap提供的视频采集函数来采集单帧图像的,它是以32位真彩色的色彩实现方式存放的。图像中每个像素都是由3个字节24个二进制位来表示的,每个字节(8位)代表一个不同的颜色分量。这三个分量依次是蓝色分量B、绿色分量G、红色分量R,而这三个字节存储的实际内容就是这三个分量的值。根据存储单位的大小,我们不难得出这三个分量的取值范围都是在(0,255)之间,其中三个分量的值全取0表示黑色,全取255表示白色,而其他颜色也可以通过对B、G、R三个分量取不同的数值来得到。这种被大多数图像格式所采用的彩色空间,称之为RGB彩色空间。在RGB彩色空间中,颜色的表达是由红、绿、蓝三种颜色按不同比例混合而成,这样的表达方式并不能准确地反映出颜色本身的特征。因为,人眼看到的任何一种彩色光都是彩色三要素:亮度(Brightness)、色调(Hue)、饱和度(Saturation)综合而成的效果。其中,亮度是光作用于人眼时所引起的明亮程度的感觉,它与被观察事务的发光强度有关;色度反映颜色的种类,是当人眼看到一种或多种波长的光时所生产的彩色感觉,它与光的波长有关,是决定颜色的基本特征;饱和度是指颜色的深浅程度,即各种颜色混入白光的程度。由此可见,这三个要素才是对颜色本身最准确地诠释。而且,据研究表明,人的视觉对亮度细节的敏感程度远大于对色度细节的敏感程度,此外,经过统计证明,不同人种,不同环境下的肤色区别主要受亮度影响,受色度影响较小,可见,RGB彩色空间并不适合人类的视觉特征。因此,我们完全可以选择更能突出颜色特征的彩色空间来分析人脸肤色和背景色,并为人脸肤色建模。
本文选择YCrCb彩色空间(即YUV),其中的Y分量是表示像素的亮度, Cr和Cb称为色度,其中Cr(U)分量表示红色色差分量,Cb(V)表示蓝色色差分量,这两个色差信号分别传送红基色分量R和蓝基色分量B与亮度分量Y的差值信号,即和,其中、为加权系数。对于黑白图像有:R=G=B,则Cb=0,Cr=0。而对于彩色图像,决定了图像的色调,代表图像的饱和度。在多媒体计算机中采用的YCrCb彩色空间,数字化后Y:Cb:Cr为8:4:4或8:2:2。具体的实现方法是处理亮度分量时,每个像素数字化为8bit(256级亮度),而Cb、Cr色差分量则是每四个像素用一个8bit数据表示,这样以来,将一个像素用24bit表示压缩为用12bit表示,对这种变化人眼是感觉不到的。但是,在本文中,从RGB彩色空间转换到YCrCb彩色空间,每个像素的存放位数未做压缩,经过如下公式:
(1)
(2)
(3)
转换的单帧图像,仍以24bit表示一个像素值,其中第1个字节(前8位)表示Y分量,第2个字节(中间8位)表示Cr分量,第3个字节(后8位)表示Cb分量。在程序代码中,用RGB彩色空间表示的单帧图像是存放在以DIBINFO类型定义的变量m_dibinfo的buffer数据成员中,而经过彩色空间转换后的单帧图像是存放在m_ycc_buffer缓冲区中(有关DIBINFO类型、变量m_dibinfo和m_ycc_buffer的说明详见本文的第三部分)。这样一来,当我们需要将人脸定位后的单帧图像以DIB位图方式绘制出来时,就无需再将彩色空间转换回RGB彩色空间,而只需要根据计算得到人脸定位信息,在原来的、以RGB彩色空间表示的单帧图像中勾勒人脸的位置。
本文选择YCrCb彩色空间,主要原因是从RGB彩色空间到YCrCb彩色空间的转换相当于对RGB空间做了一个解相关的线性变化,其计算过程相对于RGB彩色空间到YIQ彩色空间和HIS彩色空间的转换过程要简便得多,而尽可能少而简单的计算可以减少转换过程的失真率。此外,转换彩色空间而不做压缩操作的原因是毕业设计中采集的单帧图像的数据容量(144×176)较小,所需要的内存空间足够,而且对不做压缩的图像像素地访问也更为便捷。
2.2人脸肤色模型,二值化
将单帧图像转换到YCrCb空间后,要检测该单帧图像中某一像素是否属于人脸像素,可以通过“阈值处理”的方法对该像素的灰度值进行判断,然后把符合“阈值处理”公式的像素标识出来,从而实现图像的二值化。其中,阈值处理就是指,对于输入图像的各像素灰度值属于某定值(称为阈值,threshold)范围内时,赋予对应输出图像的像素为白色或黑色。
要通过“阈值处理”的方法实现对单帧人脸图像的二值化,必须先解决的问题是确定适合的人脸肤色模型。虽然人脸的肤色看起来是变化的,但是人脸肤色的变化多数情况是因为肤色亮度值的差异造成的。因此,在确定人脸肤色模型时,我们可以把这种由肤色亮度值造成的差异忽略掉,即只采用肤色的色度值来确定人脸的肤色模型。根据《Detection and Tracking of Faces in Real-Time Environments》一文中的介绍,忽略肤色亮度值将不会影响对人脸肤色的成功检测,反而可以减少对大容量的三维YCrCb彩色空间的处理,转而对易处理的二维CrCb图进行研究,同时还有助于减少对单帧图像的计算处理。
在试图寻找适合的人脸肤色模型的过程中,笔者首先尝试了《Detection and Tracking of Faces in Real-Time Environments》一文中介绍的人脸肤色模型。现介绍如下:
|
前面的叙述中笔者也已经提到过了,在《Detection and Tracking of Faces in Real-Time Environments》一文中的人脸肤色模型是忽略人脸肤色的亮度值的,因此文中所进行的试验都是在二维的UV(CrCb)图中展开的。为了确定在UV(CrCb)图中的脸部肤色精确度,使用重复实验法来找出压缩方法,来压缩所有人脸都共有的色度的根本性质,无论肤色的变换度如何。这些实验的结果把最佳匹配(best-fit)区域分为3个单独的脸部肤色类,分别是浅肤色、中等肤色和深肤色。每一个类用一种特殊的人种群来表示。用浅肤色类来判断白种人,用中等肤色类来判断黄种人,用深肤色类来判断印第安人。
|
|
|
|
以上三幅CrCb图所呈现的区域就是针对三种肤色类得到的最佳匹配(best-fit)区域,由此可以观察到,这三类肤色在CrCb图中共享一个公共的连续区域,该区域形成的最后二维脸部肤色模型见图五所示。
|
该图中所描绘的区域可以分别用下列不等式组
不等式组一:0.2611tan-10.3111 且 4378 (4)
不等式组二:0.25tan-10.3611 且070 (5)
的算术集合来表示。如果一个像素在这幅CrCb图中的对应位置满足两个不等式集合中的任意一个,那么就把这个像素识别为脸部肤色。
|
笔者把该人脸肤色模型用程序代码实现,并进行二值化处理,结果未能得到如文章中所述的理想的识别效果。在单步调试人脸肤色模型的过程中,笔者发现人脸肤色像素的色度要素的两个分量Cr、Cb的灰度值比较接近,所以仅以人脸肤色像素的色度值为判断依据,建立如下人脸肤色模型:
(6)
结果,人脸肤色像素的色度值确实在此公式给出的范围之内。但是,在随后多次的试验中,出现了这样的问题:若在肤色识别函数中仅用这个公式建模,那么如图六中所示的蓝色区域,也会被当做肤色像素而二值化为白色。可见,仅用色度值来区别人脸肤色像素和非肤色像素还不够准确。再次考虑色度值对人脸肤色的影响,本文尝试对红色分量Cr进行域值处理。Cr的取值,是通过计算YCrCb彩色空间下、单帧图像像素的Cr直方图得到的。经反复试验后,将肤色建模公式更改如下:
且 (7)
问题也就此解决。