用于面部虚拟整形的三维人脸重建系统设计
2021-09-26嵇晓强
孙 硕,嵇晓强,刘 丹
(长春理工大学生命科学技术学院,长春 130022)
面部整容手术由于不能在术前对患者面部进行客观定量的形态学评价,极易导致手术结果的不理想甚至失败[1]。而且,整形医生仅凭专业知识与经验无法精准量化人脸数据,手术过程缺乏客观有效指导。
三维重建技术借助三维扫描设备采集数据,对采集到的三维数据进行去噪、计算机图像处理、重建等操作,重塑扫描体形态[2]。三维重建根据相机的不同,可分为单、双目重建,深度相机重建三种方式。单目重建常规上使用运动结构(structure from motion,SFM)重建算法,该算法可对多幅无序图片进行重建;双目重建利用双镜头拍摄矫正图片,根据三角测量原理恢复出环境的三维信息[3];深度相机重建主要是对采集到的深度图像通过计算机加工处理,深度图像中的像素值为物体与镜头之间的距离,对其进行坐标转换得到点云数据,处理点云数据构建三维模型。近年来,深度相机获取深度图像的技术得到了完善和进步,该方法重建精度高,已成为三维重建的主要方法[4]。
三维重建技术与被测物无接触,被广泛用于整形外科人体形态的建模。Xiao等[5]利用三维重建,对三维数据处理并制作假耳轮廓,为小耳畸形患者提供手术指导。Jung等[6]对眼部进行三维扫描并重建眼球模型对眼部疾病进行辅助治疗。然而,由于三维重建技术对硬件设备和软件算法都有较高的要求,目前中外成熟完善的重建系统还是很少。东南大学开发的虚拟颌面部整形手术软件,对CT扫描图像进行计算重构人脸模型,这种方法工程计算量大,不易操作,重建精度有待提高[7];日本大阪医学院于2017年实现了面部重建和面部整形的3D模拟实验,但是该技术重建精度低,无法满足手术要求[8]。
针对上述问题,现设计适用于面部虚拟整形的三维人脸重建系统,系统改进精配准算法增强配准效果,并在最后采用半边结构的细分算法提高模型的重建精度,从而提高整形辅助系统的性能,对于提高手术成功率,降低手术风险,具有广阔的应用前景。
1 三维面部数据采集
1.1 系统总体设计
三维人脸重建系统总体流程图如图1所示。首先利用硬件设备采集不同角度的人脸深度图像。由于深度图像中的像素值代表了该点与相机的距离,利用相机内参通过坐标转换可构建出正脸与侧脸的点云模型。接下来配准不同角度点云模型,其中粗配准采用四共面点集(4-points congruent sets,4PCS)算法实现了正脸与侧脸的点云拼接。改进了最近点迭代(iterative closest point,ICP)算法用于点云模型精配准,从而统一点云数据坐标系。配准完成后对点云表面网格化处理,采用半边结构的细分算法进一步提升模型精度,最后完成贴图得到实际的三维人脸模型。
图1 三维重建方法流程图Fig.1 Overall flow chart of 3D reconstruction
1.2 三维数据获取
三维数据的获取是系统设计的关键。近年来同步定位与建图技术(simultaneous localization and mapping,SLAM)取得了一系列突破性的发展[9],本系统深度图像的采集装置采用的是NU3000深度摄像头模组,该模组集成了专用硬件加速器和数字信号处理器(digital signal processor,DSP)微处理器,可执行SLAM等高级算法,且具有集成度高、体积小、速度快、分辨率高等优点,其具体性能如下。
(1)具有120万像素,扫描点50万,扫描误差小于0.4 mm。
(2)拥有多核深度计算机视觉(computer vision,CV)处理器,提升3D图像处理性能,对计算机视觉进行了优化。
(3)可以连接和管理3个摄像头:2个高精度结构光镜头作为立体图像深度来源,1个作为RGB传感器。
(4)含有多个照明接口,视野范围25~60 cm。
(5)同步管理各种传感器,并同时执行定位算法和映射算法,外部具有多个低功耗双倍数据速率内存(low power double data rat,LPDDR)储存单元。
(6)芯片尺寸大小仅为12 mm×10 mm,低功率、小尺寸,整体模组如图2所示。
图2 NU3000摄像头模组Fig.2 NU3000 camera module
2 点云数据处理
2.1 点云数据生成
由于点云数据可以准确地记录物体表面三维形貌、几何特性以及空间坐标信息等[10],因此系统需要将获取到的深度图像转成人脸点云数据,点云生成原理如下。
点云数据点含x、y、z3个分量,代表该点空间位置,每个空间点(x,y,z)在深度图像上有其对应像素坐标(u,v,d),其中u与v用来确定像素点在图像中的位置,d为空间点与相机之间的距离,此位置可由相机参数计算得出。其转换公式为
(1)
(2)
d=zs
(3)
式中:相机在x、y两个轴上的焦距分别为fx、fy;cx、cy分别为相机的光圈中心;s为深度图缩放因子。
(u,v,d)反推(x,y,z)的公式为
z=d/s
(4)
x=(u-cx)z/fx
(5)
y=(v-cy)z/fy
(6)
式中:fx、fy、cx、cy4个参数可构造相机内参矩阵C,其具体形式为
(7)
已知内参矩阵C,则空间位置(x,y,z)与像素坐标(u,v,d)便可简化成矩阵形式为
(8)
式(8)中:R、t参数为相机姿态;R为旋转矩阵;t为位移矢量,将R设为单位矩阵I,即所获单角度点云数据无旋转,同理,所获数据无平移则t为0;s为深度图里的数据与实际距离的比例系数,通常为1 000。
图3是将NU3 000所采集的深度图像经坐标转化得到的正脸与侧脸点云模型。
图3 人脸点云数据Fig.3 Point cloud data of face
2.2 基于KD树算法的点云数据去噪处理
成像设备受周围环境因素的影响,生成的点云数据具有一定的冗余数据,如测量时的背景信息以及噪声数据等[11]。由图3可知,点云带有明显的噪声点,点云数据不平滑且散乱。利用此点云数据。重建的人脸模型势必效果差,且不准确。因此在配准之前需进行去噪处理[12]。上述点云数据中的数据点在空间上缺少数学联系,为无序点云,常用的处理算法如平滑滤波,不适用于无序点云的去噪[13]。系统选择KD树算法(K-dimensional tree,KD-tree),可分析计算无序点云的邻域结构,构建其位置关系。该算法设置坐标方向为切分方向,通过切分点云集,数据集即被分为2个子集,重复执行上述步骤,不断切分并生成检索树。去噪过程如下。
(1)读取点云数据。
(2)构建KD-tree结构,形成邻域结构。
(3)连接点云数据集并求其中一点p的邻域,计算这些点与p的距离,求出中值dmid。
(4)设定阈值,与dmid比较,若dmid较大,则认为p点是噪声点,去除;否则,保留该点。
(5)重复步骤(3)和步骤(4),遍历全部点云数据。
(6)输出点云数据。
阈值的大小设置取决于点云数据的疏密程度,点云愈密,阈值愈小。
2.3 基于改进ICP算法的点云配准算法
点云配准在导航定位、移动测量以及三维重建邻域等均有应用[14]。点云配准的完整过程分为粗配准和精配准,粗配准是对两组相对位置未知的点云进行匹配,得到的初始转换矩阵作为精配准所需的参考值,精配准在此基础上精确计算,使点云的位姿差别最小化。传统的快速点特征直方图算法(fast point feature histograms,FPFH)在初始配准过程中需要人工多次尝试选择点云的邻域半径,无法保证效率和结果[15-16]。4PCS算法由计算机进行多次计算实验,自动选取有利条件对点云进行操作,效率更高,系统采用4PCS算法进行粗配准,公式为
(9)
(10)
式中:a、b、c、d、e为基准点云中确定共面四点基所需的坐标点;r1与r2分别为由坐标形成的向量的模的比值。利用r1与r2的放射不变性,代入到有目标点源q1和q2的待配准点云中,即可求出共面四点基交点可能出现的位置e1、e2。
图4为4PCS算法空间拓扑结构构建与匹配原理图,其具体步骤如下。
(1)在基准点云P中寻找共面四点基,图4中用B={a,b,c,d}表示。
(2)在四点基B中利用式(9)寻找比例因子r1和r2。比例因子在旋转和平移操作中具有放射不变性。
(3)利用式(10),代入比例因子寻找q1,q2∈Q中4种可能存在交点的位置。
(4)计算整个Q中存在的交点位置,ei≈ej表示寻找到的全等四点对,如图4中所示e1≈e2,可确定与B={a,b,c,d}对应的全等4点对为C={q1,q3,q4,q5}。
(5)通过B={a,b,c,d}和C={q1,q3,q4,q5}可以构造矩阵方程BX=C,通过最小二乘法即可求对应的转换矩阵X。
(6)重复上述步骤对共面四点基集合P={B1,B2,…,Bn}可得到全等四点集合D={C1,C2,…,Cn},n为全等四点集合总数。
(7)在集合D中,使用最大公共点集策略(largest common pointset,LCP)寻找最优全等四点匹配,即分别计算每个四点基与全等四点对的转换矩阵Xn,对基准点云P分别使用转换矩阵X1,X2,…,Xn与转换点云Q进行匹配,寻找效果最佳的转换矩阵,完成粗配准即可。
图5为人脸点云粗配准过程及结果,通过粗配准算法成功实现了人脸正面和侧面的点云拼接,得到了配准初始位姿。接着对拼接后的点云数据进行精配准,目的是提升旋转矩阵的精确性,从而生成精准人脸点云。
精配准的经典算法是ICP算法,近年来对ICP算法进行改良是点云配准的研究热点。例如杨正世[17]提出了一种基于全局优化和ICP结合的算法;Bae[18]通过限制点的曲率变化以及法向量间夹角,剔除错误点对,提升配准精度。
传统ICP需设计评价函数F(α),对其进行迭代计算并设定阈值,迭代结果应小于该阈值。假设存在点云X、Y(两点云间有重叠区域),令X0=X,Xk为第k次迭代的点云X的数据集,可知k≤kmax,则第k次迭代如下所示。
图4 4PCS算法空间拓扑结构构建与匹配原理Fig.4 Spatial topology construction and matching principle of 4PCS algorithm
图5 粗配准人脸点云Fig.5 Coarse registration of face point cloud
(3)进行迭代:Xk+1=αk(Xk)。
(4)如果函数F(α)满足迭代条件,F(αk-1)-F(αk)<τ,或者迭代次数已达到最大次数,即k≥kmax,迭代结束,否则继续迭代。
(5)ICP算法经k次迭代后,刚体变换α是k次迭代后的一个级联,即α*=αk,αk-1,…,α1。
系统考虑到配准速度与精度的要求,简化算法步骤,对传统ICP点对点的操作进行了改进,其原理为:寻求最小化源点云与目标点云所在平面间的距离。即将配准原则由点对点改为点对面进行,其公式为
(11)
式(11)中:T为变化矩阵;pi、qi为源点云与目标点云中的对应点;qi的法向量为ni。
点对面ICP算法考虑了点云的空间结构,减少了错误对应点对,增强了收敛速度,图6为经多次迭代实现的点云配准结果图。
图6 精配准人脸点云Fig.6 Fine registration of face point cloud
2.4 点云数据网格化
网格化算法将点云数据中的点连成面,呈现人脸表面模型,要求既不能损失人脸细节,也不能增添多余的模型结构。常见的网格化算法有克里格算法、弹性网格化算法等[19],这些算法加快了网格生成的速度,但容易丢失人脸细节。利用贪心三角法重构人脸表面,可以保证生成网格的稳定性,同时兼顾网格生成速度。该算法首先将点云数据通过法线投影转换到二维坐标平面内,然后利用空间区域增长算法,对投影面点云做三角化处理,构建投影面的拓扑连接关系[20]。投影面中的拓扑结构经反推即可重构原始点云数据面。生成网格模型如图7所示。
图7 生成网格模型Fig.7 Generation of grid model
2.5 改进的细分平滑算法
上述完成的点云数据网格化后,虽重建了物体的表面结构,但人脸表面粗糙,且模型部分区域凹凸不平,导致成像模型精度不够。为了解决上述问题,提出了一种细化平滑的方法。在循环细分算法(Loop)中采用半边结构,对三维模型进行细分平滑,改善网格化过程中错误的连接面,削减重建模型粗糙度,增强重建模型精度。该网格平滑是一个具有层次结构的过程,数据包含大量的顶点、边和平面上邻接值信息,利用半边数据结构可对数据完整,有效地进行存储。其设计思路为创建一种双向链表,对整体环的半边环进行计算,并借助双向链表可以实现返回整体环并选取另一侧环进行计算,减少一次性处理的数据量。图8为数据结构示意图。
图8 半边结构层次图Fig.8 Hierarchical graph of half edge structure
在图8中,选取实体节点作为结构的根节点,根节点利用双向链表的指针指向面、边和顶点。在该数据结构中,通过人脸模型的前驱和后继指针来访问人脸模型和退出操作,接着设置访问网格平面指针,该类指针包含两种类型,一种是经上层人脸模型访问网格平面的指针,一种是该层结构同等级的前驱访问指针。依次设置每层访问和退出指针,最后设置访问新点的指针,生成新细分点。半边结构的设计可使Loop细分的运行效率和计算精度大大增加。Loop细分是一种面分裂逼近细分模式,细分过程中产生两类新点,一类是新顶点,另一类是每条边上的细分点(新边点)。若顶点v的边邻点为v1,v2,…,vn,新顶点vv为顶点v的权值与邻点的加权和,公式为
(12)
1-nβ为v的权值,邻点权值为
(13)
新边点的几何规则为:假设内部边顶点v1、v2共享这条边的两个三角形分别为(v1,v2,v3)、(v1,v2,v4),则新边点ve为
(14)
模型经细分平滑提升精度后,对人脸进行纹理贴图,即可获取三维人脸,所获模型如图9所示。
图9 三维人脸模型Fig.9 3D face model
3 实验结果与分析
为验证上述人脸模型成像精度,系统做了大量的实验验证,并且设计了对照试验。目的是采用不同的扫描设备对同一对象进行面部三维扫描与重建,比较两者的测量精度。实验对照组选取Bellus3d面部成像系统,该系统使用两个红外激光投影仪,多个传感器,可测量50万个三维面点,生成具有多达100万个三角形的面网格,并输出全彩色3D人脸模型。目前已在一些医美整形机构得到应用,其成像结果具有一定的代表性。在PC端选择面部测量软件,软件可以导入由本文模型和经bellus3d重建而来的obj模型文件格式。模型导入后,软件首先进行人脸检测识别导入模型为人脸后,可选择基于人脸识别库自动生成特征点和基于鼠标交互式生成特征点的方式。由于人脸识别库是基于人脸模型表面凹凸等特征边缘进行特征点生成,因此生成差异较大,故采取交互式标记的方法生成特征点,考虑到现实测量中人脸模型表面凹凸带来的实际影响并结合相关医美理论,为减少人为误差,选取位置明显,并不易受形变影响的特征点进行标记,如鼻尖、鼻根、眼仁等。
对比实验过程如下。
(1)将系统重建三维人脸以obj文件的格式进行数据存储。
(2)将obj文件导入到面部测量软件中,进行人脸检测并标记面部特征点。
(3)将经Bellus3d扫描系统重建的人脸导入到上述人脸测量软件中,进行人脸检测并标记进行比较的人脸特征点。
(4)特征点标记后,测量软件对特征点间的距离进行数值测量。
(5)由专业整形医师对真实人脸进行数值测量,比较重建人脸与真实人脸的数据。
图10为对比试验标记图,图中依次标记的特征点为左瞳仁(点1)、右瞳仁(点2)、鼻尖(点3)、下颚(点4)、鼻根(点5)。
图11是三维测量软件对标记特征点进行计算并得到的数值结果,之后由专业整形医师对真实人脸进行数值测量,并与图11中的数值进行比较。表1为专业整形医师将上述人脸模型分别与真实人脸进行测量对比的数据及误差值。通过对重建模型与真实人脸进行误差测量,并与Bellus3d成像系统重建模型进行比较可以看到:本文模型重构人脸结果误差小于Bellus3d重建模型结果,证明上述系统提高了重建人脸模型重建精度,并与真实人脸间差距小于2 mm,可用于虚拟整形,指导医师进行手术。
图10 面部标记点对比Fig.10 Comparison of facial landmarks
表1 误差对比Table 1 Error comparison
图11 特征点间距离Fig.11 Distance between feature points
4 结论
针对目前面部整形手术因缺少三维模型进行术前精确设计而导致手术成功率低的问题,开展了三维人脸重建系统研究。介绍了三维重建技术的原理,详细阐述了利用高精度深度相机获取的深度图像通过转换、拼接、配准得到精准的三维人脸点云模型,网格化处理并提出利用半边结构的细分算法提高重建人脸模型的精度,最后做了实际实验并对实验结果进行了分析。经过对比实验得到以下结论。
(1)设计的三维人脸重建系统能有效提升重建精度,与真实人脸对比误差均值小于2 mm,且小于市场上同类产品(Bellus3d)。
(2)重建的三维人脸模型可直接用于指导医生进行术前模拟演示,确定手术方案,使医生和求美者能有效沟通,从而提升手术成功率。
(3)设计的三维重建系统算法重建精度较高,能满足目前医学整形手术的需求,但是在重建时间和扫描环境影响等方面还有待提高。一方面本文的算法三维重建时间较长,重建速度较慢;另一方面,三维扫描设备在工作时需要良好的光照环境,而且要求用户保持静止状态,如果有眨眼或者轻微运动,都会导致三维面部模型出现纹理颜色不一致现象,重建效果较差。针对以上两点,下一步将加入图像处理算法来去除光照不均以及运动伪影的影响,同时进一步提高重建算法的处理速度。