人脸检测---基于肤色检测的实现

来源:互联网 发布:淘宝新开店铺如何推广 编辑:程序博客网 时间:2024/04/29 00:19

在2015年本科毕业的时候,当时因为保送研究生的时候,选择了图像处理的研究方向,因此本科的毕业设计就选择了人脸检测的课题。人脸检测是一个研究得比较深入得一门方向了,对于人脸识别的重要性不言而喻,人脸都检测不到,又何谈人脸识别呢?人脸检测的主要任务就是从给定图像中检测出人脸,同时标记出人脸的位置、数量和大小。人脸检测的研究方向可以大致地分为两个方面的研究。一是从静止的图像中进行扫描和检测,从而得到人脸检测的结果;二是从视频图像中判断是否存在人脸,这方面的研究难度远远高于从静止图像的检测人脸,它对硬件的反应速度以及精确度很高,同时对于算法的精确性以及检测速度要求更高,因此近几年的研究主要集中在视频图像序列的人脸检测。在完成这个毕业课题的时候,笔主首先选择了比较容易接入的方向,通过肤色实现人脸检测。这个方向算得上是权威和鼻祖的就是A. K. Jain了,他的论文:Face Detection in Colour Images在基于肤色检测的研究中基本上都是首先进行参考和研究的!虽然提出的检测模型到以后的检测率已经算不上高了,但是在其基础上提出的改进算法确实数不胜数,也出现了很多高质量的文章。


人脸检测算法的大致分类

肤色是人脸的基本特征,作为人脸检测的切入点是最简单直观的。在彩色图像中,肤色一般都是相对比较集中和稳定的区域,同时研究表明,不同的种族、年龄和性别的人在肤色上的主要区别主要亮度上,出去亮度这一个因素,肤色在一定的肤色空间内具有一定的聚类性,通过实现对肤色的检测和分割,从而进一步检测到人脸区域,这是基于肤色特征的人脸检测算法的核心思想。


基于肤色检测的人脸检测实现总流程图
由于影响肤色检测最大的因素就是光照,为了消除这个影响,在进行肤色检测之前,有必要对肤色进行一定程度的关照补偿,由此提高检测率。光照补偿的算法应用比较多的参考白的算法。参考白的核心思想就是:

进行参考白算法的出发点有两点:

①白色像素存在很多的图片中,在人脸图像中尤其明显,在眼球外围等处通常就是纯白色。因此可以将亮度最大的色彩的像素值调整为255。

②需要进行光线补偿的存在的图像在原来是白色的区域中有着最直接的体现,因此将光线补偿扩充到整张图像区域并不会影响到图片的特征信息,对肤色检测不会有本质的影响。

进行光照补偿完之后就需要对肤色进行建模了。建模的目的就是为了让肤色能够与照片中的其他像素点区分开来。建模的方向一是投射到何种色彩空间,在某些色彩空间下,肤色具有一定的聚类型,一般常见的的色彩空间有RGB、YCrCb以及HSI色彩空间。其中性能表现最好的就是YCrCb色彩空间,其性能表现主要是从肤色的聚类型,从RGB格式转换到目标色彩空间的运算复杂度以及该色彩空间运用的广泛度。而建模的方向二是以和何种数学形式表征肤色。对于通信人来说,对于高斯分布我们都有一种特殊的情节,基本上所以的基础研究都是从高斯白噪声开始的。无独有偶,在图像处理中,我们自然而然的联想到用高斯分布表征肤色的数学形式。肤色的高斯模型可以这么去认识,用一种似然概率表征与肤色的相似程度。

高斯模型在YCbCr色彩空间中的构建主要共分为三步:

①收集大量人脸图片样本,收集的样本应多样化,包含不同性别,年龄以及种类,并剪切出人脸肤色区域做统计样本;

②在将色彩空间转换到YCbCr色彩空间,统计所有像素的Cb、Cr的数量;

③计算出均值,,同时计算出方差,以及协方差和。                                                       

最后得到的高斯似然图实验结果:



基本上所有的图像处理最后都要归结到二值化的过程。因为二值化能够简单明了的规划处那些事我们感兴趣的部分,那些不是我们感兴趣的部分,对于计算机的处理更加方便快加。Ostu是一种二值化算法,它计算阈值的方法是根据整个图像的类间差来实现的。当类间差最大的时候,也就是二值化最明显的时候,这个时候二值化的效果就是最好的了。相比于固定阈值法来说,Ostu这种自适应的算法更加的科学,二值化的效果更好。

       
那种是Ostu算法就不用我说了吧,免得伤了曾经为了简单方便,自己设定一个二值化阈值的我和你。
最后,也就是最关键的部分,就是肤色分割了。当然,其实到了二值化这个步骤,我们基本上已经完成了肤色分割的步骤,但是,细心的读者其实可以观察到,在我们的肤色分割中,其实还存在一些我们并不需要处理的白点,也就是肤色点,这些点都是背景中存在于肤色相近的像素点引起的,在通信中我们通常称其为噪声。形态学处理就是为了对这部分的像素点进行处理。当然也是为了将面部的一些断续点连接起来,便于我们判断和处理。通常来说,形态学的基本处理方法有腐蚀和膨化。腐蚀过程是消除物体边界的过程。膨胀过程是将与该物体邻接的其他点融合到该物体的过程。
膨胀使得物体嫩巩固包含更多的像素点,使得物体能够占据更多的图片区域。将腐蚀和膨化的不同组合可以达到不一样的效果,也就是开运算和闭运算。对于图像中的小面积的断点,可以通过使用开运算可达到消除此类点的效果。可以使得原本参差不齐、有较多齿状的物体表面变得更加光滑,同时可以尽可能地保持着物体原本的形状。此外,由于经过黑白化的图像会存在很多的空洞、断点,使得图像变得支离破碎,信息不完整,而闭运算可以有效地解决这类问题,可它能够使得图像变得更加地圆满、方便进一步的图像处理。
最后来到了我们最为激动人心的一刻,对于检测出来的肤色进行判断和筛选,从而达到人脸检测的目的,初步的人脸检测分析就是通过形态学处理后得到的一系列连通域进行一系列的判断。当然这和A.K. Jain的处理方法不一样,他是通过椭圆判断法进行人脸判断的,在这里我们仅仅只是为了看看简单的人脸检测分析结果。在这里,我们对人脸区域的判定条件是:

①高度和宽度必须都大于20,且矩形面积大于400;

②高度和宽度比率应该在范围(0.6,2)内;

此外还有欧拉数的判定,达到人脸区域筛选的目的,笔者在论文设计中也引用了这个方法,由于篇幅有限,不再继续赘述。

最后得到的人脸检测效果图:

                                                                                                 

这只是初步的人脸检测的结果,也就是初步的人脸检测的候选区域,这种初步的人脸检测效果并不是很好,存在很多漏检和误检的情况,为了改善这一个情况,笔者将会在下一讲中对于模板匹配的算法进行介绍。






0 0
原创粉丝点击