发明内容
本发明提供了一种图像中人脸胖瘦的调整方法,该调整方法基于原始图像进行,既能保持面部细节特征又能对图像中的人脸进行胖瘦调整。
一种图像中人脸胖瘦的调整方法,包括以下步骤:
(1)建立三维人脸模型;
(2)在步骤(1)建立的三维人脸模型上获取人脸的54个特征点;
(3)根据人脸特征点软组织厚度关于年龄和体重的线性回归方程以及用户输入的胖瘦调整参数对步骤(2)获取的54个特征点进行位置调整;
(4)采用拉普拉斯变形算法,将步骤(3)得到的位置调整后的54个特征点作为约束点集合,与三维人脸模型中的人脸顶点建立满秩线性系统,进行线性方程组求解,得到调整后的三维人脸模型;
(5)对原始图像进行三角网格参数化;
(6)采用步骤(4)获得的调整后的三维人脸模型驱动原始图像三角网格顶点位置的变化,经过纹理映射得到调整后的图像。
其中,步骤(1)可采用激光扫描仪或深度相机等硬件装置获取人脸的几何以及纹理数据,直接获取三维人脸模型;或者采用自适应方法,通过对标准模型进行调整,从单张或多张图像中重建三维人脸模型,参见V.Blanz,T.Vetter:A morphable model for the synthesis of3D faces[C].In SIGGRAPHProceedings,Orlando,FL,USA,1999,pp.71-78。
步骤(2)中,在步骤(1)建立的三维人脸模型上获取人脸的54个特征点的具体方法如下:
导入三维人脸模型之后,为模型建立一个左手坐标系,其中,x坐标轴方向向右,y坐标轴方向向上,之后,根据导入三维人脸模型的不同,采取两种不同的人脸特征点选取方法。
如果是采用激光扫描仪或深度相机等硬件装置直接获取的三维人脸模型,则利用人机交互技术,手工地在导入的三维人脸模型上指定54个特征点。其中52个特征点的空间坐标位置分布可参见S.D.Greef,P.Claes,D.Vandermeulen,W.Mollemans,P.Suetens,G.Willems:Large-scale in-vivoCaucasian facial soft tissue thickness database for craniofacial reconstruction[J].Forensic science international,2006,159(1):126。为了防止眉骨部位有失真,本发明增加了位于人脸眉骨处的特征点53和特征点54,其软组织厚度同指定的特征点11相近。
如果是采用自适应方法由图像重建的三维人脸模型,则可以根据预先在标准模型上选定的特征点索引直接获得人脸的54个特征点。
步骤(3)中,根据人脸特征点软组织厚度关于年龄和体重的线性回归方程以及用户输入的胖瘦调整参数对步骤(2)获取的54个特征点进行位置调整的具体方法如下:
对人脸软组织统计数据进行处理,可推导出一个人脸特征点软组织厚度关于年龄和体重的线性回归方程:
Y=b0+b1×age+b2×BMI
其中,Y为特征点软组织的厚度,age为年龄参数,BMI为体重参数,方程的系数b0,b1,b2对于每个特征点有对应的值。
由此可以得到当BMI指数增加或者减少时,每个特征点在法向方向的变化程度。具体实现中,根据经验值我们设置为每次调整一个单位BMI指数,每个特征点软组织的厚度变化为对应的指数除以100。
在现实中,由于人脸头颅的限制,人是不可能无限制瘦下去的,因此我们对人脸变瘦的最大程度做了如下猜测:
maxDegree=(b0+b1×agepeak+b2×BMIpeak)/b2
其中,maxDegree表示变瘦的最大程度,agepeak及BMIpeak分别为年龄参数及体重参数所能取到的最大值。
当人脸达到特征点软组织厚度最厚时,我们认为这是人脸变化程度的极值,这个假设基于我们所使用的数据是在一定范围采集的,因此应该对实际人脸的变化范围做了限定。
所述的步骤(4)的具体过程为:
首先,求出原始三维人脸模型的三角网格的拉普拉斯算子,并建立具有微分坐标的矩阵方程,这样,将三维人脸的顶点从笛卡尔坐标系变换到拉普拉斯坐标系;
之后,将经步骤(3)位置调整后的三维人脸上的54个特征点作为约束点集合,与三维人脸模型中的人脸顶点建立满秩线性系统,调整后的54个特征点的位置将被添加到拉普拉斯算子矩阵的额外行中;
最后,采用最小二乘法来进行满秩线性系统求解,可采用SUPERLU来加速求解过程,得到编辑后网格的笛卡尔坐标,即得到调整后的三维人脸模型;
步骤(5),对原始图像进行三角网格参数化具体过程为:
首先,对原始图像使用Canny算子识别出轮廓线,使用不同的阈值对人脸和背景部分分别进行采样,在较为一致、特征较少的区域,也增加一些辅助点作为提取出的特征点,保证特征点的分布较为均匀,由于人的脸部较为精细,可对人脸部分取点较密集,得到图像特征点;
然后,使用graph cut算法识别出人脸轮廓线,在轮廓线上均匀采样得到人脸轮廓特征点;
最后,根据得到的图像特征点和人脸轮廓特征点,对图像采用约束Delaunay三角化算法,生成一个基于特征点的三角网格。
步骤(6)的具体步骤如下:
(6.1)将原始图像中位于人脸内部及轮廓线上的特征点对应到由原始图像生成的三维人脸模型上;
(6.2)由调整之后的三维人脸模型得到对应特征点调整后的位置,按照原始图像中人脸的角度,姿势和大小进行正交投影,得到调整后的特征点在原始图像中的位置;
(6.3)根据调整前后特征点的位置,构建背景重定向的能量方程,并求解;
(6.4)根据求解结果,调整原始图像三角网格顶点位置;
(6.5)经过纹理映射,得到调整后的图像。
步骤(6)将调整后的三维人脸模型驱动图像中人脸及背景进行调整转化为一个求新图像的优化问题。
新图像不仅与原始图像的拓扑结构相同,而且新图像脸部以及边界要刚性地满足新调整后的人脸。为了减少全局失真,网格参数化方法通常采取基于扭曲(stretch-based)的方法,参见K.Zhou,J.Snyder,B.Guo,andH.-Y.Shum.Iso-charts:stretchdriven mesh parameterization using spectralanalysis[J].In ACM Symp.Geometry Processing,2004,pp.45-54,此方法基于以下的观察:从离散计算几何的角度来看,一个网格可以由它所有的边长长度决定。因此,我们可以通过求解一个基于拉伸的优化系统来获取目标新图像。
新图像需要满足图像边缘约束,即原始图像的边界应该保持不变。因此,将四个边界的特征点限制在他们所在的边界上,图像上下左右边缘的特征点可以左右移动,但是不能上下移动,即y坐标固定,x可变;同理,左右边缘的特征点可以上下移动,但是不能左右移动,即x坐标固定,y可变,此外,图像的四个边界点保持不变。
新图像也需要满足脸部特征点约束,即人脸经过胖瘦调整之后,在图像中所占的比例会发生变化。如变胖之后,在图像中所占的比例增大,反之,则减小。在本方法中需要保证目标图像中人脸以及轮廓的特征点满足求出的新位置。
最后,新图像还需要满足背景网格边长约束。既然一个边长是由边长的两个顶点所决定的,那么可以通过确定这两个顶点的变化趋势来求得理想边长的长度,也就是说,边长的变化尺度是同它顶点的变化一致的。这里我们把边长的尺度变化方向分为x方向与y方向。由于脸部的变胖或变瘦会对背景网格变长进行相应的挤压或者拉伸,故可以计算得到理想边长长度,构建能量方程。
这里我们使用多维度的牛顿方法来最小化上述能量方程。每次迭代的时候使用multi-grid solver来把约束带入求解,得到特征点在调整后图像中的位置,最后,经过纹理映射得到调整后的图像。multi-grid solver方法参见W.Press,S.Teukolsky,W.Vetterling,and B.Flannery.Numerical recipes inC:The art of scientific computing[M].Cambridge University Press,1992。
与现有技术相比,本发明具有以下有益效果:
(1)本发明采用保细节特征的拉普拉斯变形技术,调整人脸胖瘦的同时保留住了人脸上的大部分细节特征信息,在此基础上还将修改之后的三维人脸模型轮廓的变化映射到原始图像上,并对原始图像的背景进行三角网格参数化,通过求解能量方程,调整背景三角网格的位置,使变化后的背景和调整胖瘦之后的人脸融为一体;
(2)采用本发明提出的调整方法可以快速地建立一个具有真实感的个性化人脸模型,能够得到一个调整过胖瘦的具有原始模型面部特征的人脸,并将调整后的人脸模型自然的嵌入到原图像中,该调整方法算法明确,界面友好,结果鲁棒,可用于计算机动画,医学领域,刑事侦探,数字娱乐等领域。
具体实施方式
下面结合附图及具体实施例对本发明进行详细说明。
如图1所示,本发明的图像中人脸胖瘦的调整方法包括以下步骤:
(1)建立三维人脸模型
三维人脸模型的建立可以采用激光扫描仪、深度相机等硬件装置获取人脸的几何以及纹理数据,直接获取三维人脸模型;或者从单张或多张图像中重建三维人脸模型使用Blanz和Vetter提出的自适应方法,通过对标准模型进行调整,从图像中重建三维人脸模型。
(2)在步骤(1)建立的三维人脸模型上获取人脸的54个特征点
对于通过激光扫描仪、深度相机等硬件装置获取得到的三维人脸模型,将待处理的三维人脸模型放于指定的空间坐标系中,并交互地对三维人脸模型的位置进行稍微调整,使z轴正方向与人脸的正面方向一致,y轴正方向与人脸的头顶方向一致。
利用人机交互技术,手工地在三维人脸模型上指定54个特征点,其中,正面人脸特征点的分布可见图2,侧脸特征点的分布可见图3。
54个特征点的位置分布如下:
第一特征点位于额头正中人脸中线上;
第二特征点位于左右眼眶上缘与人脸中线的交点;
第三特征点位于左右两边眉毛的中间;
第四特征点位于鼻子软骨上缘;
第五特征点位于鼻子的中点;
第六特征点位于上嘴唇的中点;
第七特征点位于下嘴唇的中点;
第八特征点位于下巴凹陷处正中点;
第九特征点位于侧脸下巴最突出点;
第十特征点位于下巴下端边缘;
第十一、三十二特征点分别位于右左瞳孔正上方,额头上侧;
第十二、三十三特征点分别位于右左瞳孔正上方眉毛上边缘;
第十三、三十四特征点分别位于右左额骨,上颌骨和眼眶上泪骨的连接处;
第十四、三十五特征点分别位于右左鼻梁边缘,垂直方向正对眼角內缘;
第十五、三十六特征点分别位于右左瞳孔正下方眼眶下缘;
第十六、三十七特征点分别位于右左瞳孔正下方颧骨下缘;
第十七、三十八特征点分别位于右左鼻子下端侧面的边缘点;
第十八、三十九特征点分别位于接近人中的右左突起上;
第十九、四十特征点分别位于右左口角边缘与人中平行;
第二十、四十一特征点分别位于垂直于右左口角边缘,下巴嘴唇褶皱上;
第二十一、四十二特征点分别位于右左侧面人脸下巴最突出处;
第二十二、四十三特征点分别位于右左侧面眼眶边缘,平行于眼眶中心;
第二十三、四十四特征点分别位于右左颧弓根部,耳朵之前;
第二十四、四十五特征点分别位于右左正脸侧缘颧骨最突出处;
第二十五、四十六特征点分别位于右左颧骨突起正中间,眼眶后缘;
第二十六、四十七特征点分别位于右左脸颊区域与鼻子底部齐平;
第二十七、四十八特征点分别位于右左咬肌正中;
第二十八、四十九特征点分别位于右左咬肌边缘,垂直于嘴角;
第二十九、五十特征点分别位于右左第二臼齿之下;
第三十、五十一特征点分别位于右左下颚骨转角处;
第三十一、五十二特征点分别位于右左下颚骨下缘,垂直方向上和第二臼齿对齐;
第五十三、五十四特征点分别位于右左太阳穴。
对于由图像重建的三维人脸模型,则根据预先在标准模型上选定的特征点索引直接导入。
(3)根据人脸特征点软组织厚度关于年龄和体重的线性回归方程以及用户输入的胖瘦调整参数对步骤(2)获取的54个特征点进行位置调整
根据年龄跟体重对人脸软组织厚度的相关统计数据进行了处理,推导出一个人脸特征点软组织厚度关于年龄和体重的线性回归方程:
Y=b0+b1×age+b2×BMI
其中,Y为特征点软组织的厚度,age为年龄参数,BMI为体重参数。方程的系数b0,b1,b2对于每个特征点有对应的值,具体见下表:
表1b0、b1、b2对于每个特征点的对应值
*p<0.05;**p<0.01;RMSE为均方根误差
可以得到当BMI指数增加或者减少时,每个特征点在法向方向的变化程度。具体实现中,根据经验值我们设置为每次调整一个单位BMI指数,每个特征点软组织厚度的变化为对应的BMI指数除以100。
在现实中,由于人脸头颅的限制,人是不可能无限制瘦下去的,因此我们对人脸变瘦的最大程度做了如下猜测:
maxDegree=(b0+b1×agepeak+b2×BMIpeak)/b2
其中,maxDegree表示变瘦的最大程度,agepeak及BMIpeak分别为年龄参数及体重参数所能取到的最大值。
当人脸达到特征点软组织厚度最厚的程度时,我们认为这是人脸变化程度的极值。
(4)采用拉普拉斯变形算法,将步骤(3)得到的位置调整后的54个特征点作为约束点集合,与三维人脸模型中的人脸顶点建立满秩线性系统,进行线性方程组求解,得到调整后的三维人脸模型
设M=(V,E,F)是输入的三角网格模型,其中,V表示顶点集合,E表示边集合,F表示所有面的集合。
设顶点的笛卡尔坐标为:vi=(xi,yi,zi)。定义vi的微分坐标,即拉普拉斯坐标为vi的绝对坐标与其一环领域质心点的差,表示为:
其中,δi表示顶点vi的微分坐标,N(i)={j|(i,j)∈E}即顶点vj表示与顶点vi相邻的顶点(存在边相连),且di=|N(i)|是顶点i邻居的个数,即顶点i的度。
令A为网格的邻接矩阵,
令D为其对角矩阵且Dii=di,其中Dii表示矩阵对角线上第i个元素,di=|N(i)|是顶点i邻居的个数。则可以将从绝对坐标(笛卡尔坐标)到相对坐标(微分坐标)的向量变换用矩阵表示为(假设有n个点):
L=I-D-1A.
其中,I是单位矩阵,D=diag(d1,d2,...,dn)为对角矩阵。
将L矩阵转化为对称矩阵Ls:
Ls=DL=D-A
那么Ls可以表示为:
即Lsx=Dδ(x),Lsy=Dδ(y),Lsz=Dδ(z)。其中,X是包含V中所有顶点x绝对坐标分量的一个n维向量,y、z同此。δ(x),δ(y),δ(z)表示包含V中所有顶点x微分坐标分量的一个n维向量,δ(y),δ(z)同此。
在空间上,设集合C为位置已知的顶点的索引值集合(即选择好的特征点),由于顶点的排序顺序不影响结果,故不妨假设集合C={1,2,...,m},这样就得到了|C|个附加约束点,c1,c2,...,cm表示对应顶点变化后的绝对坐标。
则可以得到线性系统如下:
其中m表示集合C中元素的数目,w为顶点的权值系数,Im×m表示m行m列的单位矩阵,c1∶m为将c1,c2,...,cm排列而成的列向量。
此时整个系统是一个超定的线性方程组,根据最小二乘的方法进行求解。此线性系统仍然有唯一解:
其中xk表示序号为k的顶点的x坐标,ck表示序号为k的顶点的变化后绝对坐标。这个最小二乘解析解可以用矩阵来表示:
其中b=(δ,wc1,...,wcm)T是整体线性系统等式右边的分量,其中w为顶点的权值系数。
上式可变换为:
设则M是稀疏且正定的。这里可以乔姆斯基方法来分解M:
M=RTR
式中R是一个上三角稀疏矩阵。那么,线性系统的解ξ可写成:
Rx=ξ
由此即可求解出网格x的坐标数据(y,z的值可以用相类似的方法求得)。
(5)对原始图像进行三角网格参数化
对图像使用Canny算子识别出轮廓线:
对背景部分,使用一定的阈值对Canny算子检测出来的边缘进行采样,在较为一致、特征较少的区域,也增加一些辅助点作为提取出的特征点;对部分特征点距离较近的情况进行特征点的合并,保证特征点在背景上的分布较为均匀,得到一部分特征点。
对人脸部分,根据Canny算子识别出轮廓线结果,与前述对背景部分提取特征点方法相似,但由于人脸部较为精细,取点较密,可以较为精细的保持脸部特征。
由于人脸胖瘦变化在轮廓线上的变化较为明显,故使用graph cut算法识别出人脸轮廓线,均匀采样得到人脸轮廓特征点,以此更加精确的表示人脸的变化。
根据这些特征点,对图像采用约束Delaunay三角化算法,生成一个基于特征点的三角网格。
(6)采用步骤(4)获得的调整后的三维人脸模型驱动原始图像三角网格顶点位置的变化,经过纹理映射得到调整后的图像
为了更清楚地阐述,我们定义一些网格的符号。设Mt是要求解的目标网格。
{Pi=(xi,yi)i=1,2,…,n}表示原始网格Mc的顶点,{Qi=(xi,yi)i=1,2,…,n}表示目标网格的顶点。因为原始网格和目标网格的拓扑结构相同,因此原始网格的点Pi和Qi一一对应即经过对Pi位置的调整得到Qi,原始网格的边长e(Pi,Pj)同目标网格的边长e(Qi,Qj)是一一对应的,ΔP=Δ(Pi,Pj,Pk)和ΔQ=Δ(Qi,Qj,Qk)分别表示Me和Mt的三角形面片也是一一对应。
由于人脸胖瘦调整之后,背景需要进行相应的变化,需要保持背景的图像视觉特征,尽量避免失真。同时,脸部以及边界要刚性地满足新调整后的人脸。
结合网格参数化,定义约束因子来求解此问题。约束因子包括图像的上下左右边缘,脸部和边界变化以及三角形网格的边长。加上给定的原始图像的所有顶点信息,我们将重定向问题转化为一个求新图像的优化问题。新图像不仅与原始图像的拓扑结构相同,而且满足上述目标。为了减少全局失真,网格参数化方法通常采取基于扭曲(stretch-based)的方法。
对于约束条件可以分为两大类,硬约束和软约束。
硬约束包括图像边缘约束和脸部特征点约束。
原始图像的边界应该保持不变,因此将四个边界的特征点限制在他们所在的边界上。图像上下左右边缘的特征点可以左右移动,但是不能上下移动,即y坐标固定,x可变。同理,左右边缘的特征点可以上下移动,但是不能左右移动,即x坐标固定,y可变。此外,图像的四个边界点保持不变。
设目标图像的边界上下左右特征点分别是: 和相应的,原始图像的上下边界的特征点y坐标为YU和YB,左右边界的特征点x坐标为XL和XR。则可以将上述约束表达为下面的式子:
其中FB表示图像边界限制,vU,i表示图像上边界上特征点的y坐标,vB,i表示图像下边界上特征点的y坐标,uL,i表示图像左边界上特征点的x坐标,uR,i表示图像右边界上特征点的x坐标。
nU表示图像上边界上特征点总数,nB表示图像下边界上特征点的总数,nL表示图像左边界上特征点总数,nR表示图像右边界上特征点总数。
人脸经过胖瘦调整之后,在图像中所占的比例会发生变化。如果变胖之后,在图像中所占的比例为增大,反之,则为减小。因此需要有一个硬约束施加到人脸以及轮廓的特征点上。设(vi,ui)是目标图像中人脸与边界的特征点,(Xi,Yi)是三维人脸经过拉普拉斯变换之后投影到二维的坐标。上述的约束可以表达为以下式子:
其中Fc表示人脸边界限制,nc表示人脸边界上特征点数目。
通过软约束来改变背景网格。
能量方程的主题部分是三角边长约束,即用三角形的边长约束保持整个网格的特征一致。目标图像是由它的边长的长度定义的。这些理想边长长度将作为参数化过程中的目标扭曲程度。
本方法中把边长的尺度变化方向分为x方向与y方向。为了确定x方向上的尺度变化,整个网格将被平行分割为两种区域。一种区域是平行方向上都与人脸没有相交,另外一种则是相交。这样对每个网格顶点计算一个理想变化尺度。通过对一个边长的两个顶点的变化尺度取均值,我们可以得到该边长的x方向上的平均变化尺度。在与人脸不相交的区域,l只需要用原始图像的边长代入即可。如果在与人脸相交的区域,则需要计算人脸的变化部分对其所在扫描线上特征点的影响。这里记为
其中表示沿着扫描线x=xi方向上网格变化的比例,ly表示图像在y方向上的长度,扫描线xi由于部分在人脸区域,部分在背景区域而被分成很多段,其中位于人脸区域内共有n段,其中第j段在原人脸区域中的长度为lyj,人脸区域变化后长度变为l′yj。
其中表示沿着扫描线y=yi方向上网格变化的比例,lx表示图像在x方向上的长度,扫描线yi由于部分在人脸区域,部分在背景区域而被分成很多段,其中位于人脸区域内共有n段,其中第j段在原人脸区域中的长度为lxj,人脸区域变化后长度变为l′xj。
对于由点Pi,Pj组成的边用e(PiPj)表示,在变化后网格中相对应的边表示为e(QiQj),设Pi,Pj点坐标分别为(xi,yi),(xj,yj),则
其中sxij表示边e(QiQj)在x方向上的放缩比例,syij表示边e(QiQj)在y方向上的放缩比例,则边e(PiPj)在调整后的理想长度为:
其中,lij表示边e(PiPj)在调整后的理想长度即lxij表示边e(PiPj)在x方向上的投影,lyij表示边e(PiPj)在y方向上的投影。
边长约束的整体能量方程可以表达为:
其中,El表示优化能量函数,Qi,Qj表示边e(QiQj)的端点。
解上述能量方程还需要考虑一点。当网格的点比较密集,直接解上述能量方程可能会导致邻接三角形的翻转。因此我们对能量方程进行了修改,利用一个符号函数惩罚翻转现象。
假设目标图像上的三角形ΔQl=Δ(QiQk1Qj),ΔQ2=Δ(QiQk2Qj)是两个相邻接的三角形,它们的共同边长是e(QiQj)。对应的原始图像上的三角形为ΔP1=Δ(PiPk1Pj)和ΔP2=Δ(PiPk2Pj)。那么对于原始图像与目标图像中的每一对顶点对应三角形内的顶点方向应该相等。这里定义符号函数为:
其中,wij表示符号函数的值, 分别表示三角形ΔP1=Δ(PiPk1Pj)和ΔP2=Δ(PiPk2Pj)及其对应三角形ΔQ1=Δ(QiQk1Qj),ΔQ2=Δ(QiQk2Qj)顶点组成的向量。
则修改之后的能量方程为:
其中,El表示优化的能量函数,系数wij用于惩罚翻转的三角形。如果三角形进行了翻转,则wij的值为-1,否则,则为+1。
最后,考虑所有的约束,我们可以得到一个完整的能量方程:
其中,El是边长约束,属于软约束。FB是图像边界约束,FC是人脸轮廓约束,FB及FC为硬约束。这里我们使用多维度的牛顿方法来最小化上述能量方程。每次迭代的时候使用multi-grid solver来把硬约束带入求解。
最后根据新的特征点进行标准的纹理映射算法,得到调整之后的结果图像。
图4是使用本发明对图像中人脸胖瘦调整的示例图,其中,图4左是调整程度为-2(变瘦)的结果,图4中是原始图像,图4右是调整程度为+2(变胖)的结果。