特点提取器(predictor)须要一个粗拙的界线框作为算法输入,由一个传统的能返回一个矩形列表的人脸检测器(detector)供给,其每个矩形列表在图像中对应一个脸。
2.用 Procrustes 分析调剂脸部
如今我们已经有了两个标记矩阵,每行有一组坐标对应一个特定的面部特点(如第30行的坐标对应于鼻头)。我们如今要解决若何扭转、翻译和缩放第一个向量,使它们尽可能适配第二个向量的点。一个设法主意是可以用雷同的变换在第一个图像上覆盖第二个图像。
将这个问题数学化,寻找T,s 和 R,使得下面这个表达式:
事实证实,这类问题可以用“惯例 Procrustes 分析法”解决:
- def transformation_from_points(points1, points2):
- points1 = points1.astype(numpy.float64)
- points2 = points2.astype(numpy.float64)
- c1 = numpy.mean(points1, axis=0)
- c2 = numpy.mean(points2, axis=0)
- points1 -= c1
- points2 -= c2
- s1 = numpy.std(points1)
- s2 = numpy.std(points2)
- points1 /= s1
- points2 /= s2
- U, S, Vt = numpy.linalg.svd(points1.T * points2)
- R = (U * Vt).T
- return numpy.vstack([numpy.hstack(((s2 / s1) * R,
- c2.T - (s2 / s1) * R * c1.T)),
- numpy.matrix([0., 0., 1.])])
代码实现了这几步:
用一个遮罩来选择图像2和图像1的哪些部分应当是最终显示的图像:
如许一个遮罩同时为这两个图像生成,应用与步调2中雷同的转换,可以使图像2的┞汾罩转化为图像1的坐标空间。
1.将输入矩阵转换为浮点数。这是后续操作的基本。
2.每一个点集减去它的矩心。一旦为点集找到了一个最佳的缩放和扭转办法,这两个矩心 c1 和 c2 就可以用来找到完全的解决筹划。
3.同样,每一个点集除以它的标准误差。这会清除组件缩放误差的问题。
推荐阅读
全平易近充电节 | 3月26日~30日 2000位IT行业拭魅战专家邀请你一路充电进修! 作为手机阵营的两大年夜巨擘,苹不雅和三星因为一部iPhone X走在了一路,两边都大年夜中获得了本身想要的器械>>>详细阅读
地址:http://www.17bianji.com/lsqh/40825.html
1/2 1