基于可变形模板的三维人脸重建-学习笔记
原文地址:http://blog.csdn.net/hjimce/article/details/50331423
作者:hjimce
一、数据库处理:
我们通过扫瞄得到的数据,每个人脸模型的网格顶点个数各不相同,也就是拓扑结构不同,因此我们需要对我们的训练数据,做一个归一化处理。使得每个模型的顶点一一对应,拓扑结构相同,这一步采用的算法是,参数化的方法,进行网格重构划分。
1、首先采用柱面参数化的方法,把网格参数化到圆柱上,对应到二维平面。
2、然后在参数空间采用光流法进行稠密对齐,并对网格进行重新划分
3、采用重心坐标放射不变性的方法,进行网格重建。
这个算法流程,刚好跟我研究生的课题搞的算法,很类似。这样我们的数据库中的每个人脸模型的顶点、拓扑结构都是相同的,我们可以得到一个平均脸,包好了:
这个平均脸,将后续使用。
二、人脸重建主要公式
基于形变模型的人脸重建的主要思想,是利用数据库的人脸模型,作为基底向量,表示出任何一个人脸模型(我们即将重建的人脸的三维模型):
其中Savg、Tavg就是我们上面第一步求得的平均脸模型。Si表示人脸数据库样本i的形状向量、Ti则表示纹理向量,α、β是未知的系数。因此假设我们输入一张用户人脸,我们要重建其三维人脸模型,我们的目标就是要求解α、β,只要这两个系数知道了,我们就可以利用上面的公式,求解出其对应的三维模型了。当然上面的计算公式,我们后面将会使用PCA进行简化降维。
三、优化求解
上面我们说到我们的目标是求解未知的系数:α、β,说是这么说,说起来简单,做起来难,因此接着我们要讲解的α、β求解,也是paper算法的灵魂了。那么具体要怎么解呢?我们有如下已知条件:
1、用户输入的一张人脸图片
2、人脸数据库平均脸(包含了贴图)
3、人脸数据库
OK,没了,这就是我们目前所知道的已知条件了。那么到底是怎么从2D重建出3D?也就是怎么求解α、β?算法的总体思路是采用迭代优化的方法,先随机初始化α、β,然后我们可以得到3D的模型,然后我们把这个3D模型,投影到2D平面,得到一张新的人脸图片。然后采用这张人脸图片与用户输入的人脸图片构建损失函数:
使得用户输入的图片与我们投影到二维的图片,差值最小化。然后对上面的式子α、β进行求导,最后采用梯度下降法,更新参数α、β,如此一直循环迭代,直到收敛。因为我们从三维投影到二维的过程中,涉及到相机等相关的参数,这些参数也是未知数,所以统一用:ρ表示,然后梯度下降的过程中α、β、ρ这三个参数一起更新。
参考文献:
1、《A Morphable Model For The Synthesis Of 3D Faces》
**********************作者:hjimce 时间:2015.12.15 联系QQ:1393852684 地址:http://blog.csdn.net/hjimce 原创文章,版权所有,转载请保留本行信息(不允许删除)********************