该论文是09年的一篇3D人脸重建综述文章。
目前的大部分3D人脸重建系统受限于3d扫描设备的一些不足:
1、在扫描过程中要求一定的光线条件
2、无法从多个物体同时获取3D数据
3、没有反射的区域无法获得正确数据(如头发)
4、无法实时
5、如果是激光扫描时,会伤到眼镜
6、在扫描时以及后处理需要人的辅助
7、3D扫描设备的大小和价格限制了现实生活中的应用
一个可选的方案是,直接从2D图片重建出3D人脸。该方法简单廉价,有比较大的应用市场。
一个三维空间的曲面,可以用三角网格或者点云来表示。
三角网格: M=(V,T) M = ( V , T ) ,其中 V=p=(x,y,z) V = p = ( x , y , z ) 是顶点, T=(pi,pj,pk) T = ( p i , p j , p k ) 是一个三角面。
range image: S=(x,y,f(x,y)) S = ( x , y , f ( x , y ) ) ,也被称为2.5D image,surface profiles,depth images,depth maps。
下图是不同术语的一个可视例子。
3D重建算法,需要有从设备扫描得来的一些3D数据。学术界大多使用MPI和USF数据集。MPI数据集包括了200个扫描人脸,每个有7个视角。USF有218个扫描人脸。
3D人脸扫描数据集制作的原则:
a、样本要足够多
b、扫描人脸的顶点要足够多,这样才能准确的描述一张人脸
c、数据集应该包括各种类型的人脸,如性别、表情、年龄、人种等
d、应该公开
在实现3D人脸重建算法之前,3D扫描人脸的一对一对应非常重要。一般对应可分为,刚性和非刚性。刚性,使用仿射变换矩阵,使得两个3D人脸距离尽可能的近。而非刚性,是调整某一3D人脸,使其尽可能的于另一个3D人脸一样。
ICP算法是一种非常经典的刚性算法。但在3D人脸重建中ICP是不合适的。
Basel Face Model用的是光流法的非刚性对齐。该方法在纹理变化太大的时候效果不是很好,比如有胡子和没有胡子。因此需要比较多的条件约束(如必须没有胡子),同时使用平滑插值避免奇怪的结果。不过该方法能够适用于不同的分辨率。
Hutton使用了Thin Plate Splines方法。该方法要求至少有9个特征点,根据这些特征点用刚性变换初始化算法。然后调整其中某一3D人脸,使其尽可能与另一个3D人脸对齐。对齐后相邻最近的那些点被当做correspondences。
2D图像的一些特征点检测。主要用来:
a、在model-based 3D重建(如BFM)中用来初始化3d人脸的位置信息
b、定位图片中侧脸和正脸的特征,这样才能根据给定的人脸调整已经生成的3D人脸
c、在video-based 3D重建中初始化点的跟踪
d、当人脸来自不同的视角时,能够有利于配准。
很多3d人脸重建算法,都有一些重要的假设。
1、投影类型,包括正交投影和弱透视投影。正交投影不会改变投影后的大小,而弱透视投影会改变(会缩放)。这个假设,使得3d人脸位于图片的中心,并且距离镜头很近。
2、反射率。固定反射率,表示该物体的外观不因为视角的不同而产生变化。在3D人脸重建中,这个假设认为,人脸是平滑的,没有油脂、伤疤等纹理不连续。
3、冯氏光照模型,只有一个环境光和一个方向光。在同时拥有室内和室外光时,该假设会失效。
4、对称性状/纹理。该假设认为,只要重建出了一半脸,另一半脸可以镜像生成。
5、人脸方位约束。如,要求图片中的人脸必须为正脸。
1、立体线稿模型
该模型用一些连续的顶点表示一个3D人脸,CANDIDE是利用该方案的一个例子。该模型可以通过Action Units进行变形。Action Unints包括了刚性变换参数、inter-individual变异参数以及within-person变异参数。该模型的一个主要缺点是顶点数太少,以至于重建出来的3D人脸不是太好看。可以增加顶点数,但是同时计算量也会增加。下图是CANDIDE模型的一个例子。
2、统计模型
PCA-based模型是统计模型中应用广泛的一个模型。统计模型是通过训练集和脸部外貌达到重建目的。该方法需要同时为性状和纹理各自训练一个PCA模型,如下图:
重建时可以使用如下公式:
3D人脸重建方法分为:example-based,stereo,video以及silhouette-based。example对应的是单张图片重建,stereo对应的是两张,video和silhouette对应的是多张图片。
Example-based 依赖于整个训练数据来达到重建的目的,并且为使用一些于3D人脸结构有关的先验信息来引导重建。
简单的来说,example-based方法包含两个主要的步骤:分别是模型建立阶段,和model fitting阶段(从图片重建出3D人脸)。在模型建立阶段,利用训练集可以训练出一个参数化的人脸模型,该模型可以表示训练集中的那些3D人脸。在model fitting阶段主要包括如下步骤:
1、被重建的3D face的shape和texture参数初始化为0
2、根据shape和texture参数生成一个3D人脸
3、将3D人脸投影到2D图像的人脸中去
4、计算2D图像人脸和3D人脸投影得到的2D人脸相似度
5、用优化算法优化shape和texture参数。
6、重复2到5步骤,直到给定2D人脸和3D人脸投影得到的人脸最相似。
上面的方法有不少变种。Atick给出了一个统计方法。首先他们将200张3D扫描人脸参数化成柱面坐标,然后用刚性变换进行配准。然后用PCA计算训练数据集的特征值和特征向量,这样一个新的3D人脸可以用如下公式表示:
Vetter和Blanz提出了一种与PCA不一样的方法。在给定一些3D人脸模型后,利用光流法进行配准。每个训练样本都用一些顶点和相对应的纹理进行表示。对于一个新的3D人脸通过这些训练样本的一个线性加权重建而来,如下公式:
Lee针对光照问题对上的方法进行了改进,他们首先还是按照上面的方法计算出shape,texture和pose参数,但是损失函数不再是比较渲染人脸和输入图像,而是比较给定人脸和在特定光照下的3D投影。
Romdhani提出了一个多特征的重建方法,该方法同时考虑了图像的特征(如边沿特征)和模型上的特征。
Gu and Kanade提出了一种只有200个顶点的重建方法。
以及active appearance models ,Interpreting face images using active appearance models 和Real-time combined 2d+3d active appearance models
Reiter使用了典型相关分析技术,而非PCA,进行3D人脸重建。该方法的优点是,3D深度只需要用矩阵乘法就能够获取,而不需要用优化的方法。缺点是,只能处理正脸和特定光照。
统计3D重建方法的优点是,能够从单张图片重建出合理的3D人脸。缺点是:
1、结构信息不足,原因是从单张图片上能获取的信息太少
2、由于PCA模型不包含高频信息,纹理的重建很少会有个人特性
3、无法实时
还有很多改进的方法,有时间再详看。
该方法分为两大类,a、输入图片是正交的,即正脸和90度侧脸;b、非正交的。