需求:两幅图像(素颜目标图和带妆参考图)
方法:将两幅图像分别分解成三层:面部结构层(包括眼睛、鼻子、嘴巴等)、皮肤细节层(包括皮肤纹理、瑕疵、痣、皱纹等)、颜色层,将参考图的皮肤细节层和颜色层迁移到目标图上,同时保留目标图的面部结构层。
模型:
在传输之前需要目标图和参考图之间进行面部完全对齐(因为信息是逐像素传递)
步骤:
1. 面部对齐:
采用薄板样条(TPS)[1]将参考图扭曲为目标图。
使用ASM获得TPS所需的控制点,因为脸型的多样性,我们可以手动添加控制点。
图a是83个控制点的示例,控制点定位了眉毛、眼睛、鼻子、嘴唇等还有其它面部皮肤。将这些组件分为三类,使用不同的颜色定义(图b)
2. 层分解
①将目标图和参考图先分解为颜色层和亮度层:
将目标图和参考图转换为CIELAB颜色空间,L*表示亮度层,a*、b*表示颜色层
②再将亮度层分解为人脸结构层和皮肤细节层:
对亮度层进行保边平滑处理(edge-preserving smoothing),得到人脸结构层,然后将亮度层减去或除以人脸结构层,得到皮肤细节层。这步操作有两种方法可以处理(WLS算法和双边滤波[2]),本文采用第一种。
l表示亮度层,s表示人脸结构层。|s-l|2是为了让s与l相似,是为了让s尽可能的平滑。
为了在不同区域平滑度不同,所以在H中加入β
p表示图像像素,ε是一个很小的常数,防止除0。
皮肤细节层:
3. 皮肤细节迁移
加权相加
δ代表权重,I是目标图,ε是参考图,R是生成图。结果不能特别小,否则生成的图像会因缺少皮肤细节而失真。
4. 颜色迁移
属于皮肤区域的时候两者权重相加,本文中的实验ℷ=0.8
5. 高光和阴影迁移
高光和阴影效果的平滑变化保留在人脸结构层中
使用梯度编辑算法[3],保持目标图的光照,迁移高光和阴影效果同时产生平滑效果。
使用Gauss-Seidel方法求解
6. 唇妆
用目标图引导的来自参考图的像素值填充生成图的每一个像素
M表示化妆后的唇部区域,G()表示高斯函数,是分别使用参考图和目标图的直方图均衡后仅L*通道中像素值的差异。
将M的化妆结果合并到生成图R中,用梯度替换法将M的L*通道加到R的L* 通道上,M 的 a∗, b∗通道替换R中的相应区域。
与有监督模型结果对比
参考图只用了一张妆后图。结构保留更好。对于肤色,本文是从参考图中提取肤色,Tong等人是保留原有肤色。
缺点:
需要保持参考图和目标图都是正面