利用Matlab实现人脸检测与人脸马赛克
2019-08-26汪嘉明赵发友
汪嘉明,赵发友
(上海大学理学院,上海200444)
人脸检测相关研究始于20世纪60年代末期,主要是利用人脸的几何特征进行检测,这类方法简单易行,但是很容易丢失人脸的有用信息[1]。人脸检测的方法主要包括基于特征的方法[2]、基于知识的方法[3]、基于模板匹配的方法、基于统计学习的方法[4]。基于特征的方法是提取人脸面部肤色、纹理等不变特征来对输入图像进行人脸检测;基于知识的方法利用先验知识根据眼睛、鼻子、嘴巴等器官的特征和空间位置来检测人脸;基于模板匹配的方法关键是建立标准的模板,用模板来刻画人脸的面部特征,计算图像中子窗口和标准人脸模板之间的相似性,根据相似性判别输入图像中是否存在人脸;基于统计的方法则将人脸看作一个整体的模式,从统计的观点通过大量人脸图像样本构造人脸模式空间,根据相似度来判断人脸是否存在。
在图像马赛克研究领域,研究人员提出过许多生成不规则分块图像马赛克的方法,突破了长方形图像分块单元的局限。Hausner采用质心Voronoi图以及从用户指定轮廓计算得出的距离场方法生成马赛克图像分块,并用均一颜色对每个分块进行填充,从而模拟古典装饰马赛克效果[5]。随后Dobashi等扩展了Haeberli的想法,将图像特征边缘信息加入Voronoi图生成过程中,从而大大提高了生成图像马赛克结果的质量[6]。最近Orchard和Kaplan提出一种“cut.out”图像马赛克,他们提取原图像中各个不同部分组成图像数据库,然后采用数据库中的图像表现源图像[7]。Liu等针对马赛克生成问题,设计一个全局能量优化框架用于生成图像马赛克[8]。现在高清摄像头获取的静态图像或者视频中可以清楚看到人脸部信息,为保护个人隐私,在公开相关信息时需要进行马赛克处理隐藏人脸部分。人脸检测是实现人脸马赛克的第一环节,因此,研究实现高效的人脸检测算法和人脸马赛克处理方法是十分重要的。
1 本文方法
人脸马赛克需要先进行人脸检测,人脸检测效果直接影响人脸马赛克处理。本文人脸马赛克方法主要分为3个模块:图像预处理、人脸检测、人脸马赛克处理。
1.1 图像预处理
在图像与视频采集、传输、存储过程中,由于外部环境等因素的影响,不可避免地存在噪声问题,这会严重影响后续的人脸检测效果。预处理的目的就是去除图像中的噪声,强化图像中的有用信息,提高图像的质量,使人脸检测更精确。图像预处理技术现在发展得比较成熟[9],主要步骤如图1所示。
图1 预处理流程
鉴于图像像素在空间上的高度相关性,本文采用高斯滤波方法去除图像中的噪声。高斯滤波的优点在于其线性特征,它能有效地过滤噪声、平滑图像。高斯滤波的原理与均值滤波类似,输出滤波器窗口内像素的均值。但均值滤波的模板系数都是1,而高斯模板系数随着距中心距离的增大而减小。这样相比于均值滤波,图像经高斯滤波处理后,图像更加清晰,并使得图像细节部分能够得到有效保护。图像缩放使用双线性插值法,保证像素点大小在未经改变的基础上,对原图像进行处理,并采用直方图均衡化的方法对图像进行非线性拉伸,使得峰顶对比度增强,谷底对比度减弱。在所要求的灰度范围内,对原始图像灰度进行映射与变换,降低光源的影响,提高人脸检测效率。
1.2 人脸检测
研究基于肤色的人脸检测技术需要选取肤色颜色空间和建立肤色模型。由于目前硬件设备采集的彩色图象都是在RGB色彩空间,但RGB彩色空间不适合肤色上的差异,因此需要将RGB色彩空间转化为YCbCr色彩空间。YCbCr色彩空间是亮度和色度分离的一种色彩空间,适用于肤色在色度上的差异远小于亮度上差异的特点,有利于将肤色区域的亮、色分离。RGB色彩空间可以根据它们之间的关系式直接转换为YCbCr色彩空间,相关关系参见文献[10]。
当实现图像色彩空间的转换后,建立高斯肤色模型。由于高斯肤色模型具有统计学意义,可认为符合正态分布的随机样本也符合高斯模型。高斯型函数:
其中,Cb和Cr分别表示蓝色和红色的浓度偏移量成份,x=[Cb,Cr]T为样本像素在YCbCr空间的值;m=为YCbCr空间的样本均值;为肤色相似度的2×2协方差矩阵[11]。
将样本的每一个点在YCbCr空间上的值带入高斯函数,令第i个点相似度值为
因为S(i)的范围为[0,255],因此根据肤色相似度所对应的值可以确认肤色。
这样,通过高斯肤色模型,对每一个像素点进行肤色相似度判断,就产生以肤色点为白、非肤色点为黑的黑白区域。再对黑白图像进行形态学处理,将面部区域联通起来。但是通过肤色区域定位操作就能正确标记出人脸区域是不够的,在研究中发现,不同人的五官位置存在一定的共性。因此,通过检测脸部眼、鼻子、嘴巴等五官来确定是否是脸部区域,对显示为白色的面部进行加框,即检测到人脸的图片。
1.3 人脸马赛克处理
人脸马赛克处理就是把检测的人脸区域分割成小矩阵,然后按照横向、纵向、斜向和横纵向等4种涂抹方式把小矩阵中像素涂抹成相同像素值。对涂抹灰度值,采用相邻点像素求平均值的方法,即
D( i,j )代表第i行第j列的像素值。
2 测试结果
为了验证本文方法的有效性和可行性,实验采用主频为2.5 GHz、操作系统为Microsoft Windows7、CPU为Inter(R)Core(TM)、处理器为i5 7 200U、4G内存的PC机,借助Matlab 2014a搭建实验环境。验证人脸库是从互联网上找出的80幅不同的含单人人脸和多人人脸图片。图像中单人人脸马赛克处理相对简单,对图像进行预处理,然后检测出图像中人脸区域,最后对人脸区域马赛克处理,效果如图2所示。本实验基本能成功地检测出了人脸,检测准确率高达96.05%,误检率为10.1%,检测效果较好。利用Matlab软件的运行计时功能,发现每一张大小为600×400的图片完成马赛克总耗时为18~24 s,能够迅速地实现人脸检测与马赛克效果,本文算法效率高,耗时短。
图2 部分实验结果
图3 给出多姿态、多表情的人脸检测及马赛克效果实验结果。通过高斯肤色模型,先对每一个像素点进行肤色相似度判断,产生以肤色点为白、非肤色点为黑的黑白区域;再利用bwlabel函数对黑白图像进行形态学处理;最后对显示为白色的面部进行加框,即检测到人脸的图片。利用imresize图像再对图像缩放得到马赛克图像,将框外黑色内容以原图像显现即得到打码图片。
3 结束语
在信息处理过程中,人脸检测与人脸马赛克意义重大。每一个人的脸都有独一无二的面部特征,借助人脸,可确认出每一个人的信息,是行走的“身份证”。而对人脸进行打码操作,则可有效保护个人隐私。本文利用Matlab软件实现人脸检测与人脸马赛克,优点主要有3个方面。人脸检测率高,相比于动态自适应调整Haar检测函数阈值检测人脸的常规方法,该方法将人脸检测率从95.47%提高到了96.05%;利用Matlab软件同步进行人脸检测与马赛克,规避了一般算法只能单独进行检测或马赛克的不足,提高了效率;利用Matlab软件,算法程序较为简单,只需拥有基础的编程知识并且熟识Matlab操作即可。
图3 人脸检测与人脸马赛克全过程