人脸融合技术

传统的图像融合方法:https://blog.csdn.net/weixin_42512684/article/details/108423845
传统的人脸融合分为三步:
1.特征点提取
2.三角剖分
3.像素融合
三角剖分
Delaunay :最大化最小角,避免瘦三角形
Delaunay剖分是一种三角剖分的标准,实现它有多种算法。
LOP((Local Optimization Procedure)):
1. 将两个有共同边的三角形合成一个四边形
2. 看其第四个顶点是否在三角形的外接圆之内
3. 如果在外接圆内,将对角线对调
Lawson算 法:
从任意的一个剖分开始,对出现的凸四边形施加最小内角最大原则进行对角线交换,直至完成

基于三角形的像素融合
相应调整顶点位置
图片中对每一个三角剖分区域做放射变换
用到的函数:
getAffineTransform() 得到仿射变换矩阵
warpAffine() 进行放射变换
对应修改三角形中像素的颜色

def draw_point(img,points):#在图片上画点
	for p in points:
		cv2.circle(img,p,2,(0,0,255))
def draw_tri(img,trangleList):#图片上画三角形 # trangleList = subdiv.getTriangleList()
    r = (0,0,img.shape[1],img.shape[0])
    for t in  trangleList: 
        pt1 = (t[0],t[1])
        pt2 = (t[2],t[3])
        pt3 = (t[4],t[5])
        if (rect_contains(r,pt1) and rect_contains(r,pt2) and rect_contains(r,pt3)):
            cv2.line(img,pt1,pt2,(255,255,255),1)
            cv2.line(img,pt2,pt3,(255,255,255),1)
            cv2.line(img,pt3,pt1,(255,255,255),1)

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