人脸三维数据的获取是形成个性化人脸模型的基础,常用的有激光扫描仪、结构光、被动立体视觉等基于计算机视觉的方法。激光扫描(Laser Scanner)可以同时获得大量的准确的三维数据和纹理信息。目前,世界上许多研究小组正在应用激光扫描仪进行人脸三维数据的提取研究。使用三维激光扫描仪扫描真实人脸采集数据时,用扫描仪围绕人头部旋转360°进行扫描,得到人脸的三维几何信息和纹理信息,然后构造出具有纹理的三维人脸网格模型。三维人脸网格模型由若干三维网格点(Vertex)和网格点围成的多边形面片(Facet)构成,网格模型的规模(模型中网格点和面片的数量)决定了网格模型的真实感和细腻程度,同时网格模型的规模也会影响模拟运动的计算量。图11-8所示是一个中等规模的三维人脸网格模型。该模型具有1294个网格点和2403个面片。
使用激光扫描等基于计算机视觉的方法得到个性化模型,虽然形态逼真,但是有如下缺点:
1)获取的人脸三维数据信息只有人脸的形状而没有结构信息,而且数据的噪声比较大,直接用于人脸动画比较困难。
2)成本比较高,很难普及。
因此,为了得到可用于动画的个性化的人脸模型,一般是从一个结构化的人脸网格模型开始,通过基于计算机视觉的方法或基于图像的方法得到个性化人脸的信息,再去拟合、变形标准模型,贴上纹理,得到特定人脸的三维模型。许多研究人员从普通的摄像机获取的多个图像出发,进行个性化人脸建模的探索。从一幅图像重构真实的人脸形状和纹理,本身是一个病态问题,且需要大量的计算,速度很慢。从正面和侧面图像提取特征点信息,对标准模型进行变形,是得到个性化人脸比较常用的一种方法。从任意两幅图像重建人脸,当人的皮肤很光滑(如儿童、年轻人)时,边角检测很难实现,往往会失败。从多幅图像重构三维人脸模型的方法也很常见,但需要的计算时间较长。
图11-8 一个中等规模的三维人脸网格模型
出于上述原因,我们采用3DS MAX建立三维人脸模型。虽然3DS MAX模型没有用激光扫描得到的三维人脸模型精确,但是数据处理思想与方法几乎完全相同。图11-9为笔者采用的3DS MAX模型,包括不同视角的网格模型与贴上纹理的模型。
(www.xing528.com)
图11-9 3DS MAX人脸模型
a)人脸模型 b)人脸模型的侧面效果 c)人脸模型的背面效果
仍然采用Visual C++作为编程软件平台,用OpenGL来建模进行绘制。OpenGL中对点、线和多边形的定义都是通过对顶点坐标的定义来获得的,而所有的几何物体最终都是按顶点的定义顺序来进行绘制的。此模型包含212个顶点,如图11-10所示。
这里用二维数组来定义顶点为vertices[212][3],其类型为GLfloat。例如,{-1.40009e-06f、-0.0804332f、0.34856f}表示了点(-1.40009e-06,-0.0804332,0.34856),这一点是鼻尖的位置。绘制模型时选择绘制三角形,这样的三角形有410个,用二维数组定义这些面为face_indicies[410][6](410表示有410个三角形面,6表示组成三角形的三个顶点号和对应的纹理坐标号),类型为BYTE。模型构造的部分代码如下:
图11-10 3DS MAX人脸模型的顶点分布
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。