APP下载

基于Android人脸美化App的研究与实现

2016-02-23欧阳杰臣许华虎

计算机技术与发展 2016年3期
关键词:美化肤色人脸

欧阳杰臣,黄 曜,高 珏,许华虎

(1.上海大学 计算机工程与科学学院,上海 200444;2.上海上大海润信息系统有限公司,上海 200444)

基于Android人脸美化App的研究与实现

欧阳杰臣1,黄 曜1,高 珏1,许华虎2

(1.上海大学 计算机工程与科学学院,上海 200444;2.上海上大海润信息系统有限公司,上海 200444)

随着智能手机的普及,数码照片的获取变得越来越容易。而社交媒体的盛行,使得大家对分享照片越发热衷。于是更美丽的自拍照就成了大众需求。文中先比较不同人脸检测方法的优缺点,利用肤色模型进行人脸检测,再利用多级中值滤波算法对皮肤进行光滑处理,在不破坏面部细节的情况下能有效减少皱纹和斑点。而利用之前人脸检测对脸部区域的分区,能够很好地对不同区域进行亮度的提升和减少,已达到在视觉上让五官更立体的效果。OpenCV对Android平台的支持使得一个好用的图像美化App的实现变得更加容易。文中通过以上人脸美化的方法,编写了一个易用的Android App,可以简单获得一张自动美化过的自拍照。

人脸美化;人脸检测;多级中值滤波;Android平台

0 引 言

随着网络社交平台的盛行,人们分享自己生活的意愿变得越发强烈。其中,自拍照又占据了分享照片中的大部分,而看起来更美丽的自拍照成为用户的追求,可以通过不同的拍摄角度获得,也可以通过软件修图。文中给用户提供了一种自动美化自拍照的Android App。

1 人脸美丽判定的分析

1.1 审美标准

由于社会的不断进步,时尚与流行的不断发展,无论从面相到穿衣打扮,不同时期对于美的标准是不一样的。20世纪末一些推崇的美女有着不同的脸型和五官,其中圆脸相较更受欢迎一些。

由于整形技术的不断进步,人们可以自己选择自己想要的样子。一些整形模板的出现,导致现在一眼分不清谁是谁的整容美女。

1.2 如何判定美丽

中国有句古话,叫做“一白遮百丑”,所以美女首先要白,并且皮肤要光滑。而受到西方人的审美影响,眼睛并不仅仅满足于一般的双眼皮,要像白人一样非常的深,内外眼角也要很开;鼻梁也是越高越好,鼻头越简约好;两颊越小越好。

1.3 如何变美丽

现实中,能够变美的方法除了整容以外便是化妆。化妆虽然不能更改五官本来的样子,但是可以改变人们在视觉上的感受。眼睛通过眼线眼影,颧骨和腮帮子以及鼻梁通过打高光和阴影的方式使其看起来更立体。

2 人脸检测方法

2.1 人脸检测方法分类

1)基于知识的人脸检测方法。

人们检测人脸第一个想到的办法就是利用对人脸所掌握的知识来进行检测[1]。这些知识是基于认同度量学、解剖学的,从而形成对人脸检测的一般规则。因为在视觉模式上看,人脸不是一个完全随机的视觉模式,它有自己的属性,有自己的空间相关性。检测效果则与对于人脸知识是否完备有关。目前随着人们对人脸知识的不断深入,方法和效果都已经变得越来越好。

2)基于统计模型的人脸检测方法。

人脸不是规则的形状,所以光靠知识是很难描述清楚的,因此又从基于统计的方法来进行人脸识别[2]。把人脸当作一种模式,所以有“人脸”和“非人脸”两种。于是进行大样本的训练,构造分类器,来帮助判别人脸。

(1)神经网络方法。

神经网络需要大量的训练样本,当样本比较全面时,效果很好,从而能够很好地处理那些非常复杂的人脸检测[3]。因为人脸、嘴巴和眼睛的模式都有自己显著的特征。但是人脸的维度很高,所以需要的训练节点众多,比较复杂。

(2)基于特征空间的方法。

特征空间方法是将人脸变换到某一特征空间,然后通过在特征空间中的规律来区别出“人脸”和“非人脸”。PCA是一种常用方法。根据图像的统计特性进行正交变换,消除各分量间的相关性。变换得到的特征向量,就是特征脸。

(3)基于概率模型的方法。

隐马尔可夫模型本是用来描述信号统计的,目前也被用于了人脸检测中。人脸上的头发、额头、双眼、鼻子和嘴具有永远不变的顺序这一自然特性,所以用一个具有五个状态的一维连续HMM加以表示。将以上五个区域划分为互相重叠的图像块,然后每块都进行K-L变换,观测向量选取前若干变换系数,以训练HMM。基于HMM的方法只使用属于“人脸”的样本进行训练,能够识别人脸的头肩部分。

3)基于模板匹配的人脸检测方法。

模板匹配在早期的方法[4]:先建立一个标准的人脸模板,包含局部人脸特征的子模板,并对此图像全局搜索,对应不同大小的图像窗口,计算与标准人脸模板中不同部分的相关系数,通过预先设置的阈值来判断是否有人脸在其中。此方法优点是由于弹性模板可调,能够判断不同的物体;缺点是必须有前期的预处理过程,且计算量特别大。

2.2 人脸检测方法选择

肤色是不依赖于面部其他部分的特征的,对表情和姿态变化不敏感,稳定性不错[5]。大量实验证明,不同种族、不同年龄、不同性别的人肤色看起来存在差异,但是人脸对应的色调是比较一致的,其区别主要在于灰度和亮度上。当去除亮度,肤色就具有很高的聚类性。因此,使用肤色作为特征进行人脸识别,是基于肤色法[6]进行人脸识别。

2.3 基于颜色空间的人脸检测

1)颜色空间介绍。

(1)RGB颜色空间。

RGB[7]即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一:

F=r[R]+g[G]+b[B]

(2)HSV颜色空间。

HSV是根据颜色的直观特性由A.R.Smith在1978年创建的一种颜色空间,也称六角锥体模型。

(3)YCbCr颜色空间。

YCbCr[8]是YUV经过缩放和偏移的翻版,可以看作YUV的子集。

Y:明亮度,也就是灰阶值。

U&V:色度,作用是描述影像色彩及饱和度,用于指定像素的颜色。

Cb:RGB输入蓝色部分与RGB亮度值之间的差异。

Cr:RGB输入红色部分与RGB亮度值之间的差异。

由于不同人脸的区别只存在于亮度和灰度上,与其他分量关系不大,而且YCbCr从RGB模型转换计算简单,所以选用YCbCr模型进行人脸检测。

2)肤色模型选择。

为了准确进行人脸肤色识别,首先对图像进行光线补偿,然后将人脸图像从RGB颜色空间映射到YCbCr颜色空间,再建立肤色模型并求得相似度矩阵,最后用相似度矩阵中的最大值对相似度矩阵进行归一化,该归一化矩阵将用于后续人脸检测[9]。

获得照片时,总会遇到一些被光源颜色和图像采集设备影响色彩的情况,整幅图片都会在本来颜色的基础上朝着同一方向偏移。生活中所说的偏暖、偏冷或者图像偏色就是这种情况。需要做光线补偿[10]。

采用GaryWorld算法对RGB图像进行快速颜色补偿[11],即:

Cnew=C*Sc

式中:Cstd为标准亮度图像R,G,B的平均值;Cave为输入图像R,G,B的平均值;C为源图像的像素值;Cnew为亮度补偿后的像素值。

RGB转换为YCbCr:

Y=0.257*R+0.564*G+0.098*B+16

Cb=-0.148*R-0.291*G+0.439*B+128

Cr=0.439*R-0.368*G-0.071*B+128

计算相似度公式为:

图像二值化一般按下面这个公式进行:

其中:g(x,y)是原图像中位于(x,y)处像素的灰度;gb(x,y)是二值化后该处的像素值,它只能取1(白)或0(黑)。二值化后的人脸图像中,数字为0的部分为背景,数值为1的部分表示人脸;T是用于二值化处理的阈值。

简单肤色模型[12],通过对大量的肤色样本进行观测统计,利用色度在某个区域的聚合性,得出一个相对的最佳分割阈值,并用得到的阈值对人脸划分区域。前人通过实验[5]发现YCbCr空间的简单肤色模型的阈值设置通常为:

简单肤色模型既有缺点又有优点。缺点是因为阈值的固定不变,从而导致它适应性较差,会被光照或者阴影等因素干扰,所以只能进行简单背景下的人脸检测,但是它又因为算法实现简单,从而运算速度飞快,开销很小。

人脸检测过程如图1所示。

图1 人脸检测过程

3 人脸美化的方法研究

之前利用肤色模型检测出图像中的人脸区域对后面做人脸美化提供了很好的帮助。确定了人脸区域以后,可以通过多级中值滤波器对人脸中的皱纹斑点进行祛除,同时也在适当的位置改变像素的亮度达到添加阴影和高光的目的。选择的非线性多级中值滤波器不仅可以有效祛除皱纹和斑点,还可以在适当的地方添加阴影和高光[13]。

尽管希望斑点全被消除,皱纹全被抹平,但很重要的一点是不能为了以上的目的破坏太多的图像细节,所以要对人脸划出特征区域,使用的是自适应阈值的二值算法。

选择一种质量最好的阈值分割算法,叫做Niblack算法。它是一种基于灰度图像的算法,对原图进行分割,分割成较小的图块,对不同图块选取不同的阈值,二值化的阈值为:

其中:m(x,y)为区域的平均灰度值;V(x,y)为梯度值;k和模板为经验值,设k为0.5,模板为7×7。

阈值是会随着灰度值改变的。

二值化不会很容易就轻易地分出两值,会受到人脸中斑点、皱纹等皮肤纹理细节的影响,从而出现额外的信息。比如嘴和鼻子之间的区域,会有这些小的干扰信息。为了去除这些干扰信息,可以提高阈值。方法是:用大小为7×7的模板被像素值为1的像素点使用,然后统计整个模块内有多少个不为0的点,通过多次实验,将值小于10的像素点设定为干扰点,并改变其像素值。可以通过以上的方法准确区分出不同的特征区域。

二值化过程如图2所示。

图2 二值化过程

由Nieminen等最先提出的多级中值滤波器是一种基于中值滤波器改进的已被证明很成功的滤波器,但是初期还不叫这名字,在Arec等专门研究分析了这种中值滤波器的特性以后,才正式将这种滤波器命名为多级中值滤波器。它比传统的滤波器能更多地保留图片原本的细节,在祛除皱纹、斑点上也有很好的效果。

非线性多级中值滤波器定义如下:

令yi,j=med{xi=r,j+s(r,s)∈A}表示图像在m行n列的灰度值。去变长为L的矩形窗口,这里L=2N+1,N为整数:然后把该窗口分成四个小窗口。x(m-I,n-j),-N≤I,j≤N表示窗口内的像素点,则四个窗口被定义为:

W1(m,n)={x(m,n-i);-N≤i≤N}

W2(m,n)={x(m-i,n);-N≤i≤N}

W3(m,n)={x(m+i,n-i);-N≤i≤N}

W4(m,n)={x(m-i,n-i);-N≤i≤N}

其中,W1(m,n),W2(m,n),W3(m,n),W4(m,n)分别表示沿水平、垂直、与水平方向成45°及135°的一维窗口。

令Z1(m,n),Z2(m,n),Z3(m,n),Z4(m,n)分别表示这四个窗口内的所有像素点的中值。即:

Umin(m,n),Umax(m,n)分别表示上式中四个中值的最小和最大值。即:

Umin(m,n)=min[Z1(m,n),Z2(m,n),Z3(m,n),Z4(m,n)]

Umax(m,n)=max[Z1(m,n),Z2(m,n),Z3(m,n),Z4(m,n)]

下式为多级中值滤波器的最终输出:

y(m,n)=med[Umin(m,n),Umax(m,n),x(m,n)]

通过使用以上滤波方法,可以得到一个斑点、皱纹大大减少的光滑人脸,从而也使人脸变得更美丽。根据之前对脸部的分区,在两颊和鼻翼两侧增加阴影,对应像素降低亮度。在颧骨和鼻梁处增加高光,对应像素增加亮度。经过反复测试,获得一个理想的视觉感受大概要进行8次迭代。

人脸美化过程如图3所示。

图3 人脸美化过程

从图中可以看出,该算法可以很好地去除人脸图像中非特征区域斑点、皱纹等影响人脸美观的因素,并且在适当位置的高光和阴影添加使得人脸变得更立体;同时,根据提出的算法,可以大致找到特征信息,保留最基本的人脸信息,在不破坏人脸的情况下,达到好的人脸美化效果。

4 Android端实现

4.1 OpenCV编程

OpenCV近年来发展迅猛,随着Android[14]智能终端的发展,越来越多的传统科研平台都转向Android移动终端。在OpenCV的发展历程中,第一次飞跃是2009年10月1日发布的2.0版本,该版本支持C++接口,是直接从1.2版本跳到2.0[15]。第二次飞跃是在2010年6月发布的2.3、2.3.1版本,除提供C++接口向下兼容C接口外,新增了Java接口,且是对准Android平台。更重要的是以前官方不支持ndk-build,这次终于一统JNI接口调用方式,方便在Android上开发使用。

从2.4之后,为了和Android的系统架构保持同步,准确说是吸收Android框架层的优点,引入了OpenCV Manager的概念。其本质就是一个Service,用来管理OpenCV动态链接库。它工作在App和OpenCV的动态链接库之间。OpenCV Manager的结构就是模仿Android的Binder机制。其架构图如图4所示。

图4 OpenCV Manager架构图

App在运行时会首先检查OpenCV Manager是否存在,如果不存在则会提示安装,如果存在,就会连接这个服务,进一步初始化加载OpenCV库。流程如图5所示。

图5 Android 程序加载OpenCV库流程

4.2 Android App实现

此App运行于Android 4.4 KitKat系统。点进App,直接进入相机界面,左下角按钮开启美颜模式,所见即所得,中间按钮为拍照功能,右下角为从相册导入图片功能,如图6所示。

图6 程序界面

5 结束语

文中通过肤色模型进行了人脸检测,并通过检测中对脸部划分的区域运用了多级中值滤波算法,不仅可以有效祛除皱纹和斑点,还可以在适当的位置添加阴影和高光。但是所使用方法皆为简单实现方法,主要对正面的大头照进行美化。而对于背景复杂,人脸角度不好,光照角度不好等人脸则没办法进行检测并美化。在接下来的研究中,希望通过选择不同的识别算法和滤波算法,以达到对复杂背景、不同光照角度的

人脸进行美化的目的。

[1] 姜 睿.基于知识的人脸检测与人脸识别系统研究[D].西安:西北工业大学,2004.

[2] 赵 立.基于统计模型的人脸特征点定位和表情识别[D].广州:华南理工大学,2012.

[3] 吴桂林.基于BP神经网络的人脸检测[D].武汉:华中科技大学,2004.

[4] 龙开文.基于模板匹配的人脸检测[D].成都:四川大学,2005.

[5] 柯 研.基于肤色模型的人脸检测算法研究[D].武汉:华中科技大学,2008.

[6] Wu Yanwen,Ai Xueyi.Face detection in color images using AdaBoost algorithm based on skin color information[C]//Proceedings of the first international workshop on knowledge discovery and data mining.[s.l.]:[s.n.],2008:339-342.

[7] 李 群,张奇志,周亚丽.基于颜色特征的人脸检测方法[J].北京信息科技大学学报:自然科学版,2012,27(2):73-77.

[8] 吴要领.基于YCrCb色彩空间的人脸检测算法的设计与实现[D].成都:电子科技大学,2013.

[9] Shi Chunlei,Jin Longxu,Zhang Ke.Face detection based on skin color segmentation and AdaBoost algorithm[C]//Proceedings of 2011 3rd IEEE international conference on information management and engineering.Zhengzhou:IEEE,2011.

[10] 贾灵芝,李 岚,钱坤喜.基于自适应光线补偿的人脸检测算法[J].计算机技术与发展,2008,18(12):120-122.

[11] Zakaria Z,Suandi S A.Combining skin color and cascade-like neural network for face detection[C]//Proceedings of 2011 IEEE international conference on intelligent computing and intelligent systems.[s.l.]:IEEE,2011.

[12] Lv Shaodong,Song Yongduan,Xu Mei,et al.Face detection under complex background and illumination[J].Journal of Electronic Science and Technology,2015,13(1):78-82.

[13] 江凤兵.不同颜色空间肤色检测算法的研究[D].赣州:江西理工大学,2011.

[14] 韩静亮,赵 曦,赵群飞,等.基于迭代多级中值滤波的人脸美化算法[J].计算机应用与软件,2010,27(5):227-229.

[15] Niblack W.An introduction to digital image processing[M].Englewood Cliffs,New Jersey:Prentice-Hall,1986:115-116.

Research and Implementation of Face Beautification App Based on Android

OUYANG Jie-chen1,HUANG Yao1,GAO Jue1,XU Hua-hu2

(1.College of Computer Engineering and Science,Shanghai University,Shanghai 200444,China;2.Shang Da Hai Run Information System Co.,Ltd.,Shanghai 200444,China)

By the spread of smart phones,digital photos can be gotten more and more easily.People is more and more eager to share photos with the advent of social networking.Then the level-up selfie has become the public’s demands.In this paper,the difference between different face detection methods is compared in advantages and disadvantages.The skin color model is used for human face detection,and then the multilevel median filtering algorithm is applied which can effectively reduce wrinkles and spots to smooth the skin in the situation which doesn’t destroy the detail of face,use of the partition divided in the former face detection to enhance and reduce the brightness of different regions which want to achieve a goal that makes facial features more three-dimensional in the visual sense.The supporting of OpenCV for the Android platform makes a good face beautification App implementation easier.Through a method above,which beautifies person’s face,can develop a convenient Android App which can make users obtain an beautiful selfie simply.

face beautification;face detection;multilevel median filtering;Android platform

2015-06-28

2015-09-30

时间:2016-02-18

国家重大科技专项课题(2009ZX04001-111)

欧阳杰臣(1989-),男,硕士,研究方向为图像多媒体技术;高 珏,副教授,研究方向为多媒体、Internet技术和嵌入式应用等;许华虎,教授,博士生导师,CCF高级会员,研究方向为人机交互、图像处理、多媒体网络技术等。

http://www.cnki.net/kcms/detail/61.1450.TP.20160218.1636.076.html

TP39

A

1673-629X(2016)03-0009-05

10.3969/j.issn.1673-629X.2016.03.003

猜你喜欢

美化肤色人脸
迷彩色在通信基站天线美化中的应用探析
有特点的人脸
SLOW MANIFOLD AND PARAMETER ESTIMATION FOR A NONLOCAL FAST-SLOW DYNAMICAL SYSTEM WITH BROWNIAN MOTION∗
一起学画人脸
Conversation in a house
人的肤色为什么不同
为什么人有不同的肤色?
基于GPU加速的引导滤波人脸祛斑美化算法
三国漫——人脸解锁
美化生活