吴志诚, 陶玲凤
(芜湖职业技术学院 艺术传媒学院,安徽 芜湖 241000)
随着图像处理技术的不断进步,三维建模技术应用越来与广泛,特别是在影视动画制作方面,已经成为主流技术。传统的人脸三维建模技术大多采用专用软件(3DMax等)实现,该方法具有精度高、适应性强等特点[1],但是缺点也是显而易见的,专用软件成本高、效率低、建模过程复杂且对特定人脸建模不理想,由此可见,采用计算机技术直接实现快速三维人脸重建具有巨大的经济和社会价值。目前来说,在直接构建三维人脸的研究上,国内外主流方法主要有两种,第一种是基于三维激光扫描设备的直接采集法,该方法具有采集数据量丰富、模型立体感和真实感较强[2],但是价格昂贵且只能针对多张照片而言,单一照片的扫描效果不佳;第二种方法是基于给定真实照片,直接重构人脸三维造型,该方法具有简单易行、价格低廉、适应性较强等优势[3],但是精度较低,在精度要求不是很高的场合是最佳选择。本文基于第二种方法开发了一种基于分区识别的一般人脸特征提取算法,可以较好地实现真实照片的三维重构工作,该算法可以广泛应用于影视动画制作领域。
由于人脸图像数据是连续的,为了节约资源,提高人脸识别效率,采用核心特征点选取法来进行人脸识别。顾名思义,核心特征点就是仅对选取的特征点进行识别而忽略其它特征点,核心特征点选取的好坏直接影响到人脸识别效果,通过查阅大量相关文献,结合自身研究感悟,选取眼睛核心特征点、鼻子核心特征点、嘴唇核心特征点,通过检测并标定上述核心特征点,对一般三维人脸模型进行调整,进而生成与真实照片相对应的个性化人脸三维模型[4]。
一般来说,眼睛核心特征点的外形为大体对称的桃仁形状,其外漏的结构包括近似球形的眼球部分和上下眼皮部分,结合我们的生活经验可知,上眼皮呈标准弧形,以眼球中线的对称点为中心点,形成一个较大的弧线,下眼皮呈非标准弧形,以眼球中线的对称点为中心点,形成一个较小的弧线;鼻子核心特征点为其大致位于整个脸轮廓的物理中心点,其周围被眼镜和嘴唇环绕,鼻子特征点的大致外形呈现较规则的三棱锥形状,中间有分割,左右各有较为对称的鼻孔一个;嘴唇特征点其外形大致呈规则的弓形,外形略微突出,上下弓形弧度吻合较好。
基于上述选取的人脸核心特征点和给出的各个特征点的主要外形特征,本小节设计了一种基于图像的人脸核心特征点检测算法,可以快速实现人脸核心特征点的检测,如图1所示,算法主要流程如下:S1:首先进行真实照片的边缘化处理,统一其尺寸和分辨率;S2:对预处理过的人脸图像进行相似度计算并对图像进行灰度化处理;S3:根据选定的人脸核心特征点进行核心特征点的识别,针对眼睛核心特征点[5],基于颜色的特征识别法(眼睛的颜色是黑色的,在脸部唯一),针对鼻子核心特征点,采用分段曲线识别法(形状为三棱锥),针对嘴唇核心特征点,采用对称曲线识别法;S4:整合特征点识别信息,为标定做准备。
图1基于图像的人脸核心特征点检测算法流程图
图2基于图像的人脸核心特征点标定算法流程图
本小节进行基于图像的人脸核心特征点标定算法设计,可以快速实现人脸核心特征点的标定,如图2所示,算法主要流程如下:S1:根据整合的人脸核心特征点检测信息,进行分时特征点标定操作;S2:根据变形模板计算眼睛核心特征点的主轮廓并进行轮廓标定操作;S3:根据人脸主轮廓物理对称点和双眼连线对称轴上的交叉区域确定鼻子核心特征点的轮廓信息并进行标定操作[6];S4:根据嘴唇的特色确定其大致轮廓,然后定位信息准确确定其外形轮廓并进行标定操作;S5:整合特征点标定信息,为人脸三维建模做准备。
在上文完成人脸核心特征点检测和标定的基础上,为了提高系统整体的适应性,需要对一般人脸特征进行提取,此时,针对的对象不仅仅局限于真实照片,可以是任何包含人脸图像的影像载体。为了实现上述目的,设计了一种基于分区识别的一般人脸特征提取算法,该算法主要思想是首先通过粗略划分人脸整体轮廓为特定的特征区[7],进而针对每一个特征区进行细化识别,识别步骤与上文类似。完成上述步骤后,需要对模型进行局部和整体调整,生成特定的三维人物头像,如图3所示,该过程要用到径向基函数(RBF)的插值和位移传播子函数,该过程的核心代码如下:
const int N=80;
vector
vector
const int H=18; //设置隐藏节点的个数
vector
vector
double Green[N][H];
vector
const double eta=0.01; //设置学习效率
const double ERR=0.6;
const int ITERATION_CEIL=1000;
vector
图3径向基函数(RBF)工作示意图
在实现基于分区识别的一般人脸特征提取算法后,就可以利用采集到的核心特征点信息进行三维人脸建模,基于应用场合的实际考虑,本文着重关注如何快速而精确地恢复人脸的三维图像形状信息和纹理信息[8],因此,建模过程分为两步,本小节仅论述三维人脸几何模型重建,三维人脸模型重建的基本思想是根据上文提出的核心特征点信息对通用的三维人脸模型进行个性化处理,以精确重现真实照片中的人物图像。由于真实照片中的不包括人脸图像深度信息,选取通用三维人脸模型的典型值,基于上述论述,如图4所示,三维人脸建模算法主要流程如下:S1:首先选取通用三维人脸模型[9],选择Candide-3通用人脸三维模型并对相关参数进行设置;S2:根据上文得出的核心特征点对通用人脸三维模型进行全局调整,全局调整的目的是符合人机工程学标准,一般应使三维人脸模型的眼睛核心特征点、嘴唇核心特征点与真实照片中的投影特征点相吻合;S3:三维人脸模型在经过全局调整的基础上进行局部调整,局部调整的目的是凸显三维人脸图像的个性化[10],主要保证真实照片中的人脸与三维模型中的人脸器官的大小、间距和位置完全相同;S4:对非核心特征点进行程序化调整。与上述过程相对应,核心代码如下(基于Opencv插件):
Video Candide-3 camera(0); //选择Candide-3通用人脸三维模型
while (true)
{
Mat camerFrame;
camera >> camerFrame;
if (camerFrame.Quanju())
std::cerr << "全局调整完成" << std::endl; //全局调整成功
getchar.Jubu();
exit(1);
std::cerr << "局部调整完成" << std::endl; //局部调整成功
Mat displayedFrame(camerFrame.Feite(),CV_8UC3); //进行非特征点调整
}
图4 三维人脸建模算法流程示意图
图5柱面映射模式示意图
上文已经指出,三维人脸建模过程分为两步,本小节给出建模的第二步,在得出经过局部调整的三维人脸模型的基础上进一步进行后期真实感构建设计[11],主要工作是从真实照片中获取人脸面部的纹理信息并融合到三维人脸模型上,使模型具有真实感。基于实际情况,采用纹理映射来进行真实感构建,如图5所示,采用柱面映射模式,过程是首先把采集到的三维纹理映射到纹理平面上,然后与真实照片提取的真实纹理进行对比,最后根据对比结果进行纹理调整。
为了实际验证上文所提算法的有效性和实用性,在vs2008环境下采用OpenGL三维开源插件接口开发了一款三维人脸自动建模系统,该系统可以实现通用人脸三维模型的导入与设置、人脸核心特征点检测与标定、一般人脸特征点提取、基于真实照片的三维人脸个性化建模、后期真实感渲染等功能,系统实际运行界面如图6所示。
系统开发的三维人脸自动建模系统首先获得原始的三维灰度数据图像,然后进行填洞插值操作,此后重新对图像进行采样,防止spike凸起的出现[12],由于人脸一般来说都是鼻尖具有最大深度,首先进行鼻尖检测,通过上文给出的算法重构鼻尖,然后依次进行嘴唇重构和眼睛重构,最终进行降噪、去spike操作得到如图7所示的个性化三维人脸模型。
图6三维人脸自动建模系统界面示意图图7三维人脸自动建模系统得到的最终人脸三维模型
本文研究了基于真实照片的三维模型生成方法及其在影视动画制作领域的应用情况,依次设计了人脸核心特征点检测与标定算法、一般人脸特征提取算法、三维人脸建模设计算法、后期真实感构建算法等,在此基础上,在vs2008环境下采用OpenGL三维开源插件接口开发了一款三维人脸自动建模系统并对系统的性能进行了实际测试。实际测试表明,基于真实照片的三维模型生成方法建模速度快、信息需求量较小、建模精度较高,重构出的人脸三维模型具有较强的真实感,可以较好满足该技术在影视动画制作领域的应用需求,具有一定的实际推广价值。