一种从动捕数据中提取关键帧并重构运动的方法和系统与流程

文档序号:22246750发布日期:2020-09-18 12:09阅读:167来源:国知局
一种从动捕数据中提取关键帧并重构运动的方法和系统与流程

本发明涉及计算机动画制作技术领域,具体涉及一种从动捕数据中提取关键帧并重构运动的方法和系统。



背景技术:

在计算机动画中,人体角色动画是很重要的组成部分,但由于人体运动自由度高,所以创建一个真实逼真的运动模型是非常困难的。目前制作人体角色动画主要采用基于运动学的动画制作、基于运动捕获数据(动捕数据)的动画制作等方法,其中基于运动捕获数据的动画制作方法应用最为广泛。但运动捕获数据是以较高的采样频率获得,平均每秒几十帧甚至上百帧,每一帧又包含了十几个甚至几十个关节点的旋转信息,得到的数据量庞大且有大量的数据冗余,非常不利于运动捕获数据的压缩、存储、检索以及进一步重用,所以需要提取出代表运动数据内容的关键帧。但现有的关键帧提取方法很难做到对关键帧的精准提取,导致根据关键帧重构的运动姿态真实度和逼真度不佳,无法应用到人体角色动画制作中。



技术实现要素:

本发明的目的在于提供一种从动捕数据中提取关键帧并重构运动的方法和系统,以解决上述技术问题。

为达此目的,本发明采用以下技术方案:

提供一种从动捕数据中提取关键帧的方法,包括如下步骤:

步骤s1,将运动序列的第一帧t0作为关键帧加入到关键帧集合keynum[j]中,并确定当前为止搜索到最后的关键帧为尾关键帧lastkey,并初始化循环变量x=2,所述循环变量x表示当前帧t和所述尾关键帧lastkey之间的帧数;j∈[1,2,3,…,keynum],keynum为提取关键帧的数量;

步骤s2,判断所述循环变量x的变量值是否大于或等于所述运动序列的长度n,

若是,则终止关键帧提取过程;

若否,则进入步骤s3;

步骤s3,计算当前帧t和当前为止搜索到最后的所述尾关键帧lastkey之间的帧间距离d;

步骤s4,判断所述帧间距离d是否大于或等于一预设阈值δ,

若是,则将第t帧作为关键帧被提取并保存在所述关键帧集合keynum[j]中,并使当前为止搜索到最后的所述尾关键帧lastkey为第t+1帧;

若否,则将第t帧作为冗余帧过滤;

步骤s5,将所述第t+1帧作为当前帧并返回所述步骤s2,直至完成对所述运动序列的关键帧的提取。

作为本发明的一种优选方案,同一所述运动序列中的所述帧间距离d通过以下公式计算而得:

上式中,d(qi(t1),qi(t2))表示所述运动序列的第t1帧的第i个关节旋转到第t2帧的四元数距离;

wi表示各关节i对运动姿势影响程度的大小;

i=1,2,…,m;m为关节i的数量;

d(t1,t2)表示第t1帧和第t2帧之间的帧间距离。

作为本发明的一种优选方案,运动序列a中的每一帧到运动序列b中的每一帧的所述帧间距离d通过以下公式计算而得:

上式中,表示所述运动序列a的第k帧第i个关节到所述运动序列b的第k帧第i个关节之间的四元数距离;

wi表示各关节i对运动姿势影响程度的大小;

i=1,2,…,m;m为关节i的数量。

本发明还提供了一种从动捕数据中提取关键帧的系统,可实现所述的方法,所述系统包括:

运动序列获取模块,用于获取所述运动序列;

运动序列长度计算模块,连接所述运动序列获取模块,用于计算所述运动序列的长度n;

关键帧提取条件设置模块,用于提供给用户自主设定作为提取所述关键帧的提取条件的所述循环变量x的变量值;所述循环变量x的变量值用于表示当前帧t和当前为止搜索到最后的所述尾关键帧lastkey之间的帧数;

关键帧提取条件达到与否判断模块,分别连接所述运动序列长度计算模块和所述关键帧提取条件设置模块,用于判断所述循环变量x的变量值是否大于或等于所述运动序列的长度n,

若是,则视为关键帧提取条件未达到,并终止关键帧提取过程;

若否,则生成帧间距计算指令并输出;

帧间距计算模块,连接所述关键帧提取条件达到与否判断模块,用于根据接收到的所述帧间距计算指令计算当前帧t和当前为止搜索到最后的所述尾关键帧lastkey之间的所述帧间距离d;

关键帧判断模块,连接所述帧间距计算模块,用于判断所述帧间距离d是否大于或等于一预设阈值δ,

若是,则生成关键帧提取指令并输出;

若否,则终止关键帧提取过程;

关键帧提取模块,连接所述关键帧判断模块,用于根据接收到的所述关键帧提取指令将当前的第t帧作为关键帧提取并保存到所述关键帧集合keynum[j]中。

作为本发明的一种优选方案,所述循环变量x的变量值为2。

作为本发明的一种优选方案,所述帧间距离d通过以下公式计算而得:

上式中,d(qi(t1),qi(t2))表示所述运动序列的第t1帧的第i个关节旋转到第t2帧的四元数距离;

wi表示各关节i对运动姿势影响程度的大小;

i=1,2,…,m;m为关节i的数量;

d(t1,t2)表示第t1帧和第t2帧之间的帧间距离。

本发明还提供了一种运动重构方法,基于所述从动捕数据中提取关键帧的系统提取的所述关键帧集合keynum[j]实现,该运动重构方法包括如下步骤:

步骤l1,确定循环变量y的变量值范围,y∈[1,2,3,…,keynum],keynum为所述关键帧集合keynum[j]中的所述关键帧的数量;

步骤l2,确定所述循环变量y的变量值;

步骤l3,判断所述循环变量y的变量值是否大于或等于keynum-1,

若是,则终止运动重构过程;

若否,则提取相邻关键帧t1=keynum[y],r2=keynum[y+1];

步骤l4,对所述关键帧t1和所述关键帧t2之间的非关键帧进行插值重建;

步骤l5,返回所述步骤l2,直至完成对所述关键帧集合keynum[j]中的所有关键帧之间的非关键帧插值重建过程。

作为本发明的一种优选方案,所述步骤l4中,对所述关键帧t1和所述关键帧t2之间的非关键帧进行插值重建包括针对根关节的一般线性插值重建和针对非根关节的四元数球面插值重建,其中针对根关节的所述一般线性插值重建通过以下公式实现:

上式中,p1用于表示所述关键帧t1中根关节的所处位置的位置值;

p2用于表示所述关键帧t1中的所述根关节在相邻的所述关键帧t2中的所处位置的位置值;

pt用于表示t时刻同个所述根关节的所处位置的位置值;

t1<t<t2。

作为本发明的一种优选方案,针对非根关节的所述四元数球面插值重建通过以下公式实现:

上式中,slerp(q1,q2,t)表示从单位四元数q1到单位四元数q2的四元数球面插值;

θ=arccos(q1×q2);

t∈[0,1]。

本发明还提供一种运动重构系统,可实现所述的运动重构方法,包括:

运动重构条件设定模块,用于提供给用户自主设定重构运动的所述循环变量y的变量值范围;

变量值确定模块,连接所述运动重构条件设定模块,用于在用户设定的所述变量值范围内自动确定所述循环变量y的变量值;

关键帧数量读取模块,用于读取所述关键帧集合keynum[j]中的所述关键帧数量keynum;

运动重构条件是否达到判断模块,分别连接所述变量值确定模块和所述关键帧数量读取模块,用于判断所述循环变量j当前的变量值是否大于或等于keynum-1,

若是,则终止运动重构过程;

若否,则生成相邻关键帧提取指令并输出;

相邻关键帧提取模块,连接所述运动重构条件是否达到判断模块,用于根据所述相邻关键帧提取指令从所述关键帧集合keynum[j]中提取出相邻的所述关键帧t1和所述关键帧t2;

运动重构模块,连接所述相邻关键帧提取模块,用于对相邻所述关键帧t1和所述关键帧t2之间的非关键帧进行插值重建,以重构出与原始的所述运动序列相同帧数的重建运动序列。

本发明通过帧间距离提取的关键帧精准度更高,并且根据提取的关键帧重构的运动姿态很好地还原了原始动画的真实度和逼真度,不仅压缩了动捕数据的数据量,而且提高了所压缩的动捕数据的质量。

附图说明

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

图1是本发明一实施例所述的从动捕数据中提取关键帧的方法的方法步骤图;

图2是本发明一实施例所述的从动捕数据中提取关键帧的系统的系统结构图;

图3是本发明一实施例所述的运动重构方法的方法步骤图;

图4是本发明一实施例所述的运动重构系统的系统结构图;

图5是求解四元数距离的示意图。

具体实施方式

下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。

其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本专利的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若出现术语“上”、“下”、“左”、“右”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。

在本发明的描述中,除非另有明确的规定和限定,若出现术语“连接”等指示部件之间的连接关系,该术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个部件内部的连通或两个部件的相互作用关系。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

本发明实施例提供的一种从动捕数据中提取关键帧的方法,请参照图1,包括如下步骤:

步骤s1,将运动序列的第一帧作为关键帧加入到关键帧集合keynum[j]中,并确定当前为止搜索到最后的关键帧为尾关键帧lastkey,并初始化循环变量x=2,循环变量x表示当前帧t和尾关键帧lastkey之间的帧数,循环变量x=2表示当前帧t和尾关键帧lastkey之间只有当前帧t和当前为止搜索到最后的尾关键帧lastkey两帧图像;j∈[1,2,3,…,keynum],keynum为提取关键帧的数量;

步骤s2,判断循环变量x的变量值是否大于或等于运动序列的长度n,

若是,则表明从一个运动序列中需要提取的关键帧数量大于或等于运动序列的长度,从一个运动序列中提取的关键帧数量大于运动序列本身的长度是不可能的,并且从一个运动序列中提取与序列长度相同的关键帧数量对于精简运动序列帧数是毫无意义的,所以本发明以循环变量x小于运动序列长度n为关键帧提取的前提条件,首先对循环变量x的变量值是否小于运动序列长度n进行判断,若是,则进入步骤s3,若否,则终止关键帧提取过程;

步骤s3,计算当前帧t和当前为止搜索到最后的尾关键帧lastkey之间的帧间距离d;

步骤s4,判断帧间距离d是否大于或等于一预设阈值δ,

若是,则将第t帧作为关键帧被提取并保存在关键帧集合keynum[j],并使当前为止搜索到最后的尾关键帧lastkey为第t+1帧;

若否,则将第t帧作为冗余帧过滤;

步骤s5,将第t+1帧作为当前帧并返回步骤s2,直至完成对运动序列的关键帧提取。

步骤s1中,初始的尾关键帧lastkey为t0+1帧,也就是运动序列中的第二帧图像。为了提高本发明提取关键帧的准确度,本发明将循环变量x的变量值初始化为2,也就是本发明对运动序列中每一对前后相邻的帧按时间轴进行帧间距离计算。

当然为了提高关键帧的提取速度,可以增大循环变量x的变量值,但循环变量x的变量值数值越大,提取的关键帧数量越少,所以需要对循环变量x的变量值进行合理设置。本实施例中,将循环变量x的变量值确定为2。

本发明实施例通过四元数计算当前帧t和当前为止搜索到最后的尾关键帧lastkey(循环变量x的变量值为2时,尾关键帧lastkey为t+1帧,也就是当前帧t的后一帧)之间的帧间距离d,首先对四元数进行简单介绍,

四元数q可以记为:

q=w+xi+yj+zk;

其中,w,x,y,z为实数,四元数可以写成抽象形式:

q=[s,w],s∈r3,w∈s4

s∈r3表示四元数q作平移运动;w∈s4表示四元数q作旋转运动。

四元数q旋转的表达形式:

若四元数‖q‖=1,则q为单位四元数,单位四元数表示空间某点绕v向量旋转θ角,设旋转前的向量为r,旋转后的向量为r1,则[0,r1]=q[0,r]q-1,表示将向量r绕向量v旋转θ角。

以下结合图5对帧间距离d的计算过程进行详细阐述:

设有参考向量p0∈r3,单位四元数q1将p0旋转到p1,单位四元数q2将p0旋转到p2,则四元数p1与p2之间的距离如图5所示,有

设单位四元数其中,‖a,b,c‖=1,θ=arccosw∈[0,π]。将单位四元数用作向量p1有:

由上式可知,将p1旋转到p2,这说明将p1产生的旋转变换到p2必须通过做一个额外的旋转,

若q1和q2为两个单位四元数且则q1和q2两个四元数之间的距离表示为d(q1,q2)=arccosw。

在四元数表示法中,人体可以表示为离散时间向量函数m(t),

m(t)=[p(t),q1(t),q2(t),…,qm(t)];

上式中,p(t)∈r3表示根关节(人体骨骼的根关节)平移运动;

qi(t)表示关节i在t时刻的旋转运动,1≤i≤m,m为关节的数量;

1≤t≤t,t为运动序列的时间轴长度。

通过上述推导,同一运动序列中的帧间距离d可通过以下公式计算而得:

上式中,d(qi(t1),qi(t2))表示运动序列的第t1帧的第i个关节旋转到第t2帧的四元数距离;

wi表示各关节i对运动姿势影响程度的大小;

i=1,2,…,m;m为关节i的数量;

d(t1,t2)表示第t1帧和第t2帧之间的帧间距离。

另外,如果有不同的运动序列a与运动序列b,a的每一帧到b的每一帧之间的距离也可以用两者之间的四元数的距离表示,具体表达公式如下:

上式中,表示运动序列a的第k帧第i个关节到运动序列b的第k帧第i个关节之间的四元数距离;

wi表示各关节i对运动姿势影响程度的大小;

i=1,2,…,m;m为关节i的数量。

以下对本发明一实施例提供的从动捕数据中提取关键帧的系统进行介绍。请参照图2,本发明一实施例提供的从动捕数据中提取关键帧的系统包括:

运动序列获取模块1,用于获取运动序列;

运动序列长度计算模块2,连接运动序列获取模块1,用于计算运动序列的长度n;

关键帧提取条件设置模块3,用于提供给用户自主设定作为提取关键的提取条件的循环变量x的变量值;循环变量x的变量值用于表示当前帧t和当前为止搜索到最后的尾关键帧lastkey之间的帧数;

关键帧提取条件达到与否判断模块4,分别连接运动序列长度计算模块2和关键帧提取条件设置模块3,用于判断循环变量x的变量值是否大于或等于运动序列的长度n,

若是,则视为关键帧提取条件未达到,并终止关键帧提取过程;

若否,则生成帧间距计算指令并输出;

帧间距计算模块5,连接关键帧提取条件达到与否判断模块4,用于根据接收到的帧间距计算指令计算当前帧t和当前为止搜索到最后的尾关键帧lastkey之间的帧间距离d;

关键帧判断模块6,连接帧间距计算模块5,用于判断帧间距离d是否大于或等于一预设阈值δ,

若是,则生成关键帧提取指令并输出;

若否,则终止关键帧提取过程;

关键帧提取模块7,连接关键帧判断模块6,用于根据接收到的关键帧提取指令将当前的第t帧作为关键帧提取并保存到关键帧集合keynum[j]中。

为了确保对运动序列中所有相邻帧进行帧间距计算,以提高关键帧提取的准确度,优选地,循环变量x的变量值设定为2。

关于帧间距离d的计算过程在上述的从动捕数据中提取关键帧的方法中已作了详细阐述,在此不再赘述。

本发明还提供了一种运动重构方法,基于上述提取的关键帧集合keynum[j]实现,请参照图3,运动重构方法包括如下步骤:

步骤l1,确定循环变量y的变量值范围,循环变量y表示需要提取的相邻关键帧中的当前关键帧,循环变量y的变量值表示需要提取的当前关键帧在关键帧集合keynum[j]中的排序位置,比如循环变量y的变量值为1,表示需要提取的当前关键帧为关键帧集合keynum[j]中的第一个关键帧,y∈[1,2,3,…,keynum],keynum为关键帧集合keynum[j]中的关键帧的数量;

步骤l2,确定循环变量y的变量值;优选地,按照循环变量y的变量值大小按序确定y的变量值,也就是,首先确定y的变量值为1,然后进入步骤l3;

步骤l3,判断循环变量y的变量值是否大于或等于keynum-1,

若是,则终止运动重构过程;

若否,则提取相邻关键帧t1=keynum[y],t2=keynum[y+1];keynum[y]表示关键帧集合keynum[j]中的第y个关键帧,keynum[y+1]表示关键帧集合keynum[j]中第y+1个关键帧;

步骤l4,对关键帧t1和关键帧t2之间的非关键帧进行插值重建;

步骤l5,返回步骤l2,依序取循环变量y的变量值为2,3,…,keynum,直至完成对关键帧集合keynum[j]中的所有关键帧之间的非关键帧插值重建过程。

步骤l4中,对关键帧t1和关键帧t2之间的非关键帧进行插值重建包括针对根关节(本发明将人体骨架模型简化为29个关节点,其中根关节1个,非根关节28个,非根关节中又包括多个父节点,每个父节点下又至少包括一个子节点。人体运动是由根关节的平移和非根关节中的子节点相对于其父节点的旋转来实现的,根关节的平移决定了人体的运动轨迹,根关节的旋转决定了人体的运动方向,非根关节的旋转决定了人体的旋转状态)的一般线性插值重建和针对非根关节的四元数球面插值重建,其中针对根关节的一般线性插值重建通过以下公式实现:

请结合图5,一般线性插值公式为:

上式中,p1用于表示关键帧t1中根关节的所处位置的位置值;

p2用于表示关键帧t1中的根关节在相邻的关键帧t2中的所处位置的位置值;

pt用于表示t时刻同个根关节的所处位置的位置值;pt即为在插值在相邻的关键帧t1和t2之间的非关键帧中的同个根关节的所处位置的位置值,由该位置值可以形成插入在关键帧t1和t2之间的非关键帧;

t1<t<t2。

针对非根关节的四元数球面插值重建通过以下公式实现:

上式中,slerp(q1,q2,t)表示从单位四元数q1到单位四元数q2的四元数球面插值;

θ=arccos(q1×q2);

t∈[0,1]。

本发明还提供了一种运动重构系统,可实现上述的运动重构方法,请参照图4,运动重构系统包括:

运动重构条件设定模块10,用于提供给用户自主设定重构运动的循环变量y的变量值范围;

变量值确定模块20,连接运动重构条件设定模块10,用于在用户设定的变量值范围内自动确定循环变量y的变量值;y∈[1,2,3,…,keynum],也就是变量y的变量值范围为1~keynum之间的自然数,keynum为关键帧集合keynum[j]中的关键帧的数量;

关键帧数量读取模块30,用于读取关键帧集合keynum[j]中的关键帧数量keynum;

运动重构条件是否达到判断模块40,分别连接变量值确定模块20和关键帧数量读取模块30,用于判断循环变量y当前的变量值是否大于或等于keynum-1,

若是,则终止运动重构过程;

若否,则生成相邻关键帧提取指令并输出;

相邻关键帧提取模块50,连接运动重构条件是否达到判断模块40,用于根据相邻关键帧提取指令从关键帧集合keynum[j]中提取出相邻的关键帧t1和关键帧t2;

运动重构模块60,连接相邻关键帧提取模块50,用于对相邻关键帧t1和关键帧t2之间的非关键帧进行插值重建,以重构出于原始的运动序列相同帧数的重建运动序列。关于非关键帧的插值重建过程在上述的运动重构方法中已经说明,在此不再赘述。

需要声明的是,上述具体实施方式仅仅为本发明的较佳实施例及所运用技术原理。本领域技术人员应该明白,还可以对本发明做各种修改、等同替换、变化等等。但是,这些变换只要未背离本发明的精神,都应在本发明的保护范围之内。另外,本申请说明书和权利要求书所使用的一些术语并不是限制,仅仅是为了便于描述。

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