基于肤色的人脸检测系统的设计及实现

2019-03-12 06:59吕凯凯韦德泉
枣庄学院学报 2019年2期
关键词:二值肤色人脸

吕凯凯,韦德泉

(枣庄学院光电工程学院,山东枣庄 277160)

0 引言

人脸检测[1]即判断待检测视频或图像中是否存在人脸,存在几个人脸,标记出人脸的位置并提取候选人脸图像,是人脸识别工程的第一步,其结果对之后的人脸特征提取和人脸识别分类有决定性的影响.

肤色特征是人脸重要的特征之一.不同国家、不同种族的人脸肤色看上去差别很大,比如非洲人肤色偏黑,欧洲人肤色偏白,而亚洲人偏黄,但是这种差异仅仅是在人眼看上去的差异,即亮度上的差异,在去除了亮度信息后的色度空间中,这些肤色不同的人脸肤色分布是具有聚类性的[2].另外,跟其它人脸特征比,人脸的表情对肤色没有影响,所以基于肤色作为人脸特征的检测方法受到了很多的关注,并且取得了不错的检测效果[3~5].本文用C++语言设计并实现了一个基于肤色的人脸检测系统.

1 颜色空间与肤色检测

在人眼的眼中,所有的颜色都是红(R),绿(G),蓝(B)三个基色的不同组合,所以RGB色彩空间在生活中最为常见.当然,除了RGB色彩空间,还有其它的色彩空间,但RGB色彩空间是其它色彩空间的基础,几乎所有的图像设备都使用RGB色彩空间来表示图像.在RGB色彩空间中,图像的色度信息和亮度信息是没有分开的,所以基于肤色的人脸检测方法中,RGB色彩空间是无法利用的.因此,我们必须要找到一种能把颜色表达中的色度信息与亮度信息分开的色彩空间.可以将色度信息与亮度信息分开的色彩空间主要有YUV彩色空间、YIQ彩色空间、YCbCr彩色空间、HSB彩色空间等,它们分别用于不同的用途.通过比较几种色彩空间,本文决定使用HSB色彩空间来进行基于肤色的人脸检测.

HSB颜色空间中,H代表色调(Hues),S代表色饱和度(Saturation),B代表亮度(brightness),其中,H的值在0-360之间变化,S的值在0-1之间变化,B的值在0-1之间变化.HSB色彩空间可以用一个六角模型表示,如图1所示.

图1 HSB六面体彩色模型

色调H代表颜色,是由与色饱和度S之间的旋转角度a确定,a的不同取值代表不同颜色,比如a=60时,代表红色,a=120时,代表黄色等等.色饱和度S代表某种颜色的的纯度,取S=0时代表灰色图像,当S=1时表示此时颜色是最纯的彩色.亮度B代表某种颜色的亮度,当B=0时,表示亮度为零,此时对应黑色,当B=1时,此时颜色最鲜亮.为了本文检测需要,应该把RGB色彩空间转换成HSB色彩空间,转换由如下公式进行:假设Max=max(R,G,B);Min=min(R,G,B);即Max和Min分别代表R、G、B三者中的最大值和最小值,定义Delta=Max-Min.那么色调、色饱和度和亮度H、S、B的计算方法如下:

H=0 当Delta=0时;

H=60(G-B)/Delta当Max=R且G>=B时;

H=60(G-B)/Delt+360 当Max=R且G

H=60(B-R)/Delt+120 当Max=G时;

H=60(R-G)/Delt+240 当Max=B时;

S=0 当Max=0时;

S=Delta/Max其它情况时;

B=Max;

图2~5显示了同一幅RGB图像,分别转换成不同彩色空间时的图像,可以看出相比其它颜色空间,HSB颜色空间中肤色与背景分离较好.

图2 YUV颜色空间 图3 YIQ彩色空间

图4 YCbCr颜色空间 图5 HSB颜色空间

2 二值图像与图像滤波

根据实验,在HSB颜色空间中,我们定义人脸肤色阈值R>=90&&G>=30&&B<30,在进行肤色确认时,程序针对一张待检测的图像,逐个扫描每个像素点,读取相应像素点的三个分量的颜色值,看是否满足上述我们定义的肤色区域值,如果满足,那我们将该像素点的二值化图像置为255,即是白色,如果不满足,那我们将该像素点的二值化图像置为0,即是黑色,由此得到的二值化图像中,白色的区域就是可能的候选人脸区域.图6是按上述方法得到的二值图像.

在不破坏图像的前提下,图像滤波可以对图像中的噪音进行过滤去除,这项技术也对后续的检测结果有很大的影响.常见的图像滤波技术包括简单平均值滤波、加权平均滤波、最大值滤波、最小值滤波和中值滤波等多种滤波.图7是本文比较了几种滤波方法之后采用3*3掩模中值滤波后的二值图像.

图6 二值图像 图7 中值滤波后二值图像

3 求连通域并按规则确定人脸区域

本文中,我们假设原始图像的长和宽分别为X和Y.复杂背景下的原始图像经过如上步骤处理以后,我们得到了一幅与原始图像同等大小的一幅二值化图像,图像中存在着可能的人脸区域.接下来我们需要对此二值化图像进行的操作是提取出图像中含有的所有的连通域.每个连通域包含在一个矩形框内,矩形框的左下角坐标为(x0,y0),矩形框的右上角坐标为(x1,y1),如图8所示,此矩形区域就是我们的目标人脸区域之一.

图8 二值化图像连通域示意图

那么我们将得到的目标矩形区域的长和宽分别定义为h和w,那么长h=y1-y0+1,宽w=x1-x0+1.本文基于肤色的人脸检测算法筛选人脸的规则定义如下:人脸区域的长宽比例应该符合一个约束范围,利用该约束范围可快速排除那些太过狭长或太过宽扁的非人脸区域.根据实验,本文我们取w/h>=0.55且w/h<=0.85;另外目标人脸区域的人脸像素面积与目标矩形区域的面积之比faceratio应该大于某一个阈值并且这个阈值不能过大,否则为非人脸区域,将其排除掉.大于某个阈值可以排除一些不规则但和肤色比较接近的物体,也可以排除一些人体的其他非人脸区域,如弯曲的四肢等;限制faceratio不能过大,可以排除一些大块的与肤色很相近的非人脸区域.本文我们取faceratio>=0.55且faceratio<=0.9,介于此区间的目标区域我们认为是人脸区域.基于以上判定规则的本文系统检测结果如图9所示.图10是本文系统提取出来的检测结果的原始图像和二值图像.

图9 本文系统检测结果 图10 本文系统提取的结果

4 总结

本文用C++语言设计并实现了一个基于肤色的人脸检测系统, 肤色不会受人脸的表情和姿态的影响,取得了比较满意的检测效果.本文确定肤色阈值和人脸区域规则是通过实验数据得出,针对复杂多变的环境,这些参数并不能够自适应的动态调整,这是后续考虑改进的地方.

猜你喜欢
二值肤色人脸
有特点的人脸
一起学画人脸
肤色(外一首)
Conversation in a house
人的肤色为什么不同
为什么人有不同的肤色?
三国漫——人脸解锁
面向网络边缘应用的新一代神经网络
基于二值图像数字水印算法研究
基于稀疏表示的二值图像超分辨率重建算法