最近在研究人脸重建,参考了github上引用量很高的face3d中的2_3dmm.py,因为要在自己的模型和数据上将3d人脸fit到2d,所以花了一点时间研究了里面fitting相关的代码以及算法。face3d上3d landmark fit 到2d landmark主要是用了gold standard algorithm。这个算法是一系列知识点的集合,里面包含相机矩阵,仿射变换,DLT算法以及优化迭代等。在Multiple View Geometry in Computer Vision中gold standard algorithm用于两幅2d图像的配准以及3d到2d的映射,3dmm将其推广到3d数据和2的数据的配准中。
3d物体从世界坐标投影到图像坐标系的映射关系为:
其中,R为旋转矩阵(rotation matrix),t为平移矩阵(translation matrix),s为缩放系数(scale)。
而仿射变换变化包括缩放(Scale、平移(transform)、旋转(rotate)、反射(reflection, 反转对称)、错切(shear mapping),因此上式可以用仿射变换写为更一般化的形式:
在project transformation中,通过仿射变换将3d点和与相应的2d点匹配的算法为DLT,即直接线性变换,在3dmm中可以理解为3d landmark与2d landmark的对齐。
具体推导过程:
叉乘的结果为:
由叉乘公式,
我们可得,
由于P中只有两个公式线性无关,因此可以写为,
且由于P3 = (0, 0, 0, 1),因此上式可进一步写为,
由于是3d点的齐次坐标,有4个元素,最左边整个矩阵大小为2x8(2行,8列),我们用A8表示,上式表示为,
通过伪逆矩阵,可以初步计算仿射变换矩阵,是的伪逆矩阵,
至此,DLT算法介绍完毕,通过DLT我们可以初始化3d到2d的仿射变换矩阵P。
与DLT相比较,gold standard algorithm是一种将数据标准化,并且迭代的优化算法。如果不改变shape和expression参数,可以理解为3d人脸模型与2d人脸的对齐。如果优化过程中加入shape和expression,改算法可用于人脸重建。
(1)首先,数据标准化是将2d 或3d的数据中心centroid移动至坐标原点;
(2)然后,将数据点到原点的平均距离标准化,其中2d点到原点的距离标准化为,3d点到原点的距离标准化为。
这个处理在gold standard algorithm甚至在DLT中都是必须的!
gold standard algorithm是一个迭代的算法,它的目标是最小化预测点与实际点之间的几何距离。
距离公式:其中上划线代表经过数据标准化处理的量。
Loss function有多种距离计算公式可以选择,在此不例举。
目标:选取6个以上的点对,得到P的最大似然估计。(计算初始化的shape,expression参数,如全0或随机数)
算法:
1) 初始化阶段(线性处理)
1.数据标准化处理(normalization)
使用3.1的算法,其中U, T分别为对3d点(3d landmark points)和2d(2d landmark points)点的进行normalizarion的矩阵,改矩阵为similarity transformation matrix,包含缩放和平移。
2.DLT算法(上文)
2)迭代优化P矩阵
将P矩阵,3dmm模型,(模型中的shape参数,expression参数(如果有))带入计算新的3d landmark坐标,并计算3d landmark通过P矩阵变换后与2d人脸landmark之间的距离,
直到距离函数到指定误差或指定迭代步数。
每次更新P, (shape parameters, expression parameters参数)。
3)Denormalize P matrix
还原P
在人脸任务中,还需将P还原出s, R, t矩阵。
output:
s, R, t, (shape 参数, expression参数(optional))
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删