人像美妆简介与唇彩算法实现

1. 引言

2. 美妆算法简介

“人靠衣装,美靠靓妆”,美妆的通俗定义是指,通过使用化妆品和相应的工具(眼线笔、睫毛贴等),使人的五官变得精致、立体、美观,以达到美容的效果。这是传统意义上的美妆,而照片美妆则是指通过一定的图像算法来模拟真实化妆的过程,让我们的照片变得像画过妆、美过容一样。随着科技的发展,生活水平的提高,人们对生活质量的要求也越来越高,拍照分享几乎成了每个人的日常,而对这些照片的美妆处理需求,也是与日俱增,在这个渴望美的世界里,“美妆相机”“玩美彩妆”等一系列美妆App也孕育而生,并且深受女孩子的喜爱。

以厦门美图科技出品的“美妆相机”、虹软科技出品的 Perfect365、“玩美彩妆”和“天天P图”为代表的美妆应用,正在通过各种图像算法,来实现照片和视频的美妆效果,各种效果举例如图1所示。

图1 美妆特效举例

从图中可以看到,各大美妆应用所做的美妆特效无非包括如下几个部分。

· 修眉:给人像替换新的眉毛与眉形。

· 眼妆:眼影/睫毛/眼线/双眼皮/亮眼/美瞳。

· 腮红:给人像添加腮红效果。

· 唇彩:给人像增加不同的唇色。

· 粉底:给人像增加不同颜色的打底妆

在这里,我们以如下的开发流程来介绍所有美妆算法。

在早期的修图时代,几乎所有的修图操作都是在 Photoshop或者类似的 PC修图软件中完成的,那个时代,手机还没有这么智能,也运行不了现在这么丰富的 App,更没有什么“美图秀秀”,因为手机硬件性能的限制,我们只能在PC上修图。但是,随着科技的发展,智能手机的普及,美颜美妆类手机 App 开始萌发,而它们的诞生,无非就是使用最简单的方式把PC 中 Photoshop 等美颜美妆修图的操作用算法实现,并移植到手机上。这个方法一直沿用至今,它的具体流程如图 2所示。首先,将目标效果在 PS中实现;然后,将 PS中的步骤分解细化;接着,根据 PS中的步骤进行图像算法编程实现;最后,将算法合并,得到最终美颜美妆的功能库用以处理图像(当然,这里我们所说的是传统方法,深度学习的方法排除在外)。

图2 美妆效果算法开发流程图

整体算法开发流程介绍完了,需要注意的是,美妆功能对于人脸关键点信息是强依赖的,人脸关键点的准确与否,将直接影响妆容效果的好坏。后续我们将采取关键点检测模型检测人脸关键点,如图3所示。

图3 人脸关键点序号图

3. 唇妆

唇妆,是对唇部区域的美容化妆,是女性最常用的化妆手法。唇妆最大的作用在于凸显美人的气质,例如“淡雅的上班唇色”“妩媚的约会唇色”“出位的时尚唇色”“高贵的红艳唇色”等,不同的时间、不同的地点、不同的场景,不同的唇彩搭配,凸显不同的美人韵味。

3.1 常用唇彩效果算法实现

本节将实现一种常用的唇彩算法。

3.1.1 唇彩标准模板设计

这一步非常关键,实现唇彩的基本原理是对嘴唇区域的像素添加颜色,而嘴唇区域的获取,依赖嘴唇区域的mask。我们将通过算法,将制作好的嘴唇mask变换到任意一张用户人像照片中的嘴唇区域,然后根据mask中的黑白信息来判断嘴唇区域。

首先,制作一张模特的嘴唇mask,并对mask进行一定的裁切与缩放,如图4(a)所示。同时,我们以106关键点为基准,得到对应的点位信息(也可以手动标记点位数据),如图4(b)所示,点位标号即虹软105关键点标号。

其次,我们创建标准唇彩模板。将点位信息标号统一,如图4(c)所示,顺序不变,索引统一从 0开始。可以发现,嘴唇区域共有 20个关键点信息,在此基础上,再添加8个点,分别是矩形框所在的边界点,标号如图4(c)所示。这8个点用来限定嘴唇区域范围,至此,唇彩模板共有28个关键点信息。

最后,将嘴唇区域按照点位进行三角形剖分,并将三角形进行索引标号,如图 4(d)所示,共有42个三角形。记录下三角形的点位位置与索引,这样mask和对应的三角形索引以及28个点位信息就形成了一个标准唇彩模板。

图4 标准唇彩模板设计

3.1.2 标准唇彩模板的变换

对于任意一张用户人脸照片S,如何将标准唇彩模板 mask 对齐到嘴唇区域呢?算法如下所述。

①对于S进行人脸关键点检测,得到嘴唇区域的20个关键点信息,标号为75-94。

②计算 20个关键点的最小外接矩形框,并将矩形框外扩。按照图 4(d)所示的顺序,得到8个矩形框边界点。共计28个嘴唇关键点的数组,记作P1,矩形框所在的嘴唇区域图像记作S1。

③假设标准唇彩模板图为M,对应28个关键点的数组为P2。

④假设标准唇彩模板对应的42个三角形定点索引为T。

⑤按照T将S1进行三角剖分,得到三角形图像数组Ts。

⑥按照T将M进行三角剖分,得到三角形图像数组Tm。

⑦遍历Ts,对每个三角形内的所有像素做仿射变换,映射到Tm对应的三角形内,这样就将Tm对齐到了Ts,即得到一张和S1一模一样的唇彩模板 mask,这个 mask中记录的是黑白区域,白色表示S1内的嘴唇区域,黑色表示背景,如图5(b)所示。

图5 标准唇彩模板变换

该算法流程涉及两个算法:仿射变换以及判断点是否在三角形内部。

3.1.3 嘴唇上色

为了能够方便地添加各种颜色的唇彩,这里我们使用标准颜色映射表 512×512 LUT的方法来对嘴唇区域的图像进行颜色变换。变换之后得到了图像C,如图6所示。

图6 LUT颜色变换

3.1.4 alpha混合

按照S1将图S和图C进行alpha融合,得到最终效果,如图5.47所示。

图7 唇彩算法效果图

3.2 唇彩的其他算法实现

3.2.1 嘴唇检测法

唇检测法是指通过算法检测出嘴唇区域,然后对该区域的像素进行颜色变换,进而达到上唇彩的效果;这种方法不需要精确的人脸关键点信息,代价比较小,但缺点是传统的嘴唇检测算法精度较低。

常用的检测算法有两种,一种是基于颜色空间的传统检测算法,论文参考《基于肤色和唇色信息的人脸检测方法的研究》和《一种快速鲁棒的唇部检测方法》;另一种是基于深度学习的嘴唇分割。

论文《基于肤色和唇色信息的人脸检测方法的研究》中以 YIQ 颜色空间为基础,基于唇色像素值统计结果,对唇色进行检测,作者给出了唇色像素的分布范围,如表 1 所示。对于任意像素,按照如下公式进行YIQ颜色空间转换,Y、I、Q分量满足唇色分布范围要求,则该像素即为唇色像素。

表1 YIQ颜色空间的纯色范围表

RGB颜色空间到YIQ颜色空间的转换公式如下:

在论文《一种快速鲁棒的唇部检测方法》中,以 RGB 颜色空间为基础,提出了一个唇色判断公式,如下所示:

对于任何一个像素点P(R,G,B),若满足上述公式,则该像素属于唇色。这里的T是经验值,论文中并未给出具体数值。

这里给出两种传统算法的效果图,如图8所示。

图8 唇色检测算法效果图

基于深度学习的图像分割,我们留到后续章节中详细给大家讲解。现在可以告诉大家的是,基于深度学习的嘴唇分割算法以极高的分割准确率完胜传统算法,大家拭目以待吧。

无论是传统方法还是深度学习方法,分割出嘴唇区域之后,我们就可以使用 LUT 颜色变换的方法或者使用 HSV等颜色空间修改像素颜色的方法,来修改嘴唇的颜色,进而达到上唇彩的效果。

3.2.2 曲线拟合法

曲线拟合算法对比嘴唇检测算法而言,不是通过检测来获取嘴唇区域,而是基于人脸关键点,也就是嘴唇区域的特征点来进行曲线拟合,进而获得光滑的嘴唇曲线,以及光滑的嘴唇区域。常用的曲线拟合算法有最小二乘法,贝塞尔曲线拟合法等。

曲线拟合法也是很多开发唇彩特效应用的首选方法,以曲线拟合法为基础的唇彩算法,逻辑流程如图9所示。

图9 使用曲线拟合法唇彩的逻辑流程图

具体分解过程如下:

(1)对原始人像照片进行人脸关键点检测,获取嘴唇区域关键点,以虹软的 101 关键点为例,如图10(a)所示。

(2)对嘴唇关键点进行曲线拟合,以贝塞尔曲线拟合为例,如图10(b)所示。

(3)对曲线拟合得到的嘴唇区域进行黑白填充,嘴唇区域为黑色,其他区域为白色,如图10(c)所示,得到嘴唇区域Mask。

(4)对嘴唇区域Mask进行高斯模糊,然后反相,得到最终的嘴唇区域Map,如图10(d)所示。

(5)将原图进行LUT唇色转换,如图10(e)和图10(f)所示。

(6)将原图和唇色转换结果图以嘴唇区域Map为alpha通道进行alpha混合,得到结果图,如图10(g)和图10(h)所示。

图10 嘴唇区域贝塞尔曲线拟合

4. 总结

本文对美妆算法进行简单介绍,并以唇彩为典例,介绍了唇妆的详细思路与算法实现。

5. 参考

Android简单实现嘴唇贴纸功能_JabamiLight的博客-CSDN博客

人像美妆---妆容迁移算法研究(Makeup transfer)_Trent1985的博客-CSDN博客

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值