一种三维人脸变换的方法与流程

文档序号:20033905发布日期:2020-02-28 10:48阅读:656来源:国知局
一种三维人脸变换的方法与流程

本申请涉及图像技术领域,尤其涉及一种三维人脸变换的方法。



背景技术:

随着科技的发展,电脑和手机中随处可见的电影和卡通电影让人们产生了一种需求,就是在一定程度上可以将人体的真实容貌和卡通人物合成一个虚拟人物,然后在某些卡通片中扮演真人的角色即“人脸变换”。

目前,在二维图像方面很多人已经实现了人脸变换的功能,将真人的照片连贴到二维图像中去,和二维图像中的卡通形象结合成一个新的人脸。

然而,随着三维技术的发展,如何将真人的真实容貌与三维人物结合成一个虚拟人物,并且如何使得三维人脸变换后三维模型的皮肤颜色更加接近真人的皮肤颜色,从而使得三维人脸变换后三维模型更加逼真,是目前急需解决的技术问题。



技术实现要素:

本申请提供了一种三维人脸变换的方法,以将真人的真实容貌与三维人物结合成一个虚拟人物,使得三维人脸变换后三维模型的皮肤颜色更加接近真人的皮肤颜色,从而使得三维人脸变换后三维模型更加逼真。

为解决上述技术问题,本申请提供如下技术方案:

一种三维人脸变换的方法,其特征在于,包括如下步骤:将真实图片的人脸缩放至与模型人脸对齐;对缩放后的真实图片的人脸进行抠图,并将抠出的人脸图片贴合至模型人脸生成人脸贴图模型;对模型皮肤材质图片进行处理并贴合到模型人脸得到皮肤模型;通过真人皮肤图片生成皮肤图;通过皮肤图和皮肤模型生成真人皮肤模型;将人脸贴图模型与真人皮肤模型进行融合。

如上所述的三维人脸变换的方法,其中,优选的是,将真实图片的人脸缩放至与模型人脸对齐,具体包括以下子步骤:计算模型人脸特征点和模型额头特征点;根据模型人脸特征点和模型额头特征点构建模型三角形列表;计算真实人脸特征点和真实额头特征点;根据真实人脸特征点和真实额头特征点构建真实三角形列表;将真实三角形列表对应于模型三角形列表。

如上所述的三维人脸变换的方法,其中,优选的是,计算模型额头特征点,具体包括如下子步骤:获取模型双眼眼球的位置信息;获取模型正脸图像的大小;计算模型人脸宽度;计算模型人脸的脸部中心点坐标;计算模型人脸的脸部向上的向量;计算模型人脸的额头顶部点;计算模型人脸额头顶部左边点;计算模型人脸额头顶部右边点;使用贝塞尔曲线原理计算得出一条曲线;将模型正脸图像分割成多个部分,比如4部分,分别将分割坐标点加入到所有坐标点中。

如上所述的三维人脸变换的方法,其中,优选的是,将真实三角形列表对应于模型三角形列表具体为将真实三角形列表的双眼和下巴与模型三角形列表对齐。

如上所述的三维人脸变换的方法,其中,优选的是,对模型皮肤材质图片进行处理,具体为对模型皮肤材质图片进行去纹理、半透明处理。

如上所述的三维人脸变换的方法,其中,优选的是,对模型皮肤材质图片进行去纹理具体是对眼球部分的纹理和脸部大部分纹理进行去纹理。

如上所述的三维人脸变换的方法,其中,优选的是,通过真人皮肤图片生成皮肤图,具体包括如下子步骤:从真实图片中抠出一块真人皮肤图片;对抠出的真人皮肤图片进行边缘逐渐透明值处理;将边缘逐渐透明值处理的真人皮肤图片填满皮肤融合材质图片生成皮肤图。

如上所述的三维人脸变换的方法,其中,优选的是,从真实图片中真人额头上抠出一块真人皮肤图片。

如上所述的三维人脸变换的方法,其中,优选的是,通过皮肤图和皮肤模型生成真人皮肤模型,具体为:真人皮肤模型=人脸贴图模型uv*细节参数*背景参数*皮肤图的皮肤材质参数;其中,细节参数为5、背景参数为2。

如上所述的三维人脸变换的方法,其中,优选的是,将人脸贴图模型与真人皮肤模型进行融合具体为:将人脸图片通过uv2通道贴到模型人脸上,uv2=顶点(x,y)/人脸图片的图像大小(宽度,高度);x,y是xy坐标系的坐标值。

相对上述背景技术,本发明所提供的三维人脸变换的方法将真人的真实容貌与三维人物结合成一个虚拟人物,并且还使得三维人脸变换后三维模型的皮肤颜色更加接近真人的皮肤颜色,不仅使得三维人脸变换后三维模型更加逼真,还可以广泛的应用于不同场景和领域,丰富了不同领域的三维效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的三维人脸变换方法流程图;

图2是本申请实施例提供的模型正脸图像;

图3是本申请实施例提供的真实图片的人脸缩放至与模型人脸对齐的流程图;

图4是本申请实施例提供的模型人脸特征点示意图;

图5是本申请实施例提供的模型人脸特征点和模型额头特征点示意图;

图6是本申请实施例提供的模型三角形列表示意图;

图7是本申请实施例提供的脸部皮肤融合半透明图像示意图;

图8是本申请实施例提供的去纹理和半透明处理后得到模型皮肤材质处理图片示意图;

图9是本申请实施例提供的皮肤模型的正面图;

图10是本申请实施例提供的皮肤模型的侧面图;

图11是本申请实施例提供的真人皮肤图片;

图12是本申请实施例提供的渐透明值处理的真人皮肤图片;

图13是本申请实施例提供的皮肤图示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

本申请实施例提供了一种三维人脸变换的方法,如图1所示,具体包括如下步骤:

步骤s110、将真实图片的人脸缩放至与模型人脸对齐;

在进行真实图片的人脸和模型人脸对齐之前,首先,利用模型(三维模型)制作两张图像,即:模型正脸图像和真人正脸图像,其中,图2为模型正脸图像。

然后,根据模型正脸图像中的模型人脸将真实人脸图像中的真实人脸进行调整,调整至与模型正脸图像中的模型人脸对齐。

如图3所示,具体包括如下子步骤:

步骤y310、计算模型人脸特征点和模型额头特征点;

计算模型人脸特征点可以根据dlib开源库提供的人脸特征点检测功能检测模型的人脸特征点,检测出的模型人脸特征点如图4所示。

由于检测出的模型人脸特征点并不包括额头部分的特征点,因此本申请实施例中还提供了根据模型人脸特征点计算模型额头特征点的计算方法,可以是按照正常人的特征采用一个弧度来计算得出这个额头部分的特征点,具体计算过程如下:

3101、首先,获取模型双眼眼球的位置信息;

如图5所示,其中1至64是通过上述检测到的模型人脸特征点的索引点,根据检测到的索引点获取模型双眼眼球的位置信息,具体获取方式是:

左眼球位置:索引从36到41的坐标点的平均值;

右眼球位置:索引从42到47的坐标点的平均值;

3102、获取模型正脸图像的大小;

具体的,模型正脸图像的大小是整张包含模型人脸的图像大小。

3103、计算模型人脸宽度;

依然根据图5中的1至64的索引点进行计算,具体是:

模型人脸宽度=sqrt(索引为0的坐标点-索引为16的坐标点);其中,sqrt为取其平方根函数。

3104、计算模型人脸的脸部中心点坐标;

模型人脸的脸部中心点可以根据上述获得的左眼球位置和右眼球位置进行计算,具体为:

模型人脸的脸部中心点坐标=(左眼球位置+右眼球位置)/2;

3105、计算模型人脸的脸部向上的向量;

模型人脸的脸部向上的向量可以根据上述计算出的脸部中心点进行计算,具体为:

模型人脸的脸部向上的向量=normalize(模型人脸的脸部中心点坐标-索引为8的坐标);其中,normalize为取其单位向量函数;

3106、计算模型人脸的额头顶部点;

模型人脸的额头顶部点可以根据上述计算出的脸部中心点坐标、脸部向上的向量和模型人脸宽度进行计算,具体为:

模型人脸的额头顶部点=模型人脸的脸部中心点坐标-模型人脸的脸部向上的向量*模型人脸宽度。

3107、计算模型人脸额头顶部左边点;

模型人脸额头顶部左边点可以根据上述计算出的额头顶部点和脸部中心点坐标进行计算,具体为:

模型人脸额头顶部左边点=模型人脸的额头顶部点-(模型人脸的脸部中心点坐标–索引为0的点)。

3108、计算模型人脸额头顶部右边点;

模型人脸额头顶部右边点可以根据上述计算出的额头顶部点和脸部中心点坐标进行计算,具体为:

模型人脸额头顶部右边点=模型人脸的额头顶部点-(模型人脸的脸部中心点坐标–索引为16的点)。

3109、使用贝塞尔曲线原理计算得出一条曲线;

具体是使用贝塞尔曲线原理在上述计算出的将索引为0点->顶部左边点->顶部右边点->索引为16的点之间计算得出一条曲线,在该曲线上得到如图5中的索引为65到83的坐标点,该65至83的坐标点即为计算得到的模型额头特征点。

3110、将模型正脸图像分割成多个部分,比如4部分,分别将分割坐标点加入到所有坐标点中。

请继续参阅图3,步骤y320、根据模型人脸特征点和模型额头特征点构建模型三角形列表;

具体可以使用三角剖分算法将图5中的索引点(也就是模型人脸特征点和模型额头特征点)构建三角形列表,构建的模型三角形列表如图6所示。

步骤y330、计算真实人脸特征点和真实额头特征点;

步骤y340、根据真实人脸特征点和真实额头特征点构建真实三角形列表;

构建真实三角形列表,其中,计算真实人脸特征点和真实额头特征点的计算方法与计算模型人脸特征点和模型额头特征点的计算方法和步骤相同,构建真实三角形列表与构建模型三角形列表的方法和步骤也相同,在此就均不再赘述。

步骤y350、将真实三角形列表对应于模型三角形列表。

通过双眼位置对齐的方式,将真实三角形列表变换对齐到模型三角形列表上,双眼和下巴方向都是和模型是一致,叠加之后模型的眼睛和真人照片的眼睛是严格对齐的。

请继续参考图1,步骤s120、对缩放后的真实图片的人脸进行抠图,并将抠出的人脸图片贴合至模型人脸生成人脸贴图模型;

对缩放后的真实图片进行抠图之前,可以预先制作脸部皮肤融合半透明图像,如图7所示。其中,脸部皮肤融合半透明图像的黑色部分代表透明通道值是0,也就是全透明,白色部分代表透明通道值是1,也就是全不透明。

将缩放后的真实图片与脸部皮肤融合半透明图像叠加,将脸部皮肤融合半透明图像白色部分与缩放后的真实图片的人脸对齐,即得到缩放后的真实图片的人脸的抠像区域,也就完成了对人脸的抠图。

然后,再将模型的顶点在前视图空间内进行变换,对齐到真人脸三角形顶点坐标中,也就是将通过脸部皮肤融合半透明图像的融合透明通道抠图之后的图与模型脸融合。

步骤s130、对模型皮肤材质图片进行处理并贴合到模型人脸得到皮肤模型;

对模型的皮肤材质图片进行处理具体为美术人员对模型皮肤材质图片进行去纹理、半透明处理,其中,去纹理具体可以是将眼球部分的纹理和脸部大部分纹理去掉。去纹理和半透明处理后得到模型皮肤材质处理图片,如图8所示。

然后,将去纹理和半透明处理后得到模型皮肤材质处理图片贴合至模型人脸上,得到皮肤模型,如图9所示皮肤模型的正面图和图10所示皮肤模型的侧面图。

步骤s140、通过真人皮肤图片生成皮肤图;

真人皮肤图片是真实图片中真人脸部的部分图片,是可以代表真人皮肤(皮肤颜色或皮肤质感)的部分图片。具体可以是在真实图片中真人脸部抠出来一块制作皮肤图。优选的,抠取较为平整,光线或颜色变化小的部位,如从真实图片中的真人额头上抠出来一块真人皮肤图片,然后对抠出的真人皮肤图片进行边缘逐渐透明值处理,将边缘逐渐透明值处理的真人皮肤图片进行平铺操作,填满整个皮肤融合材质图片,填充的时候优选自动随机旋转,最终生成一张皮肤图,其中如图11、图12和图13所示,展示出了真人皮肤图片、边缘逐渐透明值处理的真人皮肤图片、皮肤图。

步骤s150、通过皮肤图和皮肤模型生成真人皮肤模型;

叠加皮肤图和皮肤模型,具体可以是在3d中的着色器内逐像素叠加计算。例如,可以通过公式:真人皮肤模型=人脸贴图模型uv*细节参数*背景参数*皮肤图的皮肤材质参数;其中,细节参数为5、背景参数为2,逐像素叠加计算得到真人皮肤模型。当然根据需要细节参数和背景参数也不限定为本申请实施例中所设置的数值。

在上述公式中,肤图的皮肤材质参数即是上述获得皮肤图中的参数,例如,皮肤颜色、色素沉积状况等。

另外,在上述公式中,人脸贴图模型uv是使用三维坐标计算人脸贴图模型获得的。uv是三维模型的一种坐标系统,是贴图影射到模型表面的依据。完整的说,应该是uvw。u和v分别是图片在显示器水平、垂直方向上的坐标,取值一般都是0~1,也就是(水平方向的第u个像素/图片宽度,垂直方向的第v个像素/图片高度),w的方向垂直于显示器表面。

步骤s160、将人脸贴图模型与真人皮肤模型进行融合。

首先,将人脸图片贴合至模型人脸生成人脸贴图模型,具体是将人脸图片通过uv2通道贴到模型人脸上,uv2是通过程序计算出来的,计算方式是从模型人脸图像左上角是u=0,v=0坐标点,右下角是u=1,v=1坐标点以此计算每个顶点的uv值。

其中,具体为uv2=顶点(x,y)/人脸图片的图像大小(宽度,高度);x,y是xy坐标系的坐标值。

然后,将人脸贴图模型与真人皮肤模型进行融合得到融合模型,具体可以是将人脸贴图模型与真人皮肤模型进行叠加计算,或者可以是其他计算,只要能够将人脸贴图模型与真人皮肤模型中的参数进行融合即可。

接着,进行最终输出模型计算,具体如下:

1601、计算过滤值;

过滤值=(1–模型皮肤材质的alpha通道)*(人脸贴图的alpha通道),其中alpha通道为材质的透明通道。模型皮肤材质是描述模型皮肤材质图片中皮肤的参数,人脸贴图是形成人脸贴图模型的人脸图片。

1602、通过过滤值输出真人皮肤模型或融合模型;

具体通过函数lerp进行计算输出。其中,函数lerp为lerp(真人皮肤模型,融合模型,过滤值),lerp是混合函数,其结果取决于过滤值,如果过滤值是0则输出的是真人皮肤模型,如果是1则输出的是融合模型。

其中,函数lerp的具体形式是lerp(a,b,l)=a*(1-l)+b*l,a、b、l是函数lerp的自变量,在本申请中代表的含义分别为真人皮肤模型,融合模型,过滤值。

接下来,对最终输出模型增加自发光。由于真实图片在照相时就已经存在了光照的效果,所以在上述处理中仅贴上人脸图片之后真实的光照效果并没有消失,因此需要稍微提高一些自身亮度作为对光照的补偿。可以通过公式:自发光模型=最终输出模型*照亮参数,其中照亮参数设置成0.5。

最后,对自发光模型添加场景光照效果,然后进行输出。

以上是对本申请实施例提供的三维人脸变换的方法的实现的具体说明,而本申请实施例提供的三维人脸变换的方法可以应用于不同的场景,例如:

示例1:如果基础模型是一个人物模型,则在三维人脸融合之后,用户在三维游戏、三维动画、各种三维相关的内容中看到的是一张自己的脸,并且这个模型可以随着美术人员的设定进行各种动作的播放。

示例2:如果拍摄的是一系列变化的图,比如一个人从严肃的表情切换到笑脸表情的过程的序列图,则模型可通过这些连续的表情图片来生成不同片段的表情变化,如果每秒达到30帧的计算速率,则整个模型会实时生成不同表情之间的切换过程。如果将这些序列图片保存下来,在今后播放这段图片并融合到三维模型之后就可以得到与播放真人表情一样的效果。

示例3:如果表情变化过程中,将这些特征点之间的关系记录下来,然后对另一张脸的特征点进行相等比例动态调整,可以得出一个人在说话或者做出各种表情和脸部的过程中,另一个三维模型和人也会做出同样的表情和脸部动作。

示例4:如果将人脸融合到一张动物头像三维模型上时,这个人会变成一个小动物,看上去像小动物但是脸是自己的脸。如果将这个动物制作成的动画片,使用三维播放软件等工具进行播放并录制成mp4之后,这个人将得到由自己扮演的一段动画片。

可见,本申请实施例将真人的真实容貌与三维人物结合成一个虚拟人物,并且还使得三维人脸变换后三维模型的皮肤颜色更加接近真人的皮肤颜色(可以根据真人的真实肤色改变三维人物肤色),不仅使得三维人脸变换后三维模型更加逼真,还可以广泛的应用于不同场景和领域,丰富了不同领域的三维效果。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1