Face 2 to 3 D

前情分析

这里主要写一下二维人脸重建该人脸的三维模型的一些基础的知识。

主流做法

  • 多视图几何重建。其需要采集不同角度的人脸,对设备的要求很高。
  • 通过RGBD或者RGB图像去重建,由模型特点所致,无法生成模型细节。

单张图像重建

3DMM方法

  • 对设备要求低,算法简单,易于移动端时间实时重建。
  • 基于模型的方法,重建的结果非常完整,拓扑结构已知(对于换脸,换表情之类很友好)。
  • 基于模型的方法,对模型依赖太高。

这里的前提是我们已经有了输入图像人脸的关键点,已有模型的人脸关键点,输出人脸的三维网格。

在Blanz的方法中,他们扫描200张成年人的人头模型,每个模型包含大约70000个顶点。经过PCA处理,制作成参数化人脸模型,每张人脸模型的拓扑结构相同,只是顶点位置或颜色有所差异。你可以把各个特征向量看作是人脸不同的特征,比如脸的长短,胖瘦等。

这里人脸模型分成两个向量:

形状:\(S = (X_1,Y_1,Z_1,X_2,\dots,Y_n,Z_n)\in R^{3n}\)
纹理:\(T = (R_1,G_1,B_1,R_2,\dots,G_n,B_n)\in R^{3n}\)

因此任意一个新的人脸都可以由这些特征向量线性组合生成:

\(S = \bar S+\sum^m_{i=1}a_iS_i; T=\bar T+\sum^m_{i=1}b_iT_j;\)

\(\sum_{i=1}^ma_i=\sum^m_{i=1}=1\)

这样的话原本的任务就变成了对\(a_i,b_i\)的求解了。

其原理和这个动图演示的差不多,也是调整权重,对已有数据进行线性组合得到3D人脸。
blendshape是3d软件里用来做模型形变的一种技术,通过调整权重,设计师可以将目标模型变化成一系列预定义的模型,或者这些模型的任意线形组合。
image

根据给定的图像去得到人脸模型,比较像渲染的逆过程,重建算法的关键在与找出合适的参数,使三维人脸模型在平面的投影尽可能接近原图像。如果不考虑纹理特征,问题可以简化为"使人脸模型关键点在平面上的投影与2D人脸关键点的位置尽可能接近"

人脸关键点检测结果一般是二维点, 也就是说, 脸的朝向不同,检测到的脸部边缘点也会不一样,2d人脸的边缘点并不在真正的脸颊边缘线上。

详情可看下图,上排图像的蓝点是二维人脸监测点,下排图像蓝点是模型关键点。其中红色对应的是2d的点,可以清楚的看出,图像检测出的2d边缘点与模型本身3d边缘点不同。因此,在迭代工程中,需要不断更新模型的3d边缘点索引,使二者一一对应。
image

posted @ 2021-09-29 22:14  X-POWER  阅读(198)  评论(0编辑  收藏  举报