在上一篇文章中,小编讲到了美颜sdk中虚拟试妆的实现过程之一:检测上妆区域,今天将向大家讲解剩余的步骤:妆容渲染。
1、人像美化
如果简单的对输入图片进行口红渲染,会使得效果非常突兀。通常女生在涂口红前,都需要上一层粉底,以达到提亮肤色、衬托口红的效果,因此妆容渲染之前也需要进行一步人像美化。人像美化主要包含磨皮、美白、瘦脸、大眼等功能,本文将主要实现磨皮、美白功能。
磨皮
对于输入图像,首先对肤色检测得到肤色区域图,然后采用相应的滤波算法对图像进行处理。最后,根据肤色区域将原图与滤波后的图像进行融合,在肤色区域使用滤波后的图片,其他区域使用输入图像,通常为了提升融合效果,会先对肤色检测的结果进行高斯模糊,再根据系数进行融合。
皮肤检测
又名肤色检测、皮肤概率检测。在磨皮算法中,通常需要确定图像中磨皮的位置,以达到精确磨皮的效果。之所以选择根据肤色检测结果而不是人脸检测区域进行磨皮,是因为人脸检测只能确定面部区域,这会导致脖子与面部交界的位置出现明显区别,影响效果。为了解决这个问题,可以统计大量皮肤像素的颜色数据,分析皮肤颜色的取值范围,得到基于RGB空间的肤色。如果输入像素颜色在RGB肤色像素空间里,即为肤色像素。
滤波
在平滑皮肤的同时,保留五官的细节,因此需要选择一些能够保留边缘信息的滤波算法。目前可以做磨皮的保边滤波主要有以下几种:表面模糊、双边滤波、导向滤波等。考虑到性能与效果的平衡,我们选择使用表面模糊的算法。表面模糊是一种PS中常用的滤波算法,其思想是计算像素邻域内不同像素的加权平均,对于边缘处的像素,权重比较小,能够较为完整的保留;对于非边缘处的区域,权重比较大,平滑的效果较好。
美白
美白算法主要的目的为提亮肤色,一个比较常见的方式是通过颜色查找表方式将肤色映射到理想的范围。颜色查找表的原理是对于每一个给定的RGB颜色,都能够在查找表中找到一个颜色与之对应,并将映射后的颜色使用一张图像的方式进行存储。
2、妆容渲染
为了保证妆容渲染能够达到实时的效果,通常需要使用OpenGL的技术进行渲染,这里将简单介绍妆容渲染的主要流程。
素材生成,需要根据指定的颜色、材质等信息,生成对应的素材,如需要形状等静态效果只需要加载静态图片资源作为纹理即可,如需要光效等动态效果则需要在shader中进行实现。
位置对齐,通常将人脸关键点的位置作为顶点坐标,将素材作为纹理,关键点对应的位置作为纹理坐标进行渲染,以达到将素材位置与实际位置对齐的效果。
颜色融合,这一步会将口红mask与底色进行融合,通常在shader中进行实现,融合的方式有多种,对于口红来说,可以使用透明度融合的方式,但口红mask透明度尽量控制在30%以下,以保证效果较为自然,也可以尝试选用其他的融合方式如叠加等。
以上,就是美颜sdk中,以口红试妆为例,虚拟试妆的所有过程,如果你对美颜sdk接入有需求,欢迎咨询官方客服。
声明:本文由美狐原创,未经允许禁止转载,谢谢合作。