视频面部贴图特效处理方法及生成系统与流程

文档序号:13662116阅读:1072来源:国知局
视频面部贴图特效处理方法及生成系统与流程

本发明涉及视频特效领域,具体地说是一种视频面部贴图特效处理方法及生成系统。



背景技术:

随着信息的膨胀和同质化,人们希望在视频中能体现个性化的特色,以更快的获得认同,同时满足内心体验,传达自身的情感。例如在视频的人脸面部上快速叠加贴图特效并保持在面部的相对位置。由于视频处理的复杂性,若使用通用的视频后处理软件进行处理,其操作难度较大,且需要专业的知识和大量的人工操作,并不适合普通家庭用户使用。

目前已有的应用主要是将一些预定义的美颜效果或者动态特效加入到个人视频中,使用者可以从给定的特效中进行选择,选择好后特效即按预先设定的位置加入到视频人脸上,一般不支持自行添加、编辑效果或修改变形位置等,通常效果也不会跟随光线明暗产生变化。

如何提供一种视频面部特效处理方法,支持用户自行编辑贴图效果、调整贴图位置及尺寸,是需要解决的技术问题。



技术实现要素:

本发明的技术任务是针对以上不足,提供一种视频面部贴图特效处理方法及生成系统,来解决如何实现用户自行编辑贴图效果、调整贴图位置及尺寸的问题。

本发明的技术任务是按以下方式实现的:

视频面部贴图特效处理方法,将任意图像作为贴图附于输入的视频中人脸的任意位置上,且贴图在视频中保持与人脸的指定贴图区域相对位置的固定,包括如下步骤:

s1、对视频中人脸进行特征定位,获取人脸的面部特征点;

s2、将选取的图像导入视频中人脸上作为贴图,贴图包括贴图图像和贴图控制点,通过贴图控制点和与其对应的人脸的面部特征点计算贴图控制点的位置参数,通过贴图控制点的位置参数对贴图图像进行变换处理,贴图控制点的位置参数能够标识贴图图像与视频中人脸的指定贴图区域之间的相对位置关系;

s3、将变换处理后的贴图叠加至视频中人脸的指定贴图区域。

进一步的,步骤s1包括如下步骤:

s11、通过人脸检测方法对视频进行人脸检测,如果确定视频中存在人脸,则返回人脸在视频图像中的位置和范围,视频包括摄像头实时输入的视频和录制好的视频;

s12、通过面部特征定位法对视频中人脸进行面部特征点定位,并保存每个面部特征点的编号及坐标,生成面部特征点点集。

进一步的,步骤s2包括如下步骤:

s21、导入贴图:选取一个图像导入视频中人脸上,该图像为贴图图像,获取围成贴图图像的贴图控制点,并记载贴图控制点在当前帧视频图像中人脸上的坐标;

s22、计算每个贴图控制点的位置参数:在上述定位的面部特征点中选取多个面部特征点,上述选取的多个面部特征点为在当前帧视频图像中人脸上与贴图控制点所在像素点接近的面部特征点,且上述选取的多个面部特征点不共线,通过上述选取的多个面部特征点在人脸上的位置以及相互之间的相对比例关系计算贴图控制点的位置参数,通过贴图控制点的位置参数能够计算贴图控制点在每一帧视频图像中人脸上的坐标;

s23、在每一帧视频图像中,通过贴图控制点的坐标对贴图图像进行透视变换。

进一步的,步骤s22包括如下分步骤:

s221、在上述定位的人脸的面部特征点中选取三个面部特征点pi、pj和pk,上述三个面部特征点为在当前帧视频图像中人脸上与贴图控制点所在的像素点接近的三个面部特征点,三个面部特征点的编号分别为n1、n2和n3,面部特征点pi的坐标为(pi.x,pi.y),面部特征点pj的坐标为((pj.x,pj.y),面部特征点pk的坐标为((pk.x,pk.y);

s222、判断上述三个面部特征点是否共线,如果上述三个面部特征点共线,替换其中的一个面部特征点,如果上述三个面部特征点不共线,通过分段线性仿射计算上述三个面部特征点的仿射参数α和β,

其中,(p.x,p.y)为贴图控制点在当前视频帧中人脸上的坐标;

s223、通过上述三个面部特征点的编号以及仿射参数组成对应的贴图控制点的位置参数,贴图控制点的位置参数为(n1,n2,n3,α,β);

s224、通过贴图控制点的位置参数计算与其对应的贴图控制点在每帧视频图像中人脸上的坐标。

进一步的,步骤s23中,通过贴图控制点的坐标对贴图图像进行透视变换包括如下步骤:

s231、采集对应原始贴图图像的贴图控制点的坐标,并采集人脸上指定的面部特征点的坐标,采集的贴图控制点和指定的面部特征点均多个,且上述贴图控制点和指定的面部特征点一一对应;

s232、以上述指定的面部特征点的坐标中的最小值为透视变换原点,以上述指定的面部特征点的坐标中的最大值为透视变换的范围限制,通过上述选取的贴图控制点的坐标以及与其对应的指定的面部特征点的坐标计算透视变换矩阵;

s233、对原始贴图图像应用透视变换矩阵,实现原始贴图图像的变形。

s234、通过线性插值对变形后的贴图图像进行填充,填充后的贴图图像无缺失点。

进一步的,步骤s3中,通过视频中人脸的指定贴图区域的hsv颜色空间的v分量对变形后的贴图图像进行明暗处理,明暗处理后的贴图图像的亮度与视频中人脸上指定贴图区域的亮度接近,将明暗处理后的贴图通过线性叠加的方式叠加至视频中人脸的指定贴图区域。

进一步的,通过视频中人脸的指定贴图区域的hsv颜色空间的v分量对变形后的贴图图像进行明暗处理,包括如下步骤:

s311、对视频进行颜色空间转换,视频由rgb颜色空间转换为hsv颜色空间,对变形后的贴图进行颜色空间转换,贴图由rgb颜色空间转换为hsv颜色空间;

s312、对视频进行分解,得到视频的h通道、视频的s通道和视频的v通道,对变换后的贴图进行分解,得到贴图的h通道、贴图的s通道和贴图的v通道;

s313、对视频的v通道进行除均值,得到视频的像素的v值相对于视频的像素的均值的均值倍率图,将均值倍率图叠加至贴图的v通道,得到贴图的w通道;

s314、将贴图的w通道、贴图的h通道和贴图的s通道合并;

s315、对视频进行颜色空间转换,视频由hsv颜色空间转换为rgb颜色空间,对贴图进行颜色空间转换,视频由hsv颜色空间转换为rgb颜色空间。

视频面部贴图特效生成系统,包括显示模块、功能模块和提示模块,功能模块包括视频导入编辑子模块、贴图定义编辑子模块和效果调整子模块;视频导入编辑子模块与显示模块连接,能够选择视频源并导入视频,能够对每帧视频图像编号,并能够对视频进行人脸检测和人脸面部特征点定位;贴图定义编辑子模块与显示模块连接,能够载入作为贴图的图像,并能够编辑并保存贴图控制点的位置参数;效果调整子模块分别与视频导入编辑子模块、贴图定义编辑子模块及显示模块连接,能够调整视频和贴图的透明度和亮度,并能够选择显示视频中人脸的面部特征点或选择不显示视频中人脸的面部特征点;提示模块分别与视频导入编辑子模块和显示模块连接,能够通过显示当前帧视频的计算时间,并能够通过显示鼠标当前位置在视频上的坐标实现辅助调整贴图控制点的位置;显示模块能够显示视频以及导入的贴图,并能够显示上述视频导入编辑子模块、贴图定义编辑子模块、效果调整子模块以及提示模块的操作界面。

在视频导入编辑子模块中,可选择视频源导入视频,即选择导入实时录制的视频或录制好的视频,对视频进行人脸检测,如果视频中存在人脸,则对人脸进行面部特征点定位,形成面部特征点点集;在贴图定义编辑子模块,用户自主选择一个图像导入视频中,形成包括贴图图像和围成贴图图像的贴图控制点,通过贴图控制点和与其临近的面部特征点的相对位置关系计算贴图控制点的位置参数,通过贴图控制点的位置参数对贴图图像进行变形;在效果调整子模块对视频以及贴图进行明暗处理和透明图处理,并将处理后的贴图叠加至视频中人脸的指定贴图区域,生成视频面部特效。

进一步的,视频导入编辑子模块为包括如下工作流程的视频输入编辑子模块:导入视频、提取每帧视频图像、人脸检测、对主动外观模型初始化、匹配面部特征点以及获取面部特征点点集;贴图定义编辑子模块为包括如下工作流程的贴图定义编辑子模块:自定义并存储贴图、修改贴图控制点及计算贴图控制点的位置参数、对贴图图像进行变形;效果调整子模块为包括如下工作流程的效果调整子模块:选择显示/不显示面部特征点、对视频和贴图进行明暗处理、对视频和贴图进行透明度处理以及将贴图叠加至视频中人脸的指定贴图区域。

进一步的,还包括采集模块,采集模块包括相机检测和设置子模块、视频播放子模块、拍照子模块、录像子模块、存储子模块和面部特征标记子模块;

相机检测和设置子模块能够外接相机,并能够设置相机参数以及设置保存位置,所述保存位置为相机拍摄的图像的保存位置;视频播放子模块能够存储并播放用作表情模仿的基本表情图像;拍照子模块与相机检测和设置子模块连接,能够通过相机拍摄具有采集对象的人脸的图像,并生成图像文件;录像子模块与相机检测和设置子模块连接,能够通过相机录制具有采集对象的人脸的视频图像,并生成图像文件;面部特征标记子模块分别与拍照子模块和录像子模块连接,能够对通过拍照子模块拍摄的图像中的人脸或通过录像子模块录制的视频图像中的人脸进行面部特征点标记,并生成标记文件,标记文件和图像文件一一对应并存储于同一个图像文件夹;存储子模块分别与相机检测和设置子模块、拍照子模块、录像子模块、视频播放子模块、面部特征标记子模块以及视频导入编辑子模块连接,上述基本表情图像和图像文件夹均存储于存储子模块。

本发明的视频面部贴图特效处理方法及生成系统具有以下优点:

1、本发明支持用户自行导入喜欢的图像或设计的图案加入到人脸视频(包括已录制成文件的视频和实时摄像头输入视频)中,生成贴图效果,符合使用者个性化需求,增加了使用者的参与度,利于视频特效添加由开发者分发模板向大众创造的方式发展;

2、本发明对人脸的面部特征点定位,并获取贴图控制点在当前帧视频图像中人脸上的坐标,并通过面部特征点在人脸上的位置以及相互之间的相对比例关系计算贴图控制点的位置参数,通过贴图控制点的位置参数反应贴图图像与视频中人脸的指定贴图区域之间相对位置关系,从而可计算贴图控制点在每帧视频图像中人脸上的坐标,根据在贴图控制点在每帧视频图像中人脸上的坐标对贴图图像进行变形,从而可支持使用者编辑贴图的位置并对贴图图像进行变形,改变贴图图像的大小和尺寸,便于使用者将贴图调整为合适的尺寸,并保证贴图在视频中与人脸的指定贴图区域保持相对位置关系,即贴图可随着人脸的表情适应性变形;

3、本发明对贴图透视变换后,通过线性插值对变形后的贴图图像进行填充,避免了变形后贴图图像可能存在缺失点的问题;

4、本发明通过视频中人脸的指定贴图区域的hsv颜色空间的v分量对贴图图像进行明暗处理,调整贴图图像的亮度,贴图图像可与视频中人脸的纹理的明暗情况以及光照影响保持一致,避免当光照变化时(如阴阳脸),贴图图像不会随之变化的问题;

5、本发明支持使用者对贴图和视频进行透明度调节,便于通过线性叠加的方式将贴图叠加至视频中人脸的指定贴图区域;

6、本发明通过视频导入编辑子模块可选择性的导入视频,通过贴图定义编辑子模块和效果调整子模块可对贴图特效进行选择、定义和编辑,并可将处理后的贴图叠加到视频中,便于使用者实际操作进行视频面部特效处理,并可验证上述视频面部特效处理方法;

7、本发明通过采集模块可生成图像文件以及标记文件,图像文件和标记文件生成主动外观模型,对主动外观模型进行训练后,可通过主动外观模型对输入的视频中的人脸进行面部特征点匹配,从而获取输入的视频中人脸的面部特征点。

8、本发明实现了使用者对贴图特效的定义及编辑,体现了用户需求个性化,具有互动性,且结构简单、便于操作。

附图说明

下面结合附图对本发明进一步说明。

附图1为实施例1视频面部贴图特效处理方法的流程框图;

附图2为实施例1视频面部贴图特效处理方法中步骤s1的流程框图;

附图3为实施例1视频面部贴图特效处理方法中步骤s2的流程框图;

附图4为实施例2视频面部贴图特效处理方法的流程框图;

附图5为实施例2视频面部贴图特效处理方法中步骤s3中通过视频中人脸的指定贴图区域的hsv颜色空间的v分量对变形后的贴图图像进行明暗处理的流程框图;

附图6为实施例3视频面部贴图特效生成系统的结构框图;

附图7为实施例4视频面部贴图特效生成系统的结构框图。

具体实施方式

参照说明书附图和具体实施例对本发明的视频面部贴图特效处理方法及生成系统作以下详细地说明。

实施例1:

如附图1、附图2和附图3所示,视频面部贴图特效处理方法,视频面部贴图特效处理方法,将任意图像作为贴图附于输入的视频中人脸的任意位置上,且贴图在视频中保持与人脸的指定贴图区域相对位置的固定,包括如下步骤:

(1)、对视频中人脸进行特征定位,获取人脸的面部特征点;

(2)、将选取的图像导入视频中人脸上作为贴图,贴图包括贴图图像和贴图控制点,通过贴图控制点和与其对应的人脸的面部特征点计算贴图控制点的位置参数,通过贴图控制点的位置参数对贴图图像进行变换处理,贴图控制点的位置参数能够标识贴图图像与视频中人脸的指定贴图区域之间的相对位置关系;

(3)、将变换处理后的贴图叠加至视频中人脸的指定贴图区域。

其中,步骤(1)为对视频进行人脸检测,确定输入的视频图像中存在人脸,然后对视频图像中人脸尽心面部特征点定位,即从输入的视频图像中的人脸上找到关键位置,如眼睛(包含瞳孔、眼角等)、鼻子(包含鼻、鼻翼)、嘴(包含嘴角、唇峰等)、眉毛以及面部轮廓点。具体包括如下步骤:

1)、导入视频,并通过haarcascade方法对视频进行人脸检测,如果视频图像中存在人脸,则返回人脸在视图图像中的位置和范围,其中视频可以是摄像头实时输入的视频,也可以为录制好的视频;

2)、通过主动外观模型对视频中人脸进行面部特征点定位,在视频中人脸上标记多个面部特征点,并保存每个面部特征点的编号及坐标,生成面部特征点点集。

在上述步骤1)实现过程中,输入视频允许使用摄像头实时输入和录制好的视频文件输入两种方式。

对每帧视频图像进行人脸检测过程中,使用opencv中的haarcascade方法,人脸检测的实现如下:

__cascade=(cvhaarclassifiercascade*)cvload(cascade_name,0,0,0);

__storage=cvcreatememstorage(0);

cvseq*faces=cvhaardetectobjects(image,__cascade,__storage,1.1,10,cv_haar_do_canny_pruning,cvsize(100,100));

检测使用opencv中训练的haarcascade_frontalface_alt_tree.xml,通常本文所涉及的实验图像中只有一个人脸,故cvhaardetectobjects的返回值序列faces中若不为空则表明找到了人脸,取出其中的矩形区域,即为人脸区域r,具体为:cvrect*r=(cvrect*)cvgetseqelem(faces,0);。

步骤2)中,通过主动外观模型对视频中人脸进行面部特征点定位,具体包括如下步骤:创建主动外观模型、对主动外观模型进行训练、匹配特征点以及连续帧处理。

创建主动外观模型过程中,通过摄像机拍摄七幅基本表情图像,将每幅基本表情图像保存为jpg格式的图像文件,通过timcootesandisbefolk的markuptools工具集对每幅基本表情图像上的特征点进行人工标记,生成pts格式的标记文件,标记文件包括对应的图像中人脸上的六十八个特征点的坐标信息,上述图像文件和标记文件一一对应并保存于同一个图像文件夹中,主动外观模型通过对上述七幅基本表情图像的形状和纹理分别进行主成分分析(pca)得到构成其形状和纹理的正交向量,由于pca的特点,每个形状的正交向量均表示一种基本面部特征变化模式,通过线性叠加可拟合出各种人脸面部特征的变化。

对主动外观模型进行训练过程中,训练完成后的主动外观模型保存其平均形状、平均纹理、三角化顶点和包围的像素点仿射系数以及雅柯比矩阵为文件,用于匹配。

匹配特征点过程中,通过图像金字塔逐级匹配的方式,对主动外观模型和视频图像进行人脸的面部特征点的匹配,从而实现对视频中人脸面部特征点的定位。具体地,使用opencv和c++实现,对于输入的图像image,使用编写的aam模型程序进行特征点匹配,具体函数为fit(constiplimage*image,shape&shape),shape为返回结果。匹配的迭代过程的主要代码部分如下:

本实施例中使用的最大迭代次数为15,若一直未能收敛,则到15次自动停止迭代;训练库中包含正面朝向的基本表情和上下左右四个朝向的图像,以尽可能确保面部特征匹配在实际应用时的鲁棒性。主动外观模型本身是线性模型,其训练和匹配过程表明训练集覆盖待匹配对象越全,匹配效果越好,所以使用多种基本表情进行训练可提高模型的面部特征的正确识别率。

连续帧处理过程中,对于视频这类连续帧之间面部特征点配准问题,可以充分利用前后帧关系,以提高效率。前序帧的面部特征点匹配结果可以用来估计当前帧的面部特征点位置,预测的点坐标可以用来作为主动外观模型的输入,可以加快迭代速度,减少匹配失败的几率,从而提高匹配的精度。通过特征跟踪的方式估计当前面部特征点的位置,采用光流法预测到下一帧的平移,然后将上一帧的匹配结果进行平移获得对下一帧进行特征定位迭代的初值。

其中,光流是一种方便易用的连续视频中描述运动的方式,它描述了随着视频流的方向图像中物体运动时在相邻帧中的位置变化和移动速度。

主动外观模型虽然使用全局纹理匹配的方式进行面部特征点的定位,相比主动形状模型等局部优化的方法,有效地避免了局部极值的情况,但也仅对于初值偏离不太大时成立,如果迭代优化时初值的选择不好,仍会出现无法收敛而导致定位失败,所以在使用主动外观模型进行特征点定位前,需要首先给出一个估计的初始值,以便后续进行迭代,而且主动外观模型的初始值对于其匹配影响很大,差的初始值可能会导致其优化失败。对于输入的视频首帧和其后的各帧采用了不同的初始化方法。

本实施例中,通过如下方法对首帧以及后续帧的初值进行计算:

首帧的初值计算方式为:首先依据检测的人脸的范围对平均脸形状进行变形,变形后的形状作为进行面部特征匹配的主动外观模型的初始值,计算检测的人脸范围r(viola-jones人脸检测的结果是个矩形区域)与平均脸形状之间的比例关系,然后对平均脸形状进行缩放和平移。计算方法如下:

xm=xm*(r→width/shape.width)+r→x+0.5*r→width

ym=ym*(r→height/shape.height)+r→y+0.5*r→height

xm、ym为编号为m的面部特征点,r→width为检测出的人脸区域的宽度,r→height为检测出的人脸区域的高度,r→x和r→y为检测出的人脸矩形范围的左上角坐标,shape.width和shape.height为平均脸的宽度和高度。

平均脸形状由组成该形状的面部特征点构成,形式如{x0,y0,x1,y1……xn,yn},其中xm、ym为编号为m的面部特征点在其局部坐标系中的坐标。其局部坐标系的原点位于所有特征点的重心。

后续帧的初值的计算方式为:后续帧的初值使用klt光流法和前帧的匹配结果,使用前帧的面部特征点匹配结果和灰度图估计运动情况,采用15*15的窗口,其实现可以通过调用函数cvcalcopticalflowpyrlk实现:

voidcvcalcopticalflowpyrlk(constcvarr*prev,constcvarr*curr,cvarr*prev_pyr,cvarr*curr_pyr,constcvpoint2d32f*prev_features,cvpoint2d32f*curr_features,intcount,cvsizewin_size,intlevel,char*status,float*track_error,cvtermcriteriacriteria,intflags);

其中各参数的含义如下:

prev在时间t的第一帧

curr在时间t+dt的第二帧

prev_pyr第一帧的金字塔缓存

curr_pyr当前帧的金字塔缓存

prev_features需要发现光流的点集

curr_features包含新计算出来的位置的点集

count特征点的数目

win_size每个金字塔层的搜索窗口尺寸

level最大的金字塔层数。如果为0,不使用金字塔(即金字塔为单层),如果为1,使用两层,下面依次类推。

步骤(2)将选取的图像导入视频中人脸上,并通过在当前帧视频图像中贴图控制点和与其对应的面部特征点计算贴图控制点的位置参数,贴图控制点的位置参数反应贴图图像与视频中人脸的指定贴图区域之间的相对位置关系,通过贴图控制点的位置参数计算贴图控制点在每一帧视频图像中人脸上的坐标,进而可通过贴图控制点的坐标对贴图图像进行变形,使得贴图图像可投射到视频中人脸的指定位置,并在视频中保持与人脸的指定位置的相对位置的固定。具体包括如下步骤:导入贴图、计算每个贴图控制点的位置参数以及在每一帧视频图像中,通过贴图控制点的坐标对贴图图像进行透视变换。

导入贴图过程中,选取一个图像导入视频中人脸上,该图像为贴图图像,获取围成贴图图像的贴图控制点,并记载贴图控制点在当前帧视频图像中人脸上的坐标。图像可以是opencv支持的任意格式图像,在实施过程中,每个贴图控制点的定义使用结构体描述,如下所示:

其中tvertex[3]为与控制点最近邻的三个不共线的面部特征点的编号,编号的定义参见3.3.3小节图3.4。pointposition[2]为分段线性仿射系数α和β。

为了方便找到控制点文件,本实施例中自行定义了控制点文件的格式,存储的控制点文件的主文件名与对应的贴图特效图像文件名一致,扩展名定义为.ctp,存储为纯文本形式,其具体格式为:

version:版本号

n_points:控制点个数

point控制点序号第一个特征点编号第二个特征点编号第三个特征点编号α和β值

……

point控制点序号第一个特征点编号第二个特征点编号第三个特征点编号α和β值

以眼镜的四个控制点为例,该文件的内容如下:

version:1

n_points:4

point0121271.45566-0.786139

point14415140.9339480.170262

point221271.178720.013636

point35413141.063710.0444363。

计算每个贴图控制点的位置参数的方法为,在上述定位的面部特征点中选取多个面部特征点,上述选取的多个面部特征点为在当前帧视频图像中人脸上与贴图控制点所在像素点接近的面部特征点,且上述选取的多个面部特征点不共线,通过上述选取的多个面部特征点在人脸上的位置以及相互之间的相对比例关系计算贴图控制点的位置参数,通过贴图控制点的位置参数能够计算贴图控制点在每一帧视频图像中人脸上的坐标。

在每一帧视频图像中,通过贴图控制点的坐标对贴图图像进行透视变换。

其中,计算每个贴图控制点的位置参数的具体实现方法为:

1)、在上述定位的人脸的面部特征点中选取三个面部特征点pi、pj和pk,上述三个面部特征点为在当前帧视频图像中人脸上与贴图控制点所在的像素点接近的三个面部特征点,三个面部特征点的编号分别为n1、n2和n3,面部特征点pi的坐标为(pi.x,pi.y),面部特征点pj的坐标为((pj.x,pj.y),面部特征点pk的坐标为((pk.x,pk.y);

2)、判断上述三个面部特征点是否共线,如果上述三个面部特征点共线,替换其中的一个面部特征点,如果上述三个面部特征点不共线,通过分段线性仿射计算上述三个面部特征点的仿射参数α和β,

其中,(p.x,p.y)为贴图控制点在当前视频帧中人脸上的坐标;

3)、通过上述三个面部特征点的编号以及仿射参数组成对应的贴图控制点的位置参数,贴图控制点的位置参数为(n1,n2,n3,α,β);

4)、通过贴图控制点的位置参数计算与其对应的贴图控制点在每帧视频图像中人脸上的坐标,其中p.x=pi.x+α(pj.x-pi.x)+β(pk.x-pi.x),p.y=pi.y+α(pj.y-pi.y)+β(pk.y-pi.y)。

上述步骤2)中,设定a=(pj.x-pi.x,pj.y-pi.y),b=(pk.x-pi.x,pk.y-pi.y),如果|a×b|=0,则判定选取的三个面部特征点共线。

在实际执行过程中,贴图的每个贴图控制点均可用鼠标在视频图像上进行位置修改,通过点选选中贴图控制点,然后使用鼠标拖曳即可调整贴图控制点的位置,也可使用系统界面上控制点面板进行输入,修改后效果立刻应用到当前帧的视频图像上。调整时的贴图控制点位置的计算采用类似分段线性仿射的方法逐点计算,当拖曳结束松开鼠标左键时,执行以下操作:

1)、获取当前控制点位置(point.x,point.y);

2)、从当前帧视频图像的面部特征点中查找最近邻的三个面部特征点nearpoints[3];

3)、若三个面部特征点共线,转3),否则转5);

4)、替换第三个点,转3);

5)、计算内点的参数α和β。

若有多个点同时被拖曳,则对每一个贴图控制点执行上述操作。计算完成后nearpoints[3]和参数α和β即为贴图控制点的参数,定位当前帧视频图像中人脸的面部特征点后,就可确定nearpoints[3],从而唯一确定该贴图控制点在视频中的位置,并保持在人脸中的相对位置。当鼠标移动时对选中的贴图控制点进行当前位置和相邻面部特征点计算,并通过线性仿射计算其参数α和β。本实施例中上述三个面部特征点是否共线使用向量叉积为零来判断。

对于贴图控制点超出视频图像中面部范围的情况,使用线性仿射仍可准确定位其位置,此时α和β的值可能会为负值。

在使用贴图时,每个贴图控制点分别获取其对应的三个面部特征点的坐标,然后通过α和β的值算出控制点的当前位置,以第一个贴图控制点为例,求解为:

p=getrealposition(m_pcontrolpointofpatch[0],shape)

其中,m_pcontrolpointofpatch为控制点集,shape为通过主动外观模型匹配出的当前面部特征点点集。getrealposition()函数中按下式计算p的坐标:

p.x=pi.x+α(pj.x-pi.x)+β(pk.x-pi.x)

p.y=pi.y+α(pj.y-pi.y)+β(pk.y-pi.y)。

通过贴图控制点的坐标对贴图图像进行透视变换包括如下分步骤:

1)、采集对应原始贴图图像的贴图控制点的坐标,并采集人脸上指定的面部特征点的坐标,采集的贴图控制点和指定的面部特征点均多个,且上述贴图控制点和指定的面部特征点一一对应;

2)、以上述指定的面部特征点的坐标中的最小值为透视变换原点,以上述指定的面部特征点的坐标中的最大值为透视变换的范围限制,通过上述选取的贴图控制点的坐标以及与其对应的指定的面部特征点的坐标计算透视变换矩阵;

其中,(x,y,1)t为原图像平面中像素(x,y)的齐次坐标,上述3x3的矩阵为投影变换矩阵。求出该变换矩阵后,即可算出该像素在新平面上的投影位置(x'/z',y'/z')t

3)、对原始贴图图像应用透视变换矩阵,实现原始贴图图像的变形;

4)、通过线性插值对变形后的贴图图像进行填充,填充后的贴图图像无缺失点。

在步骤1)中,通过四个对应点的坐标求解上述投影变换矩阵,需找出对应原始贴图图像的四个贴图控制点与视频中人脸上指定的四个面部特征点之间的对应关系,并通过这四对点解出投影变换矩阵,然后应用于原贴图图像上实现变形。

实际执行过程中,依据上述贴图控制点的坐标对贴图图像进行透视变换的步骤,在相关视频面部特效生成系统中进行如下操作:

相关参数定义如下:

原始贴图图像的四个顶点定义为cvpoint2d32fcorners[4];

面部目标位置的四个顶点定义为cvpoint2d32fcorners_trans[4];

根据贴图控制点的坐标中的最小值选择透视变换原点,最大值作为变换的范围限制,否则若有控制点位于原点上方或左侧,会出现负值坐标导致图像缺失。故使用transorigin为原点创建局部坐标系,并将控制点坐标变换到该局部坐标系,corners_trans为控制点集在局部坐标中的坐标。

视频中人脸上指定的四个面部特征点的横纵坐标的最小值定义为局部坐标系原点transorigin和最大值定义为transcend,具体定义为cvpoint2d32ftransorigin,transcend;

透视变换矩阵的定义cvmat*warp_mat=cvcreatemat(3,3,cv_32fc1)。

具体实现步骤如下:

1)、计算每个控制点的实际位置:

m_controlpointofpatch=getrealposition(m_pcontrolpointofpatch,shape);

2)、转换到局部坐标系:

corners_trans=point2f(m_controlpointofpatch-transorigin);

3)、通过原始贴图图像和面部目标位置的对应的四个顶点坐标计算透视变换矩阵:

cvgetperspectivetransform(corners,corners_trans,warp_mat);

4)、应用透视变换:

cvwarpperspective(imagepatch,imagepatch2,warp_mat);

matmatpatch(imagepatch2,true);

透视变换后的有效区域在四个控制点包围的范围内,在进一步操作时,为减少计算量,先对变换后的贴图matpatch进行裁减。将其区域定义在((int)transorigin.x,(int)transorigin.y,(int)(transend.x-transorigin.x),(int)(transend.y-transorigin.y))范围内。

对贴图进行变换处理后,通过线性叠加的方式将导入的贴图图像叠加至视频图像中,并通过透明度控制原视频图像和贴图图像,两者的透明度均可以调整,若使用的是带透明背景的贴图,背景部分透明度为零,不会遮挡或影响原视频的内容。叠加公式为:

dst(x)=alpha*srcvideo(x)+beta*patch(x)+gamma

其中x为视频中贴图区域的像素,且贴图图像上x点的颜色不为透明背景色(非gif格式可用纯黑或纯白作为透明背景)。dst为叠加结果,alpha为原始输入视频(srcvideo)透明度,beta为贴图(patch)透明度,gamma为修正,测试中采用的是原始视频默认不透明,即100%透明度,贴图图像一般采用50%,两个透明度在均可进行调整。

综上,本发明视频面部贴图特效处理方法,首先,将贴图图像导入视频中人脸上,根据在当前帧中贴图控制点和与其邻近的面部特征点计算贴图控制点的位置参数,通过贴图控制点的位置参数可得出贴图控制点在视频中人脸上的相对位置关系,从而在每一个视频帧中可根据贴图控制点的位置参数计算贴图控制点的坐标;然后通过贴图控制点的坐标对贴图图像进行透视变换,改变贴图图像的大小和形状,使得贴图图像能够投射到视频中人脸的指定贴图区域;最后,对视频和贴图进行透明度调整后,通过线性叠加的方式将贴图叠加到视频中人脸的指定贴图区域。

作为本实施例的进一步改进,在对人脸进行面部特征定位时,可以通过现有的其他面部特征定位方法来进行,如选用特征检测法、变形模板法、点分布模型、级联形状回归模型等。

实施例2:

如附图4和附图5所示,本实施例为在实施例1基础上的进一步改进,本实施例与实施例1的区别为:步骤(3)中,为了解决贴图需与视频中人脸的纹理的明暗情况以及光照影响保持一致,避免当光照变化时(如阴阳脸),贴图不会随之变化的问题。我们使用视频中人脸的指定贴图区域的hsv颜色空间的v分量对变形后的贴图图像进行明暗处理,将明暗处理后的贴图通过线性叠加的方式叠加至输入的视频中人脸的指定位置。

通过视频中人脸的指定贴图区域的hsv颜色空间的v分量对变形后的贴图图像进行明暗处理,具体包括如下步骤:

1)、对视频进行颜色空间转换,视频由rgb颜色空间转换为hsv颜色空间,对变形后的贴图进行颜色空间转换,贴图由rgb颜色空间转换为hsv颜色空间;

2)、对视频进行分解,得到视频的h通道、视频的s通道和视频的v通道,对变换后的贴图进行分解,得到贴图的h通道、贴图的s通道和贴图的v通道;

3)、对视频的v通道进行除均值,得到视频的像素的v值相对于视频的像素的均值的均值倍率图,将均值倍率图叠加至贴图的v通道,得到贴图的w通道;

4)、将贴图的w通道、贴图的h通道和贴图的s通道合并;

5)、对视频进行颜色空间转换,视频由hsv颜色空间转换为rgb颜色空间,对贴图进行颜色空间转换,视频由hsv颜色空间转换为rgb颜色空间。

上述步骤1)中,涉及到rgb和hsv颜色空间的相互转换,算法如下:

rgb转hsv算法实现:

max=max(r,g,b)min=min(r,g,b)

if(r=max)h=(g-b)/(max-min)

if(g=max)h=2+(b-r)/(max-min)

if(b=max)h=4+(r-g)/(max-min)

h=h*60

ifh<0h=h+360

v=max(r,g,b)

s=(max-min)/max

hsv转rgb算法实现:

if(s=0)r=g=b=velseh=h/60

i=(int)hf=h-i

a=v*(1-s)b=v*(1-s*f)c=v*(1-s*(1-f))

if(i=0)r=vg=cb=a

if(i=1)r=bg=vb=a

if(i=2)r=ag=vb=c

if(i=3)r=ag=bb=v

if(i=4)r=cg=ab=v

if(i=5)r=vg=ab=b

对贴图进行明暗处理后,通过线性叠加的方式将导入的贴图图像叠加至视频图像中,并通过透明度控制原视频图像和贴图图像,两者的透明度均可以调整,若使用的是带透明背景的贴图,背景部分透明度为零,不会遮挡或影响原视频的内容。

dst(x)=alpha*srcvideo(x)+beta*patch(x)+gamma

其中x为视频中贴图区域的像素,且贴图图像上x点的颜色不为透明背景色(非gif格式可用纯黑或纯白作为透明背景)。dst为叠加结果,alpha为原始输入视频图像(srcvideo)透明度,beta为贴图图像(patch)透明度,gamma为修正,采用的是原始视频默认不透明状态时,即100%透明度,贴图图像一般采用50%,两个透明度在均可进行调整。

本实施例中,对视频中的贴图区域中,默认将白色或黑色当作透明背景,并在叠加时去除。为防止自行导入的自定义贴图图像中白色和黑色的误差,将rgb值同时在0~5范围内和235~255范围内的均进行了去除。

主要实现步骤如下:

1)、从获取叠加透明度alpha和beta值;

2)、对叠加区域中的所有像素点进行循环操作,判定当前像素点j是否属于透明背景,若是背景不进行叠加,继续判定下一个像素点,否则转步骤3)进行叠加,所有像素点均判定完转4);

判断是否需要透明处理:src2_ptr[j]<=5||(src2_ptr[j]>=235,因为上述明暗处理过程的步骤5)转回rgb颜色空间过程中,会由于v值的叠加导致部分背景变的不再属于透明背景色的判定范围,进而导致叠加结果产生噪声,因而在实现时需使用最早输入的原始贴图图像作为判断透明背景的依据;

3)、叠加操作

叠加:dst_ptr[j]=saturate_cast<uchar>(src1_ptr[j]*alpha+src3_ptr[j]*beta);

其中src1_ptr、src2_ptr、src3_ptr分别指向image_roi(原视频指定贴图区域)、matpatch(原始贴图)、matpatch_rgb(明暗处理后贴图)。叠加操作后转回步骤2)。

4)、绘制显示,即在对应的视频面部特效生成系统中显示。

综上,本发明视频面部贴图特效处理方法,首先,将贴图图像导入视频中人脸上,根据在当前帧中贴图控制点和与其邻近的面部特征点计算贴图控制点的位置参数,通过贴图控制点的位置参数可得出贴图控制点在视频中人脸上的相对位置关系,从而在每一个视频帧中可根据贴图控制点的位置参数计算贴图控制点的坐标;然后通过贴图控制点的坐标对贴图图像进行透视变换,改变贴图图像的大小和形状,使得贴图图像能够投射到视频中人脸的指定贴图区域;然后对贴图进行明暗处理,使得明暗处理后的贴图图像的亮度与视频中人脸上指定贴图区域的亮度接近;最后,对视频和贴图进行透明度调整后,通过线性叠加的方式将贴图叠加到视频中人脸的指定贴图区域。

实施例3:

如附图6所示,本发明的视频面部贴图特效生成系统,包括显示模块、功能模块和提示模块,功能模块包括视频导入编辑子模块、贴图定义编辑子模块和效果调整子模块;视频导入编辑子模块与显示模块连接,能够选择视频源并导入视频,能够对每帧视频图像编号,并能够对视频进行人脸检测和人脸面部特征点定位;贴图定义编辑子模块与显示模块连接,能够载入作为贴图的图像,并能够编辑并保存贴图控制点的位置参数;效果调整子模块分别与视频导入编辑子模块、贴图定义编辑子模块及显示模块连接,能够调整视频和贴图的透明度和亮度,并能够选择显示视频中人脸的面部特征点或选择不显示视频中人脸的面部特征点;提示模块分别与视频导入编辑子模块和显示模块连接,能够通过显示当前帧视频的计算时间,并能够通过显示鼠标当前位置在视频上的坐标实现辅助调整贴图控制点的位置;显示模块能够显示视频以及导入的贴图,并能够显示上述视频导入编辑子模块、贴图定义编辑子模块、效果调整子模块以及提示模块的操作界面。

上述显示模块、功能模块和提示模块可通过工具界面的形式与使用者进行互动。使用者可通过鼠标及键盘在工具界面上操作,在显示模块、功能模块和提示模块的配合下,实现视频面部贴图特效的处理和生成。

其中,视频导入编辑子模块包括如下工作流程:导入视频、提取每帧视频图像、人脸检测、对主动外观模型初始化、匹配面部特征点以及获取面部特征点点集,相应的,视频导入编辑模块包括视频导入编辑子模块包视频导入单元、视频图像提取单元、人脸检测单元、主动外观模型初始化单元、面部特征点匹配单元和获取面部特征点点集单元。具体如下:

视频导入单元包括摄像头、视频导入接口和视频源选择子单元,视频源选择子单元分别与摄像头和视频导入接口连接,摄像头和视频导入接口分别与显示模块连接,摄像头可设置为内置摄像头,也可设置为外置摄像头,摄像头导入实时拍摄的视频,视频导入接口可与存储视频的设备连接,用于导入录制好的视频,视频源选择子单元用于选择通过摄像头导入实时拍摄的视频或者通过视频导入接口导入录制好的视频。

视频图像提取单元与摄像头和视频导入接口连接,用于从导入的视频中提提取每帧视频图像。

人脸检测单元与视频图像提取单元连接,配置有opencv中的haarcascade方法,用以对每帧视频图像进行人脸检测,判断当前帧视频图像中是否存在人脸。

主动外观模型初始化单元对主动外观模型进行初始化,主动外观模型属于迭代优化,需要首先给出一个初始值,而且主动外观模型的初始值对于其匹配影响很大,差的初始值可能会导致其优化失败。对于输入的视频首帧和其后的各帧采用了不同的初始化方法。本实施例中按照实施例1中公开的主动外观模型初始化方法进行。

面部特征点匹配单元分别与主动外观模型初始化单元和视频图像提取单元连接,通过主动外观模型对每帧视频图像中的人脸进行面部特征点进行匹配并定位。

获取面部特征点点集单元与面部特征点匹配单元连接,获取每帧视频图像中人脸的面部特征点,并保存至对应的面部特征点点集中。

上述摄像头、视频导入接口、视频图像提取单元、人脸检测单元、主动外观模块初始化子单元、面部特征点匹配单元以及获取面部特征点点集单元均与显示模块连接,显示模块配置有显示屏,通过显示屏可观看视频及贴图以及上述视频导入、视频图像提取、人脸检测、主动外观模型初始化、面部特征点匹配以及获取面部特征点点集过程中的操作过程。

贴图定义编辑子模块包括如下工作流程:自定义并存储贴图、修改贴图控制点及计算贴图控制点的位置参数、对贴图图像进行变形,相应的,贴图定义编辑子模块包括贴图存储单元、贴图控制点位置修改单元、贴图变形单元。具体如下:

贴图存储单元与获取面部特征点点集单元连接,并外接贴图存储器,可导入作为贴图的图像,该图像为贴图图像,并获取包围该贴图图像的贴图控制点,上述贴图图像和贴图控制点组成贴图参数,贴图存储单元保存上述贴图参数。

贴图控制点位置修改单元与贴图存储单元及获取面部特征点点集单元连接,贴图控制点位置修改单元与鼠标连接,支持通过鼠标点选的方式拖动贴图控制点来选择或修改贴图控制点,同时支持获取视频图像中与选定的贴图控制点临近的三个面部特征点,并可依据三个面部特征点的坐标计算贴图控制点的位置参数,贴图控制点的位置参数表示贴图控制点和指定贴图区域的相对位置关系,从而通过贴图控制点的位置参数可得出贴图控制点在当前帧视频图像中的坐标。

贴图变形单元与贴图存储单元和贴图控制点位置修改单元连接,贴图变形单元外接鼠标,通过贴图控制点的位置参数对贴图图形进行透视变换,使得贴图图像的大小和尺寸满足当前帧视频图像的指定贴图区域的要求,并得到预设的特效效果。透视变换的计算方法如实施例1所示,通过四个对应点的坐标求解上述投影变换矩阵,需找出对应原始贴图图像的四个贴图控制点与视频中人脸上指定的四个面部特征点之间的对应关系,并通过这四对点解出投影变换矩阵,然后应用于原贴图图像上实现变形。

效果调整子模块包括如下流程:选择显示/不显示面部特征点、对视频和贴图进行明暗处理、对视频和贴图进行透明度处理以及将贴图叠加至视频中人脸的指定贴图区域,相应的,效果调整子模块包括面部特征点显示/不显示单元、明暗处理单元和叠加单元。具体如下:

面部特征点显示/不显示单元与获取面部特征点点集单元和显示模块连接,且面部特征点显示/不显示单元外接鼠标和键盘,支持通过鼠标点击或键盘输入的方式选择显示视频中人脸的面部特征点或不显示视频中人脸的面部特征点;

在输入视频中,由于光照原因,人脸的面部会存在明暗变化,对于贴图图像需要依据上述明暗变化进行相应的处理,使得贴图效果自然,基于此,明暗处理单元分别与获取面部特征点点集单元和贴图变形单元连接,通过视频中人脸的指定贴图区域的v通道对贴图图像进行亮度处理,使得贴图图像的明暗适应视频的明暗状态。具体地,该明暗处理单元选用支持实施例2中公开的明暗处理方法的明暗处理单元。

叠加单元分别与获取面部特征点点集单元和贴图变形单元连接,叠加单元可对视频图像和贴图图像进行透明度调整,并支持将贴图图像通过线性叠加的方式叠加至视频图像中人脸的指定贴图区域。

提示模块分别与上述视频导入单元、视频图像提取单元、人脸检测单元、主动外观模型初始化单元、面部特征点匹配单元、获取面部特征点点集单元以及显示模块连接,支持通过显示当前帧视频图像的计算时间,并支持通过显示鼠标当前位置在视频上的坐标实现辅助调整贴图控制点的位置,提示模块汇获取的上述计算时间以及鼠标当前位置在视频上的坐标通过显示模块呈现给使用者。

本实施例视频面部贴图特效生成系统可实现自定义并编辑贴图图像,并将贴图叠加至视频中,实现视频面部贴图特效,可执行实施例1或实施例2公开的视频面部贴图特效处理方法。具体地,通过视频导入编辑子模块导入视频,并对视频中人脸进行面部特征点定位,通过贴图定义编辑子模块自定义贴图图像并通过面部特征点与贴图控制点的相对位置关系对贴图图形进行编辑变形,通过效果调整子模块对视频和贴图图像进行明暗处理及透明度处理,并将贴图叠加至视频中人脸的指定贴图区域,从而自定义并自动编辑的生成视频面部特效。

实施例4:

如附图7所示,本实施例为在实施例3基础上的进一步改进,本实施例与实施例3的区别为:还配置有采集模块,采集模块包括相机检测和设置子模块、视频播放子模块、拍照子模块、录像子模块、存储子模块和面部特征标记子模块。具体功能如下:

相机检测和设置子模块外接相机,并支持设置相机参数以及设置保存位置,保存位置为相机拍摄的图像的保存位置;

视频播放子模块用于存储并播放用作表情模仿的基本表情图像,视频播放子模块可配置视频接口,用于外接视频存储设备,或者视频播放子模块可配置数据传输接口如usb接口,用于接收存储有用于表情模仿的视频文件;

拍照子模块与相机检测和设置子模块连接,配置有相机,通过相机拍摄具有采集对象的人脸的图像,并生成图像文件;

录像子模块与相机检测和设置子模块连接,配置有相机,通过相机录制具有采集对象的人脸的视频图像,并生成图像文件;

面部特征标记子模块分别与拍照子模块和录像子模块连接,对通过拍照子模块拍摄的图像中的人脸或通过录像子模块录制的视频图像中的人脸进行面部特征点标记,并生成标记文件,标记文件和图像文件一一对应并存储于同一个图像文件夹,面部特征标记子模块配置有存储器,存储器用于存储上述图像文件夹;

存储子模块分别与相机检测和设置子模块、拍照子模块、录像子模块、视频播放子模块、面部特征标记子模块以及视频导入编辑子模块连接,上述基本表情图像和图像文件夹均存储于存储子模块。

其中,采集模块的上述子模块集中于两个窗体,主窗体和显示窗体,主窗体用于功能集成,显示窗体用于为被采集对象呈现图像。主窗体由三部分构成,包括相机检测和监控窗口、配置区、被采集对象区,配置区包括相机参数的设置、保存位置的设置、拍照以及录像,被采集对象区包括播放基本表情、当前采集对象的基本信息的填写以及对采集图像进行归类命名存放。

相机检测和设置子模块中,枚举当前系统上连接的相机设备,并列于列表中,通过调用edsdk的edsgetcameralist方法实现。目前edsdk支持的设备包括主流的canon相机。设置功能包括av(光圈优先)、tv(快门优先)、iso(感光度)、bulbs(快门速度)、wb(白平衡)以及色温设置。选择列表中的相机,打开设备后,可以打开监视窗口用于观测当前相机镜头所摄制内容。

视频播放子模块在播放基本表情时,需有打开单独的窗口,并将其显示到被采集对象面前的屏幕上,所需播放的图像预先放置于当前运行目录的基本表情子文件夹中,如需更改播放的内容可用新图像覆盖原图像。

播放的顺序按文件夹中的文件顺序进行,由于每个人模仿能力有差异,时间上无法自动控制,故采集图像由操作人员通过手工拍照方式进行,当观察到被采集对象表情模仿好时(基本不再变化),按下拍照按钮记录图像,然后点下一表情按钮继续播放,重复此过程,直到所有基本表情播放和采集完毕。然后再采集人脸朝向相对相机轴向上下左右各约30度的图像。

拍照子模块,在播放基本表情图像时由操作人员使用,通过调用edsdk.edssendcommand()方法实现,并保存在程序指定的位置,在同一基本表情播放时重复多次拍照将会覆盖上次照片,仅保留最近一个照片。

录像子模块,recordvideobutton_click()事件处理程序用于录像,其中调用edsdk.edssetpropertydata()方法设置写入硬盘或存储卡。

存储子模块,存储可以选择相机、电脑、都存三种方式,可使用浏览按钮进行设置,该设置对拍照和录像均起作用。在调用存储时依据被测人的编号和姓名判断是否存在目录,如不存在将首先创建目录,若存在提示是否覆盖。

文件名的格式为“组名字母_采集对象流水号_图像编号”命名,基本表情图像图像编号依播放的顺序按0-6存储,如1_01_0表示第1组01号的无表情图像。

本实施例视频面部贴图特效生成系统可实现自定义并编辑贴图图像,并将贴图叠加至视频中,实现视频面部贴图特效。具体地,通过采集模块采集对个被采集对象的表情,得到多个表情文件夹,上述多个表情文件夹用作主动外观模型,便于后续通过主动外观模型对视频中人脸的面部特征点进行匹配及定位,通过视频面部贴图特效生成系统导入视频,在采集模块的配合下、对视频中人脸进行面部特征点定位,通过贴图定义编辑子模块自定义贴图图像并通过面部特征点与贴图控制点的相对位置关系对贴图图形进行编辑变形,通过效果调整子模块对视频和贴图图像进行明暗处理及透明度处理,并将贴图叠加至视频中人脸的指定贴图区域,从而自定义并自动编辑的生成视频面部特效。

本实施例视频面部贴图特效生成系统可执行实施例1或实施例2公开的视频面部贴图特效处理方法。

通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的具体实施方式。在公开的实施方式的基础上,所述技术领域的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。除说明书所述的技术特征外,均为本专业技术人员的已知技术。

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