基于骨骼数据的三维人体行走姿态模拟
2017-12-21李锦童立靖英祥杨金秋
李锦++童立靖++英祥++杨金秋
摘要:人体运动的仿真模拟是虚拟现实、增强现实和混合現实等领域的重要研究内容。本文通过Kinect设备扫描得到人体运动骨骼数据,根据骨骼矢量变化计算三维虚拟人体的骨骼的旋转角度,利用骨骼皮肤绑定技术实现人体的动态模型,并使用定时器控制三维人体模型的动态刷新,从而完成真实人体行走姿态的模拟。实验表明通过Kinect采集得到的人体运动数据可以实时驱动三维人体模型,完成人体行走姿态的模拟。
关键词:三维动态模型;动作捕捉;人体姿态模拟;人体动画
中图分类号:TP391 文献标识码:A 文章编号:1007-9416(2017)10-0058-04
1 引言
随着三维扫描技术和计算机图形学的发展以及计算机性能的提高,三维模型已经成为继声音、图像和视频之后的第四种多媒体数据类型。对三维模型的使用与研究在娱乐、医学、机械工程、计算机仿真和虚拟现实、工业应用等领域得到了认可,日益发达的互联网技术为人们对三维模型的共享和处理提供了条件,这些都导致对三维模型应用需求的增长。人体运动姿态模拟是动作捕捉技术的一个重要方向,用Kinect设备获取数据应用到人体运动姿态研究中效率高、操作简便,在各领域得到广泛应用。
针对现有的动作捕获技术,许多的国内外学者对人体的运动姿态模拟做了大量的研究。HUANG,TEJERA等人通过4D性能捕获数据为人物的动画提出了一个新颖的混合表示方法,并结合了骨骼控制与表面运动图[1],该方法支持生成满足用户指定约束的新表面序列关键帧或目标骨骼运动。Gao,Lai等人提出一个新的旋转不变量变形表示和一种新颖的重建算法来同时重建姿态和局部旋转[2],该方法提供有约束的变形,并为网格变形和非刚性物体的变形提出一种新的数据驱动方法。赵正旭等人提出一种通过采用贝塞尔曲线和数值数据编辑人体运动姿态的模拟方法[3],运用 OpenGL 构建虚拟人体模型,利用动作捕捉技术设计人体运动姿态的模拟程序。陈忠等人提出一种基于骨骼模型的人物运动模型的算法,通过读取BVH格式文件的动画模型,实现对人体动画的模拟[4],BVH格式的文件提供了关于人体关节的运动信息,这将大大减少动画的计算量。这些学者主要侧重于采用特定的人体动作数据格式完成关节的运动和人体的运动姿态模拟。
本文采用的是广泛使用的OBJ文件格式,通过Kinect设备采集真实的人体运动骨骼数据,以VC++和 OpenGL为工具,读取动作捕捉文件数据。通过与人体运动的骨骼数据绑定实现三维虚拟人体运动姿态的模拟。
2 人体运动骨骼数据的捕获
三维人体运动数据的采集是人体运动姿态模拟过程中非常重要的一个环节,骨骼数据的获取是本课题的基础工作。运动捕捉数据的质量直接决定了后续三维动作重建的效果,骨骼追踪技术通过处理深度数据来建立人体各个关节的坐标,骨骼追踪能够确定人体的各个部分,如哪部分是手,头部,以及身体,还能确定他们所在的位置。要想将Kinect用于三维动作捕捉,重点关注的是如何能够获取人体的三维动作信息。首先,Kinect利用采用TOF技术测量深度来获取人体的深度信息,通过随机决策森林等算法对人体的各个部分进行不同的标记,最后从各个不同的标记中提取人体的骨架信息[5],即骨骼关节点表征的人体,从而可以保存人体的动作数据。相对与Kinect一代的Light Coding技术,第二代采集到的骨骼数据相对较为准确。
在Kinect2.0中,是通过25个关节点来表示一个骨架的。当Kinect的视野范围开始捕捉到人体的时候,人体的25个关节点的位置就能被Kinect找到,位置通过(x,y,z)坐标来表示。人体的各关节点位置通过(x,y,z)坐标来表示,与深度图像空间坐标不同的是,这些关节点的坐标单位是米。坐标轴x,y,z是深度感应器实体的空间x,y,z坐标轴。这个坐标系是右手螺旋的,Kinect感应器处于原点上,z坐标轴是与Kinect感应的朝向一致的。y轴正半轴向上延伸,x轴正半轴(从Kinect感应器的视角来看)向左延伸。NUI骨骼跟踪分主动和被动两种模式,提供最多两副完整的骨骼跟踪数据。主动模式下需要调用相关帧读取函数获得用户骨骼数据,而被动模式下还支持额外最多四人的骨骼跟踪,但是在该模式下仅包含了用户的位置信息,不包括详细的骨骼数据。
本课题采用基于TOF技术的Kinect2.0,使用NUI骨骼跟踪的主动模式获取人体的运动骨骼数据,通过采集的得到的动作数据来驱动三维模型的运动,以此来真实地模拟人体的运动姿态。
3 人体运动姿态的合成
人体模型的运动合成是由Kinect运动捕获数据驱动所得,本文使用的模型为三维网格模型。现有的三维网格模型格式有多种,例如OFF格式、OBJ格式等等,本文釆用的是OBJ格式的三维网格模型。三维网格模型是由许多三角面片组成,三角面片由边的信息构成,边是由顶点信息定义的。本文在获取Kinect深度数据的基础上,采用OpenCV进行人体姿态获取,通过更改OBJ格式中各顶点的位置信息驱动三维人体模型运动。
3.1 关节点的坐标提取
在Kinect中利用骨骼追踪技术通过处理深度数据来建立人体各个关节的坐标,骨骼追踪能够确定人体的各个部位,以及各个部位所在的坐标位置。在初始化并打开骨骼跟踪后,可以从Skeleton Stream中获取到骨骼数据。Skeleton Stream产生的每一帧数据skeleton Frame都是一个骨骼对象集合。包含了一个骨架数据结构的数组,其中每一个元素代表着一个被骨架追踪系统所识别的一个骨架信息。每一个骨架信息包含有描述骨骼位置以及骨骼关节的数据。每一个关节有一个唯一标示符如头(head)、肩(shoulder)、肘(dlbow)等信息和对应的三维坐标数据。
Kinect能够追踪到的骨骼数量是一个常量。在整个应用程序中为数组分配内存。循环遍历skeleton Frame,每一次处理一个骨骼。通过绘图函数将读取到的骨骼关节点绘制出来,如图1所示。
3.2 肢体的变换矩阵
对于人体的三维点云数据中的某点绕关节点A旋转到的过程为:先将关节点A平移到坐标原点O,点平移到,点平移到;再计算点经过角度旋转到的旋转矩阵,并根据该矩阵计算点旋转后的位置;最后根据反向平移矩阵将各点平移回去。平移矩阵T如式(1)所示:
(1)
其中,平移向量m。
三维人体模型点云数据中的点P绕其绑定的关节点A旋转角度到Q位置的几何关系如图2所示,三维人体模型中的各点绕关节点的旋转角度依式(2)计算,法矢量u依式(3)计算。
(2)
u= (3)
根据旋转关节点A平移到原点O得到的平移矩阵T重新计算三维人体模型点云数据中各点的位置,然后乘以旋转矩阵来完成角度的旋转。旋转矩阵依式(4)计算:
(4)
其中,,其中()是u的单位向量的分量形式。
完成模型中各點的旋转后再将其反向平移回原位置,其反向平移矩阵如式(5)所示。
(5)
三维人体模型中各点的总变换矩阵依式(6)计算。
(6)
4 人体运动动画的实现
人体的运动是由关节点的变化实现的,关节点之间是以一种“父子”关系表示的。人体模型的动画根据“父子”关节点间的关系实现。关节点通过骨架的链接结构有层次地组织在一起,从根节点到末梢节点,关节点的旋转变化是一层联系着一层变化的。Kinect采集到的数据只有关节点的位置信息,没有其对应的旋转信息。本文通过一定的算法将各个关节点独立的位置信息转换为具有一定骨架层次结构的并包含有骨架旋转的运动数据信息。具体算法实现如下:
(1)通过Kinect读取人体运动关键帧的关节点位置信息,计算每一个关节点的变换矩阵;
(2)利用变换矩阵对当前关节点进行旋转变换;
(3)如果该骨骼节点有子节点,利用父节点的旋转平移算出子节点的平移向量,并平移子骨骼节点;
(4)利用人体运动的下一关键帧读取关节点位置信息,计算变换矩阵。重复第(2)步。
三维虚拟人体模型的动画采取定时器的方法,多次调用窗口的绘制函数实现人体的动画显示,计算机动画的控制要素是时间。Windows为程序开发提供SetTimer()函数来为应用程序分配一个系统定时器,通过该函数可以设置时间间隔,Windows将按设定的周期向程序发送消息。在消息响应函数OnTimer()中编写程序实现动画控制。
5 实验结果
基于前文的算法,本文实现了一个原型系统:基于Kinect人体动画合成系统。该系统是在Window 7平台下幵发的,系统中的主要算法是用C++语言实现的,三维网格模型由OpenGL绘制,人体的运动数据通过Kinect设备获取。本文采用三维人体模型模拟真实的人体行走姿态。通过Kinect采集到的人体行走关节图如图3所示。
基于图3的行走序列的骨骼数据所完成的三维虚拟人体模型的行走姿态模拟序列如图4所示。
6 结语
近几年来,动作捕捉技术渐渐成为了人体运动姿态模拟研究中的一项关键技术,通过模拟人体运动姿态以实现人体运动动作的识别以及自由编辑控制变得非常关键。本文通过Kinect提取人体骨骼关节点数据,根据骨骼矢量变化计算三维虚拟人体的骨骼的旋转角度,利用骨骼皮肤绑定技术实现人体动画,并利用定时器控制三维人体模型的动画,从而完成真实人体行走姿态的模拟。实验表明,本原型系统可以有效地实现人体的动画模拟。该技术在舞蹈与表演的教学训练、体育竞技的运动分析、个性化人体角色的影视特效生成等领域具有较好的应用前景。
在本课题的研究过程中发现,在人体姿态模拟的过程中有些人体的运动部位发生了形变失真。针对人体运动中的形变失真问题,提出相应的形变处理算法是下一步需要研究的具体内容。
参考文献
[1]Huang P,Tejera M,Collomosse J,et al.Hybrid Skeletal-Surface Motion Graphs for Character Animation from 4D Performance Capture[J].Acm Transactions on Graphics,2015,34(2):1-14.
[2]Gao L, Lai Y K, Liang D, et al. Efficient and Flexible Deformation Representation for Data-Driven Surface Modeling[J]. Acm Transactions on Graphics,2016,35(5):158.
[3]赵正旭,戴欢,赵文彬,等.基于惯性动作捕捉的人体运动姿态模拟[J].计算机工程, 2012,38(5):5-8.
[4]陈忠,赵学辉,孙秋瑞.基于OpenGL的三维人体运动模型实现[J].计算机应用,2008,28(S2):310-312.
[5]L. A. Schwarz, A. Mkhitaryan, D. Mateus, et al., Human skeleton tracking from depth data using geodesic distances and optical flow. Image and VisionComputing, 2012:217-226.