发明内容
本发明的目的是为了克服已有方法中贴标志点的精确位置难以控制,而造成捕获数据也难以得到正确的结果的缺陷,从而提供一种基于光学的运动捕获数据的骨骼运动提取方法,该方法能提取出与输入的基于光学的运动捕获数据精确匹配的骨骼运动。
为了实现上述目的,本发明提供了一种基于光学的运动捕获数据的骨骼运动提取方法,该方法包括如下步骤:
将光学捕获设备捕捉到的基于光学的运动捕获数据输入电脑,由标志点的位置估计相邻骨骼间关节中心的位置,进而构造与捕获对象粗糙匹配的骨骼系统;在构造的骨骼系统上建立骨骼局部坐标系;根据骨骼局部坐标计算初始的骨骼运动数据,并建立起与运动捕获对象匹配的骨骼系统和虚拟标志点系统;将建立的骨骼系统划分骨骼链,建立骨骼链中真实标志点与虚拟标志点的距离函数,对距离函数逐链逐帧进行距离最小优化,不断更新虚拟标志点的坐标,使最后的虚拟标志点与真实标志点之间的距离稳定后所得到的骨骼运动数据就是基于光学的运动捕获数据的骨骼运动数据。
上述技术方案中,一个优选方法是,还包括对最终得到的骨骼运动数据采用四元数线性时不变滤波系统进行过滤,得到平滑的骨骼运动。
上述技术方案中,所述的建立与运动捕获对象匹配的骨骼系统是通过将各帧中估计得到的骨骼长度相加求平均值得到各帧统一的骨骼长度,从而建立骨骼系统。
上述技术方案中,所述的与运动捕获对象匹配的虚拟标志点系统是以运动捕获数据帧中第一帧中的每一真实标志点在相应的局部骨骼系统中的坐标位置,作为虚拟标志点的初始坐标。
上述技术方案中,所述的将建立的骨骼系统划分骨骼链是指,将所述的骨骼系统分为以下五类骨骼链:世界坐标系原点-人体根,人体根-腰-髋-膝-踝,人体根-腰-胸,人体根-腰-胸-颈-头,人体根-腰-胸-锁-肩-肘-腕。
上述技术方案中,所述的对真实标志点与虚拟标志点的距离函数进行优化是采用非线性优化方法逐链逐帧进行距离最小优化,逐步得到所有骨骼运动数据。
所述的对真实标志点与虚拟标志点的距离函数的非线性优化方法是采用BFGS校正的拟牛顿方法。
上述技术方案中,所述的更新虚拟标志点的坐标采用了均值法,均值法将某一实际标志点在每一帧中的局部坐标值加起来,除以总的帧数,得到该实际标志点所对应的虚拟标志点的更新坐标。
上述技术方案中,所述的虚拟标志点与真实标志点之间的距离稳定的判断标准为:在每一条骨骼链上,对真实标志点与虚拟标志点的距离函数逐帧进行距离最小优化,每一帧得到一个距离函数值,一次优化后将每一帧的距离函数值加起来作为该次优化总的函数值,将它与下一次优化的总的函数值比较,若两者的差在设定的范围以内,则认为虚拟标志点与真实标志点距离稳定。
本发明所述方法的优点在于:
1、本发明的方法能够提取出与输入的基于光学的运动捕获数据精确匹配的骨骼运动。
2、本发明的方法既降低了对输入的基于光学的运动捕获数据的标志点贴的位置的准确性要求,又不影响运动捕获数据的精确度。
3、本发明的方法不仅适用于人体运动的捕获而且还适用于动物运动的捕获。
4、本发明的方法并不局限于某一种特殊的标志点贴法,因此具有很好的通用性。
具体实施方式
参照附图,对本发明所述方法做详细说明。
参照图5,为本发明方法的一种优选实施方式的流程图。
本发明的一种基于光学的运动捕获数据的骨骼运动提取方法包括以下步骤:
步骤10、利用背景技术中所提到的光学运动捕获设备,如本实施例是采用VICON公司生产的捕获设备VICON4.5,得到基于光学的运动捕获数据,本实施例是要利用这些已获取的数据信息,求取骨骼运动数据,即骨骼的关节角度值。有了骨骼运动数据才能驱动运动对象做出相应的动作。参照图3,为利用光学运动捕获设备得到的人体标志点的视图。
步骤20、依据已知的基于光学的运动捕获数据中的标志点的位置估计相邻骨骼之间关节中心的位置,进而构造与捕获对象粗糙匹配的骨骼系统。如附图1、2所示,无论对于何种运动形式,人体每一个主要关节,包括:肩,肘,腕,髋,膝,踝,颈,头的附近都贴有一个或几个标志点,标志点的具体贴法,即标志点的数目和所贴的位置在各种贴法中大致相同,只有一些细微的差别,本领域的一般技术人员很容易知道,本实施例中,肘,肩,膝,踝各贴一个,腕关节贴两个,头部四个外,腰部四个、胸部四或五个(包含颈部的两个)、足部三个或一个,手掌一个,由此可以建立每一关节中心与附近的标志点以及附近的关节中心的一个粗糙的几何关系,利用该几何关系,可以近似构造出关节中心。例如腕关节近似为贴在腕部的左右两个标志点的中点;肩关节近似是肩上标志点沿垂直于两肩连线向下移动肩宽的十分之一;肘关节中心与近似肩关节中心,肘部标志点构成直角三角形并且肘关节中心为直角顶点,它到肘部标志点的距离为测量的肘宽数据;其他的关节中心可以依据类似方法近似构造。在近似构造出所有的关节中心以后,将这些关节中心相连,就能够初步构造出一个与捕获对象粗糙匹配的骨骼系统。由于在每一帧中,标志点的位置不同,用该方法初步构造出的骨骼系统在不同帧中的同一骨骼长度是可变的。
步骤30、依据构造的骨骼系统建立骨骼局部坐标系,根据局部坐标计算生成初始的骨骼运动数据。以人体骨骼系统为例,参考附图1,可以选择肘关节中心到肩关节中心的连线作为上臂局部坐标系的Y轴,选择垂直肘关节中心到肩关节中心的连线以及肘关节中心到腕关节中心的连线的方向作为上臂局部坐标系的X轴,然后依据XY轴构造相应的Z轴,并且选择肘关节中心作为上臂局部坐标系的坐标原点。得到骨骼的局部坐标以后,就可以计算初始的骨骼运动数据。例如:上臂和下臂是两个相邻的骨骼,在上臂上可以构造一个局部坐标系P,在下臂上可以构造一个局部坐标系C,下臂通过肘关节绕着上臂转,那么作为两个相邻坐标系P和C,如果C绕着P转,则其中P为父坐标系,C为子坐标系,P-1C为P到C的过渡旋转矩阵:P-1C可直接转为欧拉角或四元数,此处所述的欧拉角或四元数就是用来表示骨骼的关节角度值的变量,所得到的欧拉角或四元数即为骨骼运动数据。此处所得到的初始骨骼运动数据用于下面优化计算的初值。
步骤40、计算每段骨骼的长度,构造与捕获对象匹配的骨骼系统。在步骤20中已依据标志点的位置估计相邻骨骼之间关节中心的位置,两个相邻的关节之间的骨骼长度为所有帧中这两个相邻关节中心之间的距离的平均值。以计算人体骨骼系统上臂的骨骼长度为例,每一帧的肩和肘关节中心的三维坐标值在上述计算初始骨骼运动数据的步骤20中已经估计出来,每一帧上臂的骨骼长度为该帧肩和肘关节中心之间的距离,将所有帧的上臂长度加起来除以总的帧数即为上臂长度。在本步骤中,得到的骨骼长度与步骤20相比,在各个帧中的骨骼长度都是一致的。
步骤50、依据计算所得的骨骼,自动计算运动捕获数据帧第一帧中的每一真实标志点在相应的局部骨骼系统中的坐标位置,作为虚拟标志点的初始坐标,从而建立与捕获对象匹配的虚拟标志点系统。参照附图2,该图是人体虚拟标志点初始图。所述的真实标注点是指基于光学的运动捕获数据中的标志点,虚拟标志点是指附着在相应的骨骼上,随着骨骼的运动而改变它在三维空间中的位置,但在相应的骨骼局部坐标系的坐标保持不变的虚拟的标志点。以人体为例:当前肩部坐标系为P,其坐标原点即肩关节中心为O,肩部一真实标志点的坐标为M,则该真实标志点所对应的虚拟标志点坐标为P*(M-O),这是一个局部坐标系坐标值。
步骤60、划分树状骨骼系统成若干分枝链状结构,建立链状系统的虚拟标志点与真实标志点距离函数。例如:参考图1,人体骨骼系统可以划分为:世界坐标系原点-人体根,人体根-腰-髋-膝-踝,人体根-腰-胸,人体根-腰-胸-颈-头,人体根-腰-胸-锁-肩-肘-腕等五类骨骼链;例如,设某个链有N个虚拟标志点,且有三个关节,从人体根开始依次为i=1,2,3;该骨骼链第j个虚拟标志点的坐标Vj,它刚好位于第三关节上;每个关节的旋转角度参数记(ai,bi,ci),每个关节的旋转角度参数就是步骤30中所求得的骨骼运动数据;每一关节中心相对其父关节的局部坐标系偏移量为Pi,所述的父关节是指刚体链上该关节的前一关节,而人体根的父关节为世界坐标系原点(0,0,0),此处所述的世界坐标系与本实施例中的全局坐标系是同一个概念。而除了人体根关节以外,关节中心的偏移量Pi就是步骤40中得到的所在关节与父关节中心之间的骨骼长度,因此为常数不变。每一组((ai,bi,ci),Pi)可计算得出所对应的4x4的旋转矩阵Mi,则第三关节上的虚拟标志点全局坐标为M1M2M3Vj,记为Pj(虚拟标志点位于第几关节计算它的全局坐标就左乘上几个相应的父坐标系矩阵),而它所对应的真实标志点的坐标为Tj,则该链N个虚拟标志点与真实标志点距离函数为:
另外世界坐标系原点-人体根链上的距离函数比较特殊,因为人体根关节不仅有旋转角度参数(a,b,c),还有位移参数p=(x,y,z),通过(a,b,c,p)可计算人体根的旋转矩阵M,设人体根上有N个虚拟标志点,它们的局部坐标分别记Vj,j=1,2,3,...,N,则虚拟标志点的全局坐标为MVj,记为Pj,而它所对应的真实标志点的坐标为Tj,因此世界坐标系原点-人体根链上距离函数为
步骤70、采用非线性优化方法逐链反复逐帧进行距离最小优化,在优化过程中不断更新虚拟标志点的坐标,直到虚拟标志点与真实标志点距离稳定,逐步得到所有骨骼运动数据。
所述的逐链是指先优化链世界坐标系原点-人体根,然后优化链人体根-腰-髋-膝-踝,然后依次优化链人体根-腰-胸,人体根-腰-胸-颈-头,人体根-腰-胸-锁-肩-肘-腕。
所述的逐帧是优化某一条链时对所有运动捕获数据帧逐帧进行计算,比如先优化计算第一帧的(ai,bi,ci),然后计算第二帧的(ai,bi,ci),然后第三帧,依次直到最后一帧的(ai,bi,ci)。所有帧的(ai,bi,ci)数据合起来构成骨骼运动数据。
这里所述的反复指的是优化某一链时,反复进行一个过程,即当对该链所有帧做完一次优化,得到该链骨骼运动数据之后,采用均值法重新计算出虚拟标志点坐标,再将新的虚拟标志点坐标带入该链的距离函数,对该链再一次进行距离最小优化。此处的均值法指的是按照步骤50中的方法分别计算在新的骨骼运动数据驱动下该链某一实际标志点在每一帧中相对于新的对应的骨骼坐标系的三维局部坐标值,把每一帧的局部坐标值加起来除以总的帧数就得到该实际标志点所对应的虚拟标志点的更新坐标。
这里所述的直到虚拟标志点与真实标志点距离稳定,是指在对每一条链进行优化时采用的是一个反复优化的过程,即优化-更新-再优化的一个循环过程,而每一次优化都是对所有帧逐帧进行,逐帧得到相应的(ai,bi,ci)参数值,每一帧都有一个距离函数值,一次优化后将每一帧的距离函数值加起来作为该次优化总的函数值,将它与下一次优化的总的函数值比较,若两者的差在±0.5以内,则认为虚拟标志点与真实标志点距离稳定,终止该链的反复优化过程。将该链中最后一次优化所得到的各帧的(ai,bi,ci)数据合成得到该链的骨骼运动数据。用同样的方法得到各骨骼链的骨骼运动数据,也就得到了最终的结果。
这里的优化方法推荐使用BFGS校正的拟牛顿方法,因为BFGS校正是迄今最好的拟牛顿公式,具有总体收敛性,并且可以与低精度收敛算法一起连用。具体实施细节如下:
若虚拟标志点与真实标志点距离函数为:
本实施例要做一个无约束非线性优化,极小化距离函数:
Minimize F(X)
其中,X=(a1,b1,c1,a2,b2,c2,a3,b3,c3)
等价于解一个非线性方程组:
f(X)=0,其中
i=1,2,3...9
具体实施步骤:
(1)选取初值:若对第一帧数据进行优化求解时x0取步骤30计算出来的相应值,否则x0取前一帧的计算结果。G0=I,给定允许误差ε>0,其中I为单位矩阵,ε取0.05。
(2)检查是否满足终止条件。计算f(x0),若‖f(x0)‖<ε,迭代终止,x0为近似最优解:否则转第三步。
(3)构造初始BFGS方向。取d0=-G0f(x0),令k=0;
(4)进行一维搜索,求出λ0和xk+1,使得
(5)检查是否满足终止条件。计算f(xk),若‖f(xk)‖<ε,迭代终止,xk为近似最优解:否则转第六步。
(6)构造BFGS方向,用BFGS迭代公式:
其中,
Δxk=xk+1-xk,
Δgk=f(xk+1)-f(xk),
Δgk=Gk+1-Gk
上文实现了对距离函数
的优化,而对于特殊的距离函数,即世界坐标系原点-人体根链上的距离函数 上述的BFGS校正的拟牛顿方法也同样适用。
以人体骨骼系统及标志点系统为例,图4为相应一帧的最终计算结果。通过对虚拟标志点与真实标志点间距离的反复优化过程,可以从输入的基于光学的运动捕获数据中提取出精确匹配的骨骼运动,并降低了对输入的基于光学的运动捕获数据的标志点贴的位置的准确性要求。
步骤80、基于四元数线性时不变滤波系统对骨骼运动数据进行过滤,得到平滑的骨骼运动;其具体的过滤过程为:将欧拉角数据转换成对应的四元数,然后将四元数通过对数运算映射到切空间,在切空间用线性时不变滤波器进行滤波,得到一条平滑的曲线,然后将滤波的结果用指数运算映射回四元数空间,再转换成欧拉角度数。上述的过滤方法是现有技术,在此不再详述。
通过本实施例中所述方法的上述步骤,完全可以实现从基于光学的运动捕获数据中提取骨骼运动,以精确再现被捕获物体的运动。