三维人体运动数据分割方法

文档序号:6556630阅读:266来源:国知局
专利名称:三维人体运动数据分割方法
技术领域
本发明涉及计算机三维动画技术及多媒体数据处理领域,尤其涉及一种三维人体运动数据分割方法。
背景技术
近年来随着运动捕获设备的广泛使用,生成大量具有真实感的三维人体运动数据,这些数据被广泛应用于计算机游戏、动画生成及医学仿真等多个领域。由于采用光学捕获系统对入体运动捕获时得到的人体运动序列较长,且往往包含了若干连续的但具有不同类型的运动数据(比如走、跑、跳等),为了便于大量三维人体运动数据的压缩存储、检索、浏览及更进一步的运动编辑,对长序列人体运动数据中包含的不同类型的运动数据进行自动分割是非常有用的。
数据分割是一种广泛应用于多媒体数据分析领域的技术,比如视频镜头分割,音频分割等。与其它多媒体数据分割不同,三维人体运动数据是一种结构化的多媒体数据。现有人体运动数据分割方法主要分为两类基于模型的运动数据分割方法与基于底层数据分析的运动分割方法。《美国计算机学会图形学学报》2003年第三期中(ACM Transactions on Graphics2003,33(3)402-408)公布了一种基于模型的运动标注方法,基于手工标注的训练样本集和构建好的支持向量机分类器,运动数据序列中的不同运动类型会得到自动标注。2003年国际图像处理大会论文集中(Proceedings of ICIP 2003,II105-108)公布了一种分层的人体行为分割方法,采用一种动态分层数据结构表示人体运动数据,进而采用一种简单的贝叶斯分类器完成人体行为分割。基于模型的运动数据分割方法需要以大量训练数据为基础,且分割结果受到训练数据影响较大,因此较难在实际中得到应用。
《自治机器人学报》2002年第一期中(Autonomous Robots,2002,12(1)39-54)的方法采用检测关节角度数据过零点的方法对人体手臂运动数据进行分割,该方法实现非常简单,但分割结果精度不高。2005年图形接口大会会议论文集中(Proceedings of GraphicsInterface,2004,185-194)公布的方法认为不同类型的人体运动数据应该具有不同的内部维度,因此采用PCA、PPCA、GMM等方法对长序列的人体运动数据进行维度分析,进而达到数据分割的目的,该方法能够达到较高的切分精度,且不需要训练数据支持,但是PCA、PPCA子空间的构建及GMM等统计模型的建立耗时过多,因此分割效率不高。

发明内容
本发明为克服上述现有方法的缺点和不足,提供了一种高效、自动的三维人体运动数据分割方法。
三维人体运动数据分割方法包括以下步骤(1)首先采用具有16个关节点的人体骨骼模型表示三维人体运动数据,并在预处理时将与人体运动类型无关的根节点位移和旋转向量数据过滤掉;(2)采用启发式人体运动数据粗略分割算法确定整个人体运动数据序列中的粗略分割点;(3)以粗略分割点为界,将原始人体运动数据序列划分为若干段,将每两段运动数据作为输入,采用基于ISOMAP的三维运动数据非线性降维及分割方法确定其精确分割点。
所述三维人体运动数据表示方法是将人体表示为由16个关节点构成的树状模型,并采用如下方式表示三维人体运动数据M={F(1),F(2),...,F(t),...,F(n)}F(t)={p(t),q1(t),...,qm(t)}其中F(t)是三维运动序列M中的第t帧,p(t)是根节点在第t帧中的位移,qi(t)是第i个关节点在第t帧中的旋转向量。此外,在对三维人体运动数据序列进行计算时,人体根节点的位移和旋转向量数据会被过滤掉。
所述启发式人体运动数据粗略分割算法是对输入的整个三维人体运动序列中每一帧之间的欧拉距离进行计算,形成整个运动序列的距离矩阵并选择在第一帧的位置对距离矩阵切片,进而采用一种启发式的数字信号跳变检测方法就可以得到整个运动序列的粗略分割点,该启发式方法的伪代码如下M=LoadMotion(...); ∥装载运动数据D=DistanceMatrix(D); ∥计算运动序列的距离矩阵len=Length(M); ∥得到运动序列长度curFrm=1; ∥设置当前帧为第一帧while(curFrm<len){curDistCurv=D(curFrm,); ∥得到当前帧的距离曲线,及切片操作Set interval;∥设置算法步长∥计算当前运动序列中帧与帧之间的最大距离(从第curFrm+sp帧到第curFrm+ep帧)diff=MaxMinDiff(curDistCurv(curFrm+spcurFrm+ep));i=curFrm+ep;while(i<len)
{[maxvalue maxindex]=max(curDistCurv(ii+interval));[minvalue minindex]=min(curDistCurv(ii+interval));if(maxvalue-minvalue)>=diff*a{segPt=i+fix((maxindex+minindex)/2);break;}if(maxvalue-minvalue)<=diff*β{segPt=i+fix((maxindex+miniudex)/2);break;}i=i+interval;}Save(segPt);curFrm=segPt;}所述的基于ISOMAP的三维运动数据非线性降维及分割方法是将三维人体运动序列中的每一帧作为一个高维样本点,整个三维人体运动序列作为样本集,输入到ISOMAP算法中进行运算,输出得到低维流形空间中的三维人体运动序列样本点分布;然后采用K平均聚类算法对这些低维流形空间中分布的样本点进行聚类,得到最终的精确分割点。
本发明所述的三维人体运动数据分割方法具有如下特点1.该方法计算复杂度低,基于流形分析ISOMAP的非线性降维算法对数据维度不敏感,因此计算效率较高;2.该方法自动化程度高,给定一段包含多种类型的人体运动数据后,不需要要设定计算参数即可进行自动计算;3.基于非线性降维算法得到的数据分割结果精确性高。


图1是人体骨架模型;图2表示三维人体运动序列的距离矩阵,红色虚线表示这里可能是一个分割点;图3是距离矩阵在第一帧出的一个切片表示,红色小框表示这里可能是一个分割点;
图4是本发明的三维人体运动数据分割方法工作流程图;图5是人体运动数据经过ISOMAP非线性降维及分割后的结果,其中(a)是三维人体运动数据在三维流形空间中的分布,(b)是采用K平均算法对该运动序列进行分割的结果;图6是对一段包含各种人体行为的长序列三维人体运动数据进行分割的结果。
具体实施例方式
本发明的三维人体运动数据分割方法具体实施的技术方案及步骤如下1.三维人体运动数据预处理本发明采用如附图1所示的人体骨架模型。该模型由16个关节组成。运动数据可以表示为如下形式M={F(1),F(2),...,F(t),...,F(n)}(1)F(t)={p(t),q1(t),...,qm(t)} (2)其中F(t)是三维运动序列M中的第t帧,p(t)是根节点在第t帧中的位移,qi(t)是第i个关节点在第t帧中的旋转向量。
在对三维人体运动数据序列进行计算时,人体根节点的位移和旋转向量数据会被过滤掉,因为根节点的位移和旋转向量数据仅仅表示该时刻人体的空间位置和朝向,与人体行为本身没有关系。
2.一种启发式粗略分割算法得到前面描述的三维人体运动数据表示后,需要对其进行粗略分割。这里对输入的整个三维人体运动序列中每一帧之间的欧拉距离进行计算,形成整个运动序列的距离矩阵(见附图2),可以看到该段三维人体运动序列可以大致切分为4或5段(见附图2中红色虚线的位置)。
但是要想用计算机方法从图2中直接找出分割点非常困难,因此选择在第一帧的位置对距离矩阵切片,得到附图3所示的图形。从图3可以看到,采用一种启发式的数字信号跳变检测方法就可以得到整个运动序列的粗略分割点。
运动序列启发式粗略分割方法伪代码如下M=LoadMotion(...);∥装载运动数据D=DistanceMatrix(D); ∥计算运动序列的距离矩阵len=Length(M);∥得到运动序列长度curFrm=1; ∥设置当前帧为第一帧while(curFrm<len){
curDistCurv=D(curFrm,);∥得到当前帧的距离曲线,及切片操作Set interval; ∥设置算法步长∥计算当前运动序列中帧与帧之间的最大距离(从第curFrm+sp帧到第curFrm+ep帧)diff=MaxMinDiff(curDistCurv(curFrm+spcurFrm+ep));i=curFrm+ep;while(i<len){[maxvalue maxindex]=max(curDistCurv(ii+interval));[minvalue minindex]=min(curDistCurv(ii+interval));if(maxvalue-minvalue)>=diff*a{segPt=i+fix((maxindex+minindex)/2);break;}if(maxvalue-minvalue)<=diff*β{segPt=i+fix((maxindex+minindex)/2);break;}i=i+interval;}Save(segPt);curFrm=segPt;}3.基于ISOMAP的三维运动数据非线性降维及分割由于三维人体运动数据维数高,且在原始数据空间当中分布复杂,甚至高度扭曲或折叠。因此即使在得到整个三维人体运动序列的粗略分割点后,也很难在原始数据空间当中确定其精确分割点。
考虑到三维人体运动数据序列是一种在空间中分部高度复杂、非线性的数据,这里采用基于ISOMAP的非线性降维算法对其进行降维,将高维三维人体运动数据序列映射到结构相对简单的低维流形空间中进行处理。ISOMAP是一种较为成熟的非线性降维方法,在本发明中将三维人体运动序列中的每一帧作为一个高维样本点,整个三维人体运动序列作为样本集,输入到ISOMAP算法中进行运算。得到三维人体运动数据在低维流行空间中的分布后,采用K平均聚类算法对样本点进行聚类即可得到精确的三维人体运动数据分割点。
附图4显示本发明的人体运动数据自动分割方法工作流程图。该方法的具体实施流程包括三维人体运动数据输入10、数据预处理20、运动序列粗略分割30及运动序列精确分割40。
三维人体运动数据输入10,这里的三维人体运动数据包括通过光学运动捕获设备及相关专业软件(如Maya,Motion Builder等)产生的各种格式的三维人体运动数据,如本例采用美国Motion Analysis公司生产的捕获设备MotionAnalysis Hawk采集各种类型的三维人体运动数据。
数据预处理20,对用户输入的各种格式的三维人体运动数据进行格式转换,将不同拓扑结构的骨骼转换为本发明中使用的人体模型,将三维人体运动数据转换为本发明定义的形式并将根节点位移和旋转向量数据过滤掉。
运动序列粗略分割30,从数据预处理20出读入处理好的三维人体运动数据序列,采用启发式粗略分割算法确定整个人体运动序列中存在的粗略分割点,将原始人体运动序列分割为若干段。
运动序列精确分割40,每次从运动序列粗略分割30中读入两段经过粗略分割后的人体运动序列片断,采用ISOMAP算法对其进行非线性降维后映射到低维流形空间,并采用K平均聚类算法对得到的低维流形空间中的样本点进行聚类,最终得到两段运动序列片断之间的精确分割点。
实施例1如图5所示,给出了对一段包含两种人体行为方式的三维运动序列进行ISOMAP降维及精确分割的实例。下面结合本发明的方法详细说明该实例实施的具体步骤,如下(1)获取一段来自于光学运动捕获系统或专业动画制作软件产生的三维人体动画序列,本例中的数据来自于光学运动捕获系统(TRC数据格式),包含了正常走路及侧身走路两种行为方式,且它们之间是自然过渡的;(2)以步骤(1)中捕获得到的TRC格式原始运动数据作为输入,采用已有的运动数据转换方法将TRC数据转换为满足本发明定义的具有16个关节点的旋转数据表示格式并将表示根节点的平移和旋转数据过滤掉;(3)由于本实例中的运动序列只包含有两种运动形式,因此不需要进行运动序列粗略分割,而是将整段运动数据输入给ISOMAP算法进行非线性降维,得到如图5(a)所示在低维流行上的分布;(4)以步骤(3)中得到的低维流形上的数据样本点作为输入,采用K平均聚类算法即可得到最终的运动数据精确分割点,如图5(b)所示。
本实例的结果在附图5中显示,可以看到通过ISOMAP的非线性降维处理和K平均聚类算法,能够非常容易的求解到两个自然过渡行为方式之间的精确分割点。
实施例2如图6所示,给出了对一段包含多种人体行为方式的三维运动序列进行分割的结果。下面结合本发明的方法详细说明该实例实施的具体步骤,如下(1)本实例采用光学运动捕获系统获取了一段TRC格式的原始三维人体运动序列,包含多种行为方式,依次是走、侧身走、拖地板、走、蹲下敲打地面、蹲下擦洗地面、站立擦洗窗户、走等8种行为方式,且各行为方式之间是自然过渡;(2)以步骤(1)中捕获得到的TRC格式原始运动数据作为输入,采用已有的运动数据转换方法将TRC数据转换为满足本发明定义的具有16个关节点的旋转数据表示格式并将表示根节点的平移和旋转数据过滤掉;(3)使用本发明所述的启发式粗略分割算法将输入的长序列人体运动数据粗略分割为8段,分别标记为S1...Si...S8,在初始化时令i=1;(4)将Si与Si+1作为连续运动序列输入到ISOMAP算法种中进行非线性降维,得到其在低维流形空间中的分布;(5)以步骤(4)中得到的低维流形上的数据样本点作为输入,采用K平均聚类算法即可得到Si与Si+1之间的精确分割点;(6)令i=i+1,回到步骤(4),直到求解完每一个精确分割点。
本实例的结果在附图6中显示,可以看到通过对粗略分割得到的每两个相邻数据片断进行ISOMAP非线性降维处理和K平均聚类后,能够精确得到各行为方式之间的分割点。
权利要求
1.一种三维人体运动数据分割方法,其特征在于包括以下步骤(1)首先采用具有16个关节点的人体骨骼模型表示三维人体运动数据,并在预处理时将与人体运动类型无关的根节点位移和旋转向量数据过滤掉;(2)采用启发式人体运动数据粗略分割算法确定整个人体运动数据序列中的粗略分割点;(3)以粗略分割点为界,将原始人体运动数据序列划分为若干段,将每两段运动数据作为输入,采用基于流形分析ISOMAP的三维运动数据非线性降维及分割方法确定其精确分割点。
2.根据权利要求1中所述的一种三维人体运动数据分割方法,其特征在于所述三维人体运动数据表示方法是将人体表示为由16个关节点构成的树状模型,并采用如下方式表示三维人体运动数据M={F(1),F(2),...,F(t),...,F(n)}F(t)={p(t),q1(t),...,qm(t)}其中F(t)是三维运动序列M中的第t帧,p(t)是根节点在第t帧中的位移,qi(t)是第i个关节点在第t帧中的旋转向量,此外,在对三维人体运动数据序列进行计算时,人体根节点的位移和旋转向量数据会被过滤掉。
3.根据权利要求1中所述的一种三维人体运动数据分割方法,其特征在于所述启发式人体运动数据粗略分割算法是对输入的整个三维人体运动序列中每一帧之间的欧拉距离进行计算,形成整个运动序列的距离矩阵并选择在第一帧的位置对距离矩阵切片,进而采用一种启发式的数字信号跳变检测方法就可以得到整个运动序列的粗略分割点,该启发式方法的伪代码如下M=LoadMotion(...); //装载运动数据D=DistanceMatrix(D);//计算运动序列的距离矩阵len=Length(M); //得到运动序列长度curFrm=1;//设置当前帧为第一帧while(curFrm<len){ curDistCurv=D(curFrm,:);//得到当前帧的距离曲线,及切片操作 Set interval; //设置算法步长 //计算当前运动序列中帧与帧之间的最大距离(从第curFrm+sp帧到第curFrm+ep帧) diff=MaxMinDiff(curDistCurv(curFrm+sp:curFrm+ep));i=curFrm+ep;while(i<len){[maxvalue maxindex]=max(curDistCurv(i:i+interval));[minvalue minindex ]=min(curDistCurv(i:i+interval));if(maxvalue-minvalue)>=diff*α{segPt=i+fix((maxindex+minindex)/2);break;}if(maxvalue-minvalue)<=diff*β{segPt=i+fix((maxindex+minindex)/2);break;}i=i+interval;}Save(segPt);curFrm=segPt;}。
4.根据权利要求1中所述的一种三维人体运动数据分割方法,其特征在于所述的基于流形分析ISOMAP的三维运动数据非线性降维及分割方法是将三维人体运动序列中的每一帧作为一个高维样本点,整个三维人体运动序列作为样本集,输入到流形分析ISOMAP算法中进行运算,输出得到低维流形空间中的三维人体运动序列样本点分布;然后采用K平均聚类算法对这些低维流形空间中分布的样本点进行聚类,得到最终的精确分割点。
全文摘要
本发明公开了一种三维人体运动数据分割方法。首先,将原始人体运动数据序列采用流形分析方法ISOMAP投影到低维流形空间;其次,应用一种启发式方法检测运动数据序列中不同类型运动之间的粗略分割点,将长序列人体运动数据分割为若干段;最后,把低维流形空间中在时间上连续的每两段人体运动数据作为输入,采用K平均聚类算法求解它们之间的精确分割点。使用该方法对长序列人体运动数据进行分割具有较高的正确率与运算效率。
文档编号G06T1/00GK1975779SQ20061005339
公开日2007年6月6日 申请日期2006年9月14日 优先权日2006年9月14日
发明者庄越挺, 肖俊 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1