APP下载

基于改进肌肉模型的三维人脸自适应参数配置

2022-07-12

计算机应用与软件 2022年6期
关键词:线性顶点人脸

周 悦 刘 凯

(四川大学电气工程学院 四川 成都 610065)

0 引 言

随着计算机技术的发展,逼真的人体建模与动作模拟在动画、游戏、教育、医学研究等领域[1-2]有了普遍的应用。在人体行为模拟中,由于真实人脸表情复杂多变,是情感表达的重要载体,三维表情模拟一直是计算机图形学领域内研究的热门与难点。

自20世纪70年代初Parke[3]开创式地设计出第一个可以模拟表情的人脸模型以来,国内外专家学者在三维表情合成领域做了大量研究工作,目前存在的方法大致可分为以下四类:(1) 基于关键帧插值的方法[4],通过对表情变化时顶点移动轨迹的计算,只需定义脸部少数关键帧,即可产生一段简单表情动画,但产生的表情真实感较差;(2) 基于参数的方法[5-6],通过对人脸表面参数的控制实现表情合成,但控制点多,参数设置复杂;(3) 基于生理模型的方法[7],利用解剖学知识,对真实人脸的骨骼、肌肉、皮肤进行建模,模仿真实表情的形变。这类方法合成的人脸逼真表情丰富,但模型复杂,在人脸上搭建困难;(4) 基于伪肌肉模型变形的方法[8-9],利用几何形变模拟人脸肌肉运动,此类方法相比肌肉模型结构简单,但缺少对表情细节的模拟。

本文对传统肌肉模型缺点作出改进,使仿真的表情更具有真实感,并提出一种自适应肌肉参数配置方法,快速获取特定人脸上各个肌肉的参数。

1 人脸肌肉模型

1.1 三维人脸数据

三维人脸模型是表情合成的基础,经过许多研究学者的探索,目前三维人脸模型的来源通常有以下几种:基于三维建模软件的方法,最常见的软件有Maya、3dmax、Rhino等;基于二维照片特征对一般人脸模型形变的方法[10-11];基于激光扫描真实人脸的点云重建方法[12-13]。

在这些方法中,因为二维图像获取的门槛低、速度快,本文便基于单幅正面人脸图片对平均人脸模型变形获得特定三维人脸模型。

对于一个三维人脸模型,可表示为形状向量和纹理向量的组合。设平均人脸模型的形状向量S和纹理向量T的定义如下:

S=(x1,y1,z1,x2,y2,z2,…,xn,yn,zn)

(1)

T=(R1,G1,B1,R2,G2,B2,…,Rn,Gn,Bn)

(2)

式中:(xi,yi,zi,)是三维网格模型中第i个顶点的三维坐标;(Ri,Gi,Bi,)是第i个顶点的纹理值;n是网格模型中的顶点总数。用主成分分析法对形状和纹理向量进行统计剖析,那么特定人脸模型的形状S′和纹理T′可表示为:

S′=S+λα

(3)

T′=T+τβ

(4)

式中:λ和τ分别是前m个形状和纹理特征向量组成的特征矩阵;α和β分别是形状和纹理系数向量。

因为人脸模型的形状复杂,仅考虑刚性形变很难从模板人脸转化为特定人脸,在二维人脸图像上选取11个特征点作为模型非刚性形变的依据,具体特征点选择见图1。

(a) 模板人脸 (b) 输入人脸图1 二维图像人脸特征点

1.2 肌肉模型

抽象肌肉模型是根据人体解剖学和肌肉力学知识,通过模仿肌肉的收缩或拉伸牵扯网格模型发生形变,模拟出人脸表情。Waters[14]基于解剖模型,在人脸上划分出18个肌肉群组作为表情模拟的肌肉向量,并将常用肌肉模型定义为两大类:一种是括约肌,另一种是线性肌。括约肌控制实现嘴唇部分的变形,其影响范围可用椭球体表示。线性肌的数学模型是一个向量,向量的两端分别代表肌肉附着在相应骨骼上的固定端点和肌肉与皮肤组织相连的移动端点。在传统肌肉模型中,大部分人脸肌肉的运动都是通过线性肌模拟实现的。

(5)

(6)

图2 线性肌模型[14]

上述数学模型较好地模拟出了人脸肌肉对于皮肤的牵扯作用,在学术研究、工程实践中均有了广泛的使用。但在实际操作中发现这种线性肌模型存在不足之处:当受力系数较大时,形变后的网格会堆积在肌肉固定端,出现尖锐突起现象;而当受力系数过大时,网格拓扑结构被破坏,人脸模型出现破损,如图3所示。

(a) 受力系数为0 (b) 受力系数为3

(c) 受力系数为5 (d) 受力系数为10图3 受力系数分别为0、3、5、10时线性肌变形效果

1.3 斥力弹簧

由人体肌肉力学与实际现象可知,肌肉收缩或拉伸造成的皮肤形变在靠近肌肉起点处逐渐缓和,最终在固定点处平滑。为了修复尖锐突起问题,使合成的表情更接近于真实,本节对线性肌模型提出改进。

三角面片受到来自肌肉固定端的拉力发生形变,被控点P受到的拉力为fmp,但同时,根据生理学知识,肌肉是具有弹性的弹簧模型,皮肤组织在被肌肉牵引的同时,也会承受因肌肉收缩带来的斥力,基于此原理,本文在线性肌模型靠近骨节点处加入斥力弹簧模型,对网格被牵引产生的位移进行修正。

设弹簧的起点为固定端V1,作用半径为R,位于作用范围内的一网格顶点在松弛状态的坐标为Pi,在受到线性肌牵引力移动后的坐标为Pj,那它受到弹簧模型的斥力为:

(7)

式中:Δp=Pj-Pi;k为劲度系数。对于肌肉弹簧模型作用范围内每一点,劲度系数并不是一个常量,它与被控点所位于弹簧中的初始位置相关,当网格越接近肌肉固定端,形变改变就越困难,即劲度系数越大。因此,用非线性函数(式(8))对劲度系数进行调节:

(8)

式中:α是非线性因子;k0为初始劲度系数。

1.4 边约束

在近固定端加入斥力弹簧模型后能解决尖锐突起问题,使网格形变在近固定端处变得圆润平滑,因为斥力弹簧劲度系数的非线性特性,对于不同的网格产生的斥力不同,当弹簧区域内的网格形变被斥力抵消一部分后,位移修正程度小或不受到斥力修正的网格会重叠甚至穿过修正程度大的网格,造成网格拓扑结构被破坏,这也是传统线性肌模型需要解决的第二个问题。图4是三角网格在外力作用下发生形变的示意图,三角网格拓扑结构破坏的原因是因为网格顶点与其对边重叠甚至越过了对边,如图4中(c)和(d)两种情况。

(a) (b)

(c) (d)图4 三角网格受力形变分析

为了解决该问题,参考皮肤弹性模型[15],对网格模型引入边约束。边约束的思想是在三角网格的顶点与其所在三角面片的对边之间垂线相连建立质点弹簧模型,其作用使得节点始终不能越过对边网格。

(9)

式中:di为初始状态下弹簧pei的长度;β是应力强度因子;δ是应力尺度因子。

图5 边约束模型

在加入两种改进后的人脸模型中肌肉作用范围内网格顶点除了受到来自线性肌的拉力fmp,还受到斥力弹簧的斥力fR以及周围网格的边约束力fers的合力,总受力变为:

(10)

2 自适应肌肉参数

若要实现肌肉模型控制人脸实现表情动画,需要给三维人脸模型装配上相应肌肉模型的固定端、移动端、起始半径、终止半径和控制范围等参数。在以往研究中很少有对特定人脸相应肌肉参数特定化的研究,多为手动调试实现。为了减少手动调试时间,快速实现肌肉参数特定化,本节基于一般人脸与特定人脸的特征映射关系,提出一种自适应肌肉参数获取方法。

人脸主要由脸形、眼睛、鼻子、嘴唇等元素组成,一般人脸模型可以看作一张具有所有人脸基本元素但不具备任何明显特征的人脸,而根据人脸照片特征点对一般人脸模型形变生成的具有个性特征的人脸模型便是特定人脸模型。一般人脸模型与形变生成的特定人脸模型均具有MPEG- 4定义的人脸通用特征。

参考Waters肌肉模型,在人脸模型上设置18个线性肌模型用来合成表情,具体分布情况见图6(a),因为特定人脸模型的形变程度并不是整体均衡分布,通过分析线性肌与MPEG- 4定义的人脸特征点的分布(图6(b)),将人脸模型划为6个区块(左半张脸划分见图6(c)),划分时尽可能让功能相同的肌肉模型分布在同一区块内,每个区块内肌肉模型的参数便取决于该区块的局部形状分析。

(a) (b) (c)图6 肌肉模型分布与区块划分

将一般人脸模型的每个肌肉向量的所有参数设为pk,特定人脸模型对应肌肉参数为qk,通过分析肌肉向量与人脸特征点的关系和所在区块的形状特征,得到参数的映射关系使pk→qk。

肌肉模型参数中最为重要的便是肌肉端点位置,它是能拟合真实感人脸表情的基础。Waters设置肌肉模型时,参考了真实人脸表情肌分布,由人脸解剖学知识可知[16],肌肉通过收缩牵扯五官和皮肤位置形状改变产生表情,对于不同的人脸均有着相同的面部表情肌结构,且表情肌的分布位置相对其作用区域的五官特征的位置是大致不变的,如此才可使长相各异的人们产生同样的表情。但每个区块内可能有上千个顶点,直接从区块内根据特征点相对位置关系搜寻符合要求的顶点耗时长且误差大,为了缩小查找范围,再对区块进行细分。对于人脸划分后的区块Si(i=1,2,3,…,6),其宽度w、高度h和深度d分别是所在区块内顶点坐标在X轴、Y轴和Z轴上最大与最小的差值。因为三维人脸模型是一个由曲面构成的模型,对于一般人脸模型和特定人脸模型,都沿着X轴和Y轴方向分别将对应区块等分为M和N份。对于人脸区块中任意网格顶点p,它对应的单元块编号为Vij:

(11)

式中:cx=(Xmax-Xmin)/M;cy=(Ymax-Ymin)/N。

对于肌肉向量的两个端点,可以通过与其相近的三个人脸特征点的相对位置关系获得。设一般人脸上该肌肉端点V和对应的三个相近人脸特征点为A、B和C,特定人脸上对应的肌肉端点为V′,对应特征点为A′、B′和C′。端点V所在的单元块编号为Vmn,则在特定人脸该区块内同样位置编号的单元块内,搜索满足以下关系的顶点坐标:

(12)

式中:D(,)是两点间在曲面上的测地线距离;δ是设置的阈值。若单元块内满足位置关系的顶点不止一个,采用求和均值的方式选定。

(13)

3 实验结果与分析

本文实验研究所用特定人脸模型由二维图片重建获得,共获取45个不同正脸样本数据,一般人脸模型使用人脸制作软件FaceGen Modeller导出,由12 108个三角面片、36 324个顶点组成。实验采用Intel® CoreTMi7- 8500U 2.0 GHz、16 GB内存的PC平台。

第1节中针对Waters传统肌肉模型的缺点提出两种改进,一是加入斥力弹簧模型,二是在网格模型中加入边约束。为了验证本文方法的效果,分别在二维肌肉模型上进行仿真,并与当前方法进行对比。

图7是同一线性肌模型在相同较大受力系数情况下二维网格形变效果。文献[17]通过设置形变终止半径来解决尖锐突出的问题。可明显看出,本文方法与文献[17]均能解决近固定端的尖锐突出,且均存在网格拓扑结构被破坏的问题。但对比可见,文献[17]改善后的网格形变在终止半径处戛然而止,形变过渡突兀,最终形变处不像真实表情皮肤形变一样圆滑。而本文所提出的斥力弹簧方法改善后的网格形变效果过渡自然,在近固定端逐渐变得圆润平滑。

(a) 原始线性肌模型

(b) 加入文献[17]方法

(c) 加入本文斥力弹簧方法图7 尖锐突起问题改善效果

图8是同一线性肌模型在相同过大受力系数情况下二维网格拓扑结构崩溃效果。文献[18]提出对网格产生的位移进行约束改善拓扑结构被破坏的问题。图8中改善前后效果对比证明了文献[18]方法与本文边约束方法均能解决网格因受力过大而超出肌肉模型控制区域的问题,但文献[18]方法改善后在肌肉控制区域内部网格仍然存在顶点与对边重叠的现象,而本文所提出的边约束方法改善后肌肉控制区域内部网格间也无重叠现象。

(a) 原始线性肌模型

(b) 加入文献[18]方法

(c) 加入本文边约束方法图8 网格拓扑结构破坏问题改善效果

图9是在三维人脸模型上以左颧大肌为参考肌肉加入本文所提出的两种方法改进前后对比结果,上图为改进前,下图为改进后。可以看出,改进后的线性肌模型能明显避免网格拓扑被破坏,并缓和了固定端处尖锐突出现象。

图9 改进前后三维人脸肌肉变形效果

图10 人脸建模和肌肉端点定位

表1 左半张脸肌肉参数误差值

经过多次测试,本文方法可以大大缩短为三维人脸配置肌肉模型的时间,能在10分钟至20分钟内完成肌肉模型参数计算和后续微调,与当前主流手动添加模型相比,效率明显提升。特定人脸模型装配上肌肉模型后,能通过调整受力系数,模拟出真实表情。

4 结 语

本文提出一种基于改进肌肉模型的自适应参数获取方法。针对传统肌肉模型的缺点,对线性肌提出两点改进,一是在肌肉模型中加入斥力弹簧模型;二是对网格进行边约束。经过实验发现改进效果好,杜绝了网格拓扑受损坏的问题。自适应肌肉参数通过特定人脸与一般人脸的映射关系获得,显著提升了为三维人脸配置肌肉模型的效率,减少了表情合成所需时间。

但是本文的研究均基于线性肌,对于控制眼睛和嘴巴开闭的括约肌模型没有研究,下一步将在人脸模型中加入括约肌,并研究其自适应参数算法。

猜你喜欢

线性顶点人脸
玻璃窗上的人脸
关于非齐次线性微分方程的一个证明
非齐次线性微分方程的常数变易法
智力考场:有趣的图片测试
线性耳饰
“领家系”可爱脸VS“高冷系”美人脸
“图形的认识”复习专题
常数变易法的理论依据
删繁就简三秋树
长得象人脸的十种动物