基于仿射变换的换脸程序 Python实现

三角面片/仿射变换/图片换脸

目录

  • 三角面片/仿射变换/图片换脸
    • 1. 人脸特征点识别(dlib)
    • 2. 仿射变换(affine transformation)
    • 3. 泊松融合让脸部融合更加自然
    • 4. 代码地址

1. 人脸特征点识别(dlib)

dlib是一个python的库,可以识别出人脸的68个特征点,识别出特征点后生成脸部三角面片,同时得到脸部掩膜FaceMask。
特征点生成三角面片使用scipy.spatial的Delaunay,tsearch方法。

soar和tony的脸部特征点以及三角面片

2. 仿射变换(affine transformation)

一个三角形中的每一个点都可以通过重心坐标来表示,那么一个三角形变成另一个三角形,每一个点都会被拉伸移动,这种变换也称之为仿射变换。
基于仿射变换的换脸程序 Python实现_第1张图片
三角面片存在一一对应关系,对每个三角面片计算仿射变换后的结果,得到变换后的成像。

通过计算图片中每一个点的变换形状,可以得到换脸后的结果
基于仿射变换的换脸程序 Python实现_第2张图片

tony的脸变换到soar脸上

3. 泊松融合让脸部融合更加自然

可以直接把变换后tony的脸覆盖到soar的图片上吗?也许可以,但是最好不要。因为两张图片的亮度等等可能不同,直接嵌入会显得十分突兀。

直接脸部和身体合在一起会让图片显得很不自然,泊松融合是一种基于梯度的融合方法,可以让边缘过渡更加自然。在opencv里有响应的函数实现cv2.seamlessClone
基于仿射变换的换脸程序 Python实现_第3张图片

最终结果

4. 代码地址

github地址

你可能感兴趣的:(python,算法)