发明内容
针对现有技术的不足,本发明提出一种基于视频的动作捕捉系统及方法,以达到降低成本、不受空间限制和提高动作识别能力的目的。
一种基于视频的动作捕捉系统,该系统包括格式转换模块、图像识别模块、中心点提取模块、三维坐标获取模块、欧拉角获取模块和BVH文件生成模块,其中,
格式转换模块:用于将动作视频转换为AVI格式文件,并将每帧图像上的每个像素由RGB格式转换为HSV格式;
图像识别模块:用于读取转换格式后的每帧图像上的每个像素点的色调、饱和度和亮度;并将每帧图像上的每个像素点的色调、饱和度和亮度,与工作人员纯色服装上的每个关节标志点的色调、饱和度和亮度进行对比,在每帧图像上寻找关节标志点区域;
中心点提取模块:用于通过K中心点算法,在每个关节标志点区域内获取中心点,并确定中心点的坐标值;
三维坐标获取模块:用于将工作人员胯部两个关节标志点之间的中点的Z坐标设置为0,以上述中点为最高级父节点向四周扩散,将步骤6中所述的中心点分级设置子节点,并由最高级父节点向四周扩散分别获取每个节点的三维坐标;
欧拉角获取模块:用于获得每一帧图像上目标节点与上级父节点之间的连线,和直立站立状态下目标节点与上级父节点之间的连线,进而获得上述两条连线所构成的平面,获取上述平面的法向量,及在上述平面内两条连线之间的夹角,将该夹角作为平面上一次性旋转的旋转角度,并在上述平面内,以法向量为转轴,将直立站立状态下目标节点向每一帧图像上目标节点以四元数方式转动,转动的角度为一次性旋转的旋转角度;在转动过程中,实时判断上级父节点的三维坐标轴的旋转角度是否达到设定范围的最大值,若是,则停止最大转角坐标轴的旋转,再对再上一级的父节点进行其他坐标轴继续旋转,直至达到每一帧图像上目标节点的位置;否则,三维坐标轴继续旋转;并将平面上一次性旋转的旋转角度转换为四元数,再根据所获得的四元数,获得直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角;
BVH文件生成模块:用于根据所获得的欧拉角,生成BVH文件,并导入模型动画软件中显示工作人员的动作动画。
采用基于视频的动作捕捉系统进行的动作捕捉方法,包括以下步骤:
步骤1、工作人员穿上带有不同颜色关节标志点的纯色服装,确定每个关节标志点的色调、饱和度和亮度;
步骤2、通过摄像设备获取工作人员动作视频;
步骤3、采用格式转换模块将动作视频转换为AVI格式文件,并将每帧图像上的每个像素由RGB格式转换为HSV格式;
步骤4、采用图像识别模块读取转换格式后的每帧图像上的每个像素点的色调、饱和度和亮度;
步骤5、将每帧图像上的每个像素点的色调、饱和度和亮度,与工作人员纯色服装上的每个关节标志点的色调、饱和度和亮度进行对比,在每帧图像上寻找关节标志点区域;
步骤6、采用中心点提取模块通过K中心点算法,在每个关节标志点区域内获取中心点,并确定中心点的坐标值;
步骤7、采用三维坐标获取模块将工作人员胯部两个关节标志点之间的中点的Z坐标设置为0,以上述中点为最高级父节点向四周扩散,将步骤6中所述的中心点分级设置子节点;
步骤8、采用三维坐标获取模块,由最高级父节点向四周扩散分别获取每个节点的三维坐标,具体步骤如下:
步骤8-1、根据上级父节点的Z坐标、每帧图像上的目标节点与上级父节点之间的距离和目标节点与上级父节点之间的实际骨骼长度,获取每个未遮挡节点的Z坐标;
步骤8-2、确定遮挡前后两帧图像上的目标节点与上级父节点连线之间的夹角,将该夹角除以帧间隔数,获得每帧图像中目标节点之间的夹角,结合该夹角和遮挡前后两帧图像上的目标节点的Z坐标,计算获得被遮挡目标节点的Z坐标;
步骤8-3、完成每个节点的三维坐标的获取;
步骤9、结合实际骨骼情况,采用欧拉角获取模块,在以上级父节点为原点的坐标系下,设定每个关节上的节点的三维坐标轴的旋转角度范围;
步骤10、采用欧拉角获取模块,确定直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角度,具体步骤如下:
步骤10-1、获得每一帧图像上目标节点与上级父节点之间的连线,和直立站立状态下目标节点与上级父节点之间的连线,进而获得上述两条连线所构成的平面;
步骤10-2、获取上述平面的法向量,及在上述平面内两条连线之间的夹角,将该夹角作为平面上一次性旋转的旋转角度;
步骤10-3、并在上述平面内,以法向量为转轴,将直立站立状态下目标节点向每一帧图像上目标节点以四元数方式转动,转动的角度为一次性旋转的旋转角度;
步骤10-4、在转动过程中,实时判断上级父节点的三维坐标轴的旋转角度是否达到设定范围的最大值,若是,则停止最大转角坐标轴的旋转,再对再上一级的父节点进行其他坐标轴继续旋转,直至达到每一帧图像上目标节点的位置;否则,三维坐标轴继续旋转;
步骤10-5、将平面上一次性旋转的旋转角度转换为四元数;
步骤10-6、根据所获得的四元数,获得直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角;
步骤11、采用BVH文件生成模块根据所获得的欧拉角,生成BVH文件,并导入模型动画软件中显示工作人员的动作动画。
步骤8-1所述的获取每个未遮挡节点的Z坐标,具体公式如下:
其中,Zn表示目标节点的Z坐标;Zp表示Zn节点的上级父节点Z坐标;L2表示每帧图像上的目标节点与上级父节点之间的距离,L2=N×L1,N表示每帧图像中,腹部节点与胯部中点之间的距离,L1表示目标节点与上级父节点之间的实际距离除以腹部节点与胯部中点之间的实际距离,所获得的比值;L3表示目标节点与上级父节点之间的实际骨骼长度;
针对于公式(1),±的确定由K确定,若K>1,则取正;若K<1,则取负,若K=1,则取0;K=(S父节点/S子节点)/(M父节点/M子节点),其中,S父节点表示图像中上级父节点大小,S子节点表示图像中目标节点大小,M父节点表示实际中上级父节点大小,M子节点表示实际中目标节点大小。
步骤10-5所述的将上述旋转角度转换为四元数,具体公式如下:
其中,w、x、y、z表示四元数的值;α表示平面上一次性旋转的旋转角度,nx表示法向量的x坐标,ny表示法向量的y坐标,nz表示法向量的y坐标。
步骤10-6所述的根据所获得的四元数,获得直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角,具体公式如下:
其中,表示以上级父节点为原点的三维坐标系中,X轴旋转角度;θ表示以上级父节点为原点的三维坐标系中,Y轴旋转角度;ψ表示以上级父节点为原点的三维坐标系中,Z轴旋转角度;w、x、y、z表示四元数的值。
本发明优点:
该基于视频的动作捕捉系统及方法具有如下优点:
(1)、使用该系统及方法设备简单,成本较少;
(2)、只要摄像机可以录到演员全身即可,不易受到设备的空间限制;
(3)、只要在视觉上可以识别的即可捕捉到。
具体实施方式
下面结合附图对本发明一种实施例做进一步说明。
本发明实施例中,如图1所示,基于视频的动作捕捉系统包括格式转换模块、图像识别模块、中心点提取模块、三维坐标获取模块、欧拉角获取模块和BVH文件生成模块,其中,
格式转换模块用于将动作视频转换为AVI格式文件,并将每帧图像上的每个像素由RGB格式转换为HSV格式;图像识别模块用于读取转换格式后的每帧图像上的每个像素点的色调、饱和度和亮度;并将每帧图像上的每个像素点的色调、饱和度和亮度,与工作人员纯色服装上的每个关节标志点的色调、饱和度和亮度进行对比,在每帧图像上寻找关节标志点区域;中心点提取模块用于通过K中心点算法,在每个关节标志点区域内获取中心点,并确定中心点的坐标值;三维坐标获取模块用于将工作人员胯部两个关节标志点之间的中点的Z坐标设置为0,以上述中点为最高级父节点向四周扩散,将所述的中心点分级设置子节点,并由最高级父节点向四周扩散分别获取每个节点的三维坐标;欧拉角获取模块用于获得每一帧图像上目标节点与上级父节点之间的连线,和直立站立状态下目标节点与上级父节点之间的连线,进而获得上述两条连线所构成的平面,获取上述平面的法向量,及在上述平面内两条连线之间的夹角,将该夹角作为平面上一次性旋转的旋转角度,并在上述平面内,以法向量为转轴,将直立站立状态下目标节点向每一帧图像上目标节点以四元数方式转动,转动的角度为一次性旋转的旋转角度;在转动过程中,实时判断上级父节点的三维坐标轴的旋转角度是否达到设定范围的最大值,若是,则停止最大转角坐标轴的旋转,再对再上一级的父节点进行其他坐标轴继续旋转,直至达到每一帧图像上目标节点的位置;否则,三维坐标轴继续旋转;并将平面上一次性旋转的旋转角度转换为四元数,再根据所获得的四元数,获得直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角;BVH文件生成模块用于根据所获得的欧拉角,生成BVH文件,并导入模型动画软件中显示工作人员的动作动画。
采用基于视频的动作捕捉系统进行的动作捕捉方法,方法流程图如图2所示,包括以下步骤:
步骤1、工作人员穿上带有不同颜色关节标志点的纯色服装,确定每个关节标志点的色调、饱和度和亮度;
如图3所示,本发明实施例中,演员需要穿上纯色紧身衣裤,头戴某种颜色的帽子(颜色自定义),图3中,数字1~15表示身上的关节点。其中,1和6表示腕关节,2和5表示肘关节,3和4表示肩关节,7和10表示胯关节,8和11表示膝关节,9和12表示髁关节。13和14表示上下胸和腹部,15表示头部。
本发明实施例中,纯色衣裤在上述的关节部位需要涂上不同的颜色作为标志点,每个点的颜色用户根据需求自定义,本发明实施例中,左右胯部在半圆区域内涂上颜色,半径为13cm,肩部呈三角带状涂色最大宽度9cm,手臂手腕膝盖脚腕呈环形涂色宽度为8cm;并将自定义的颜色值作为参数输入到系统中,此外,还可以直接使用本系统预定义的颜色,本发明实施例中,配置如表1所示:
表1.系统预定义的关节颜色列表
步骤2、通过摄像设备获取工作人员动作视频;
本发明实施例中,使用数码摄像机(也可以是数码照相机和智能手机,使用拍摄功能)对演员的动作进行拍摄,演员与摄像机位置关系如图4所示,其中A表示演员,C表示摄像机,U表示摄像机与演员之间的距离;X表示X方向,Z表示Z方向;
步骤3、采用格式转换模块将动作视频转换为AVI格式文件,并将每帧图像上的每个像素由RGB格式转换为HSV格式;
本发明实施例中,将摄像机所拍摄到的视频格式用一些格式转化工具转化为AVI文件,再对该视频进行读取,将每一帧的每个像素由RGB(红r、绿g、蓝b)格式转换为HSV(色调h、饱和度s、亮度v)格式;其中,r表示像素的红色(0-255)分量,g,表示像素的绿色(0-255)分量,b表示像素的蓝色(0-255)分量,h表示色调(0-360),s表示饱和度(0-1),v表示亮度(0-1);
其转换算法如下:
令max为r、g、b三个分量的最大值;min为r、g、b分量的最小值,则有:
v=max (6)
由于拍摄时的环境光和相机的感光度不同。,因此,可使用光参数来调整亮度值(作补偿用),该值可有用户自行输入,算法是把转换后的HSV值的v分量乘以光参数(光参数为1.0,则不需要计算)。
本发明实施例中,若用户使用的不是系统预设的HSV值,则根据实际使用的颜色值,手工输入到系统提供的参数输入对话框中(如表2所示),以保证系统能够正确识别和计算。
表2自定义识别参数
本发明实施例中,表2中节点大小演员服装上每个关节标志点半径与标准标志点半径的比值,本实施例中,选取手腕处关节标志点半径为变准标志点;表2中距父节点长度:为演员服装上,目标节点与上级父节点之间的长度除以腹部节点与胯部中点之间的距离的比值;
步骤4、采用图像识别模块读取转换格式后的每帧图像上的每个像素点的色调、饱和度和亮度;
步骤5、将每帧图像上的每个像素点的色调、饱和度和亮度,与工作人员纯色服装上的每个关节标志点的色调、饱和度和亮度进行对比,在每帧图像上寻找关节标志点区域;
步骤6、采用中心点提取模块通过K中心点算法,在每个关节标志点区域内获取中心点,并确定中心点的坐标值;
本发明实施例中,分析视频数据中演员关节标识点的数据,计算得到其对应的三维空间坐标数据。方法如下:
使用K中心点算法(本实施例中,K=1),计算出关节点在图像中的二维坐标,算法描述如下:
(a)随机选择1个代表对象作为关节标志点区域内初始的中心点;
(b)随机地选择一个非中心点对象p;
(c)计算用p代替中心点q的总代价s;
(d)如果s为负,则用可用p代替q,形成新的中心点;
(e)重复(b)(c)(d)(e),直到中心点不再发生;
由于扫描颜色时,针对每个像素进行扫描,所以结果会产生该颜色的点云信息(x,y数组),其中,p为任意一个数组成员(不同于q),q为原中心点,s以遍历所有其它节点的距离总和做差值计算;
本发明实施例中,据当前演员姿态分析出骨骼的中心点的位置。由于颜色涂在衣服上,有些点并不能准确代表关节点准确位置,所以要对关节坐标进行调整,调整算法根据不同关节位置而不同,以胯部两点为例:两点以两点为中心进行0.4~0.9倍缩放(所放到实际的骨骼位置)。
此外,本发明实施例中,根据用户输入的物距参数(U)得到标准的视频中各点像素块宽度T,(仅为Z坐标分析做参考,来对比实际的视频中的颜色块,并不参与计算):
计算公式为:
T=U×A1×S (7)
其中,U表示摄像机与演员之间的距离,即物距;A1表示物距像素调节因子,(根据视频分辨率不同可做适当调整,分辨率在285*506时为5.93,可根据分辨率不同,在1~50之间进行调整)S表示节点大小;
根据公式(7)的计算结果,获得像素块的宽度,与实际服装上的关节标志点宽度进行比较,修改设置的节点大小,以消除误差;
步骤7、采用三维坐标获取模块将工作人员胯部两个关节标志点之间的中点的Z坐标设置为0,以上述中点为最高级父节点向四周扩散,将步骤6中所述的中心点分级设置子节点;
步骤8、采用三维坐标获取模块,由最高级父节点向四周扩散分别获取每个节点的三维坐标;
本发明实施例中,如图(5)中图(a)、图(b)和图(c)所示,图(a)为骨骼实际长度,图(b)为图像中显示的骨骼长度,两者长度不同,说明图像中该节点有深度,如图(c)所示,即Z不等于0,因此,需要求得各个节点的Z坐标值,具体步骤如下:
步骤8-1、根据上级父节点的Z坐标、每帧图像上的目标节点与上级父节点之间的距离和目标节点与上级父节点之间的实际骨骼长度,获取每个未遮挡节点的Z坐标;
所述的获取每个未遮挡节点的Z坐标,具体公式如下:
其中,Zn表示目标节点的Z坐标;Zp表示Zn节点的上级父节点Z坐标;L2表示每帧图像上的目标节点与上级父节点之间的距离,L2=N×L1,N表示每帧图像中,腹部节点与胯部中点之间的距离(像素个数),L1表示目标节点与上级父节点之间的实际距离除以腹部节点与胯部中点之间的实际距离,所获得的比值;L3表示目标节点与上级父节点之间的实际骨骼长度;
针对于公式(1),±的确定由K确定,若K>1,则取正;若K<1,则取负,若K=1,则取0;K=(S父节点/S子节点)/(M父节点/M子节点),其中,S父节点表示图像中上级父节点大小,S子节点表示图像中目标节点大小,M父节点表示实际中上级父节点大小,M子节点表示实际中目标节点大小。
步骤8-2、确定遮挡前后两帧图像上的目标节点与上级父节点连线之间的夹角,将该夹角除以帧间隔数,获得每帧图像中目标节点之间的夹角,结合该夹角和遮挡前后两帧图像上的目标节点的Z坐标,计算获得被遮挡目标节点的Z坐标;
本发明实施例中,遮挡点估算方法,使用视频中点消失前的位置,和刚出现后的位置进行帧差值运算,差值以四元数的角度计算.再对每帧进行角度计算,计算出该节点从消失前到再次出现后的坐标和父节点坐标,做差的出骨骼向量V1 V2,得出其旋转的四元数表示,将该四元数的w(旋转角)经过cos(arc(w)/N)得出每一帧的四元数旋转量(N为从消失前到再次出现之间的帧数),之后把每个四元数转化为旋转矩阵R,公式如下:
步骤8-3、完成每个节点的三维坐标的获取;
步骤9、结合实际骨骼情况,采用欧拉角获取模块,在以上级父节点为原点的坐标系下,设定每个关节上的节点的三维坐标轴的旋转角度范围;
本发明实施例中,采用骨骼约束办法,即使用骨骼角度约束:限制骨骼的转角。
约束办法:使用数组,并转化为曲线定义约束:Z,X表示骨骼旋转的欧拉角信息;
以右臂为例,在以右肩节点为原点的坐标系中,限定右肩关节的转动角度,具体如下:
Z肩=0,X肩1=1.0,X肩2=-1.0
Z肩=1,X肩1=1.1,X肩2=-1.0
Z肩=2,X肩1=1.1,X肩2=-1.0
……
Z肩=170,X肩1=1.2,X肩2=-1.0
其中,Z肩表示右肩关节绕Z轴的转角,X肩表示右肩关节绕X轴(父关节坐标系)的转角;Y肩表示右肩关节绕Y轴的转角,不做约束,只用以调节子关节的位置;Z肩=0,X肩1=1.0,X肩2=-1.0表示Z转角为0度时,X轴转角只能在-1.0到1.0之间,若超出该范围,则表示不满足约束条件,就要对右肩关节的Y转角进行调整.,在根据这些点,拟合出一个函数f1(x),f2(x);上述数据的定义域为0~170。
步骤10、采用欧拉角获取模块,确定直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角度,具体步骤如下:
步骤10-1、获得每一帧图像上目标节点与上级父节点之间的连线,和直立站立状态下目标节点与上级父节点之间的连线,进而获得上述两条连线所构成的平面;
步骤10-2、获取上述平面的法向量,及在上述平面内两条连线之间的夹角,将该夹角作为平面上一次性旋转的旋转角度;
步骤10-3、并在上述平面内,以法向量为转轴,将直立站立状态下目标节点向每一帧图像上目标节点以四元数方式转动,转动的角度为一次性旋转的旋转角度;
本发明实施例中,构造标准站立骨骼模型,从腹部的节点开始,通过一次性旋转的方法,使标准站立骨骼模型腹部的点旋转到实际的目标位置,并影响到其所有的子节点,法向量过上级父节点,该节点的姿态矩阵和该节点的所有子节点的姿态矩阵也做这样的旋转操作(P)。
步骤10-4、在转动过程中,实时判断上级父节点的三维坐标轴的旋转角度是否达到设定范围的最大值,若是,则停止最大转角坐标轴的旋转,再对再上一级(上级父节点的上级父节点)的父节点进行其他坐标轴继续旋转,直至达到每一帧图像上目标节点的位置;否则,三维坐标轴继续旋转;
本发明实施例中,是否达到最大约束的检测方法:将旋转操作P转化为对上级父节点的X轴和Y轴旋转操作,判断Y是否在函数f1(x)和f2(x)的值之间;将节点调整到最大约束上,再根据当前位置计算距目标位置所需的在上一骨骼方向向量的垂面上的角度,即为上级父节点的Z轴旋转量,之后对上级父节点进行Z轴旋转即可使当前节点到达目标位置。
步骤10-5、将平面上一次性旋转的旋转角度转换为四元数;
所述的将上述旋转角度转换为四元数,具体公式如下:
其中,w、x、y、z表示四元数的值;α表示平面上一次性旋转的旋转角度,nx表示法向量的x坐标,ny表示法向量的y坐标,nz表示法向量的y坐标。
步骤10-6、根据所获得的四元数,获得直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角;
所述的根据所获得的四元数,获得直立站立状态下目标节点向每一帧图像上目标节点旋转的欧拉角,具体公式如下:
其中,表示以上级父节点为原点的三维坐标系中,X轴旋转角度;θ表示以上级父节点为原点的三维坐标系中,Y轴旋转角度;ψ表示以上级父节点为原点的三维坐标系中,Z轴旋转角度;w、x、y、z表示四元数的值。
步骤11、采用BVH文件生成模块根据所获得的欧拉角,生成BVH文件,并导入模型动画软件中显示工作人员的动作动画。
本发明实施例中,将生成的BVH文件发送至3Dmax等模型软件直接使用中实现动画演示。