一种基于3DMM的人脸纹理修复方法
技术领域
本发明属于计算机图形学、图像与信号处理领域,特别是图像处理领域,具体涉及图像修复。
背景技术
随着科学技术的发展,基于单张正面的人脸进行人脸建模的方法已经变得越来越普遍,与普通建模的方法相比,基于照片建模所需要的成本相对较小,因此在游戏制作,影视制作、场景重现中占有的地位越来越重。目前已有很多较为成熟的基于照片的人脸建模方法,如基于形变模型的3DMM等。在基于照片的人脸建模过程中,包含人脸特征的高频信息常常由纹理进行体现,但是由于人脸结构的特殊性,建模所使用的照片即使处于完全正面的情况下,也会由于人脸自遮挡导致部分纹理信息的缺失,如何对这些信息进行填补、修复自然成为了三维人脸建模中较为重要的一步。
在图像修复技术中,现有的方法主要是利用待修补部分的区域边缘信息,对被待修补部分进行图像信息的推断。具体包括以下两种方法:
一种是利用待修补区域的边缘信息,这种方法先从待修补的区域边界开始向待修补区域推进,先填充区域边界的像素,要选取待修补区域周围的一个小邻域,使用这个区域的归一化加权来更新待修补区域的图像信息。在修复的时候,需要给靠近存在边界的像素点以及轮廓上的像素点给予更高的权重,在一个像素被修复了之后,继续进行下一个像素的修复,直到待修补的区域完全被修复。
另一种方法是基于块的纹理合成技术,首先从待修补区域的边界上选取一个像素点,同时以该点为中心,根据图像的纹理特征,在图像中选择大小合适的纹理块来替代该纹理块,一直迭代直到待修补区域完全被修复。
以上是在不考虑待修补图像内容时的修复图像手段,而当被修复的图像内容局限在人脸的时候,还有一种方法考虑到人脸的对称结构,根据待修补区域的位置找到关于人脸对称另一半的图像信息,然后将对应的图像信息复制到待修补的图像区域。
然而,在第一种图像修复方法中,过度依赖了待修复图像的边缘信息,这样导致修复的结果没有考虑全局的图像信息。在一些对图像质量要求比较高的场景中,比如人脸图像的修复中,会导致修复的图像信息过于平滑,人脸特征等高频信息缺失等缺点。
而在第二种考虑到人脸特殊结构的方法中,由于拍照的时候,脸的两侧并不一定有着相同的光照条件,导致两侧面部有着明显的色差,在直接依据人脸对称性进行修补的时候会导致非常差的效果。并且在下巴、脖子等部位,人脸两侧结构均没有信息的情况下,难以使用这种方法进行处理。
发明内容
本发明要解决的技术问题为:为保证对纹理信息进行有效的修复以及尽可能多的恢复人脸纹理信息,在利用3DMM方法进行人脸建模的基础之上,提出一种解决存在自遮挡造成纹理缺失的纹理修复方法,通过结合人脸的对称性,对现有的纹理修复方法进行改进,实验表明,本方法可以有效的对存在自遮挡的人脸纹理进行修复。
本发明解决上述的技术问题采用的技术方案为:一种基于3DMM的人脸纹理修复方法,实现步骤如下:
步骤A、根据输入的人脸照片,进行人脸特征点的提取,得到人脸中的68 个特征点的二维坐标,并且与三维平均脸部模型中的68个特征点一一对应;
步骤B、通过对步骤A中获得的68个对应点之间的关系,对三维平均脸部模型进行调整,使模型的形状、姿态与照片中脸部相同,并保存此时所用到的转换矩阵;
步骤C、根据步骤B中得到配准好的人脸模型,判断该人脸模型中的每个顶点在屏幕坐标系下是否可见,得到在屏幕坐标系下不可见的三维顶点集合V;
步骤D、根据步骤B中得到的转换矩阵,以及步骤C中得到的不可见三维顶点集合V,提取出人脸纹理图像;
步骤E、由步骤C中得到模型在屏幕坐标系下不可见的顶点集合V,以及步骤D中得到的人脸纹理信息,对V中的顶点进行迭代纹理修复。
进一步地,所述步骤E中,进行迭代纹理修复过程如下:
根据公式(1),求得利用邻域信息的插值算法得到的颜色值,
其中C1(x,y)表示根据插值算法得到像素点(x,y)的颜色值,表示临近像素点的颜色信息,n表示最接近当前像素的像素点个数;
根据公式(2),求得像素点关于脸部对称的另一个像素点位置,
其中,(xorigin,yorigin)表示原像素点位置,Xmid表示isomap纹理图像的中轴线;
根据公式(1)、(2),得到初始化公式(3),利用公式(3)对待修补区域进行初始化修复,
Cinitial(x,y)=C1(x,y),(x,y)∈V (3)
根据公式(4),对待修补区域进行迭代修复,
其中,i表示当前迭代轮次,n表示总迭代次数,Clast表示该像素点上次迭代得到的颜色信息,β为一个权重系数。
进一步地,所述步骤B中包括:根据步骤A中得到的仿射矩阵,对已有三维平均脸部模型中的顶点进行转换、映射,调整平均脸部模型对应的系数,对其进行姿态变换,使其与照片中的姿态进行配准。
进一步地,所述β取值在0-0.3之间。
本发明与现有技术相比的优点在于:
(1)相比于其他的图像修复技术,本方法在人脸这一特定的背景条件下,可以将纹理边缘的局部信息以及与人脸结构相关的全局信息能够进行充分的利用,既可以避免由于局部插值造成的过度平滑导致的信息丢失,也可以对简单的利用人脸对称性进行复制图像信息造成生成的纹理图像存在明显的裂痕,在很大程度上保留并尽可能多的恢复了人脸信息。
(2)本发明与同类方法相比,在将所要进行修复纹理内容局限为人脸的时候,权衡了不同种类的纹理修复方法,尽可能多的综合了其他纹理修复方法优点,最后达到了尽可能多的保留纹理图像的细节,使得纹理图像更加逼真等的效果。
附图说明
图1为本发明的方法流程示意图;
图2为得到特征点的输入人脸照片;
图3为使用isomap算法提取出未进行纹理修补的原图像;
图4为使用本发明进行纹理修补后的图像。
具体实施方式
传统的纹理图像修复方法属于插值算法,并没有考虑到图像的本身的内容,因此在进行修复的时候,依赖于纹理缺失的边缘信息较多,这样导致了纹理信息的部分缺失,而在考虑到人脸的对称性之后,可以利用这一点对人脸信息进行补充,最大化恢复人脸纹理信息。
下面结合附图和具体实施方式对本发明做进一步详细地说明。
图1给出了对于人脸纹理进行修复的处理流程,下面结合具体的实施方式进一步说明本发明。
本发明提供一种基于3DMM的人脸纹理修复方法,主要步骤介绍如下:
1.进行特征点检测以及模型配准
(1.)参考图1根据输入的人脸照片,使用dlib库进行人脸特征点的检测以及提取(也可以使用基于OpenCV库或其他方法进行人脸特征点的提取),得到照片中的中的68人脸特征点的坐标信息(如图2所示),将特征点坐标集合记为X。
(2.)在三维人脸形变模型中已有标注好的68个对应人脸特征点,将这些三维特征点坐标集合记为X_3d,根据黄金标准算法(Gold Standard algorithm),计算求出一个大小为3x4的仿射矩阵P,使得
X=P·X3d (I)
即,用仿射矩阵P左乘以三维特征点坐标X_3d,可以得到对应的二维特征点信息X。
(3.)根据步骤(2)中求得的仿射矩阵P,可以对P进行分解,得到缩放系数s,旋转矩阵R,位移矩阵t,具体分解方法如下:
t=Pc,3 (2)
其中,Pr,3表示P矩阵的第三行,Pc,3表示P矩阵的第三列,
(4.)基于3DMM进行人脸建模的过程中,一个新的人脸模型可以由以下步骤得到:
其中表示平均脸部模型,si表示脸部形状对应的主成分部分,αi表示相应的形状系数,即可以通过调整形状系数αi,得到不同形状的人脸模型。
根据三维人脸形变模型中已有标注好的68个对应人脸特征点集合X_3d, 以及步骤(3.)中得到的缩放系数s,旋转矩阵R,位移矩阵t,可以通过下式(6) 得到三维模型顶点投影到二维平面的坐标。
上式中,Xprojection是三维模型投影到二维平面的点, P=[[1,0,0],[0,1,0]]为正交投影矩阵,s为缩放系数,R(3,3)为旋转矩阵, t2d为位移矩阵(这三个变量由(3.)步骤得到)。
在求解的过程中,不需要将三维模型中所有顶点进行投影,只需要将前面步骤中获取的68个特征点进行投影到平面即可,最后通过调整模型的形状系数α i,使得投影到平面上的68个特征点X_Projection与步骤(1)中提取到的68 个真实的特征点几何距离相差最小即可。
具体即通过求解以下的能量方程来确定形状系数αi,
可以通过使用最小二乘法对上式进行求解,这里不再赘述。
2.人脸纹理提取
(1)对于步骤1中配准好的人脸模型S,通过使用z-buffer方法来判断模型中的顶点在屏幕坐标系下是否可见。根据屏幕分辨率初始化深度信息数组 depth[h,w],其中记录像素位置最小的z值信息。
对所有的顶点信息进行遍历,并同时更新depth数组,仅当当前顶点的z 值小于depth数组中对应值的时候,更新depth数组,并将被替换的顶点添加到不可见顶点集合V中。
(2)对于三维模型中的每个顶点,均有一个二维纹理坐标与之对应。在计算纹理坐标的时候,使用平均脸部模型进行计算,这样可以适用于所有的人脸模型。使用isomap方法计算得到当前平均脸部模型投影到二维平面上的坐标,得到关于平面对称的纹理坐标。
(3)对于三维模型中的每个顶点,根据步骤1中计算得到的仿射矩阵P,求得其在二维平面上的坐标,取出对应的颜色信息,将其赋值到(2)中的得到的纹理坐标上,同时注意,如果该顶点属于(1)中的不可见顶点集合V,则跳过该顶点。
上式中,Imageoriginal表示原始图像,(P·v)x表示仿射矩阵与三维顶点相乘,投影顶点的x坐标。
在遍历的时候,由于这里只对顶点的颜色进行了操作,因此在得到纹理的图像的时候,需要以每个三角形为单位进行邻近插值处理(也可使用双线性插值),得到最终的纹理图像。
3.进行纹理修复
传统的纹理修复方法得不到适合想要的结果,本步骤使用的方法具体为:
根据公式(9),求得利用邻域信息的插值算法得到的颜色值,
其中C1(x,y)表示根据插值算法得到像素点(x,y)的颜色值,表示临近像素点的颜色信息,n表示最接近当前像素的像素点个数。
根据公式(10),求得像素点关于脸部对称的另一个像素点位置。
其中,(xorigin,yorigin)表示原像素点位置,Xmid表示isomap纹理图像的中轴线。
根据公式(9)、(10),得到初始化公式(11),利用公式(11)对待修补区域修复。
Cinitial(x,y)=Cl(x,y),(X,y)∈V (II)
即,先使用插值算法将待修补区域进行填充修复。
根据公式(12),对待修补区域进行迭代修复。
其中,i表示当前迭代轮次,n表示总迭代次数,Clast表示该像素点上次迭代得到的颜色信息,β为一个权重系数,其值在暂取为0-0.3之间,保证在迭代到后期的时候算法不退化成根据人脸对称的修复算法。
在迭代的过程中,随着迭代次数的增加,对于修补的信息来说,C2的部分占的比重会增高,这样保证了修复信息能在线性插值的基础上使得纹理图像更具有脸部特征信息。同时增加一项Clast,即上次迭代得到的像素信息,避免当迭代次数过的时候出现退化成根据人脸对称的修复算法。
本实施例的主体是一种纹理修复方法,本质上是对存在图像信息空洞信息进行修复,可以看出图3中人脸部分(鼻子、下巴、侧脸等部位)存在空洞缺失,经过使用纹理修复方法之后,便可以将这些信息进行填补得到图4。
在实验的过程中,实验使用的设备为:NVIDIA GeForce GTX1080、 Intel(R)Core(TM)i7-6700CPU(3.40GHz,4cores)和32GB RAM,运行在 Windows10 64位系统上。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。