2.1 运动捕获数据压缩流程
人体运动捕获数据的压缩通常有5个步骤,其顺序为:压缩前数据预处理、几何编码、数据量化、熵编码以及误差控制与矫正。需要说明的是,并不是每种压缩方法都要严格经过所有过程,例如,完全无损压缩方法就不需经过误差矫正的处理过程。
2.1.1 压缩前数据预处理
(1)运动数据表示方式定义
人体运动捕获数据的层次骨骼结构使靠近末端的关节旋转容易有误差的累积,而且欧拉角构成的运动信息在本质上是非线性的,不能有效地进行主成分分析[13]。因此,Arikan[13]在其方法中采用位置信息进行处理。他定义了一些3D Marker点,将角度信息转换到如图2.1所示[13]的表示方式之下,图2.1中,T为关节的位移信息、R为旋转信息,计算得到的位置信息存入[a|b|c]中。采用类似的表示方式的还有Gu等[14]和Liu等[15]的方法。
图2.1 将关节角度转换为在虚拟Marker上的坐标
然而利用位置坐标的表示方式很难保证处理过程中的骨骼长度,进而导致骨骼变形。因此,解压时通常需要复杂的重建恢复操作[16],而且,旋转表示方式(如欧拉角)是传统视频游戏等应用中普遍采用的方式。如果将这些角度信息转换成位置信息,则会带来额外的系统开销[17]。因此,很多方法[16~20]将骨骼旋转作为直接处理的压缩对象。
(2)运动数据分割及聚类
相对于长运动序列,短小运动片段内部的线性关系会更为明显。为了充分利用这种线性相关性,在几何编码前,压缩算法通常会把运动分割成小片段。例如,Arikan[13]将运动分割成等长的片段;而Liu等[15]和Lin等[21]则将运动分割成非等长的片段。Liu等[15]采用Barbic等[22]的概率主成分分析(PPCA,probabilistic principal component analysis)分割算法将长运动序列分割成具有独立语义的短小运动片段,如跑、走和跳等。
对分割后的短小运动片段进行聚类有利于将相似的运动帧序列聚集到一起,从而更大程度地利用其相关性。例如,在应用主成分分析之前,Arikan[13]采用了谱聚类[23]算法对片段进行聚类;Gu等[14]、Lin等[24]和Zhou等[25]提出的方法也有类似的聚类过程;Bulut等[26]则选择聚类的中心作为关键帧。
2.1.2 几何编码
为了使熵编码具有较高的效率,需要对数据进行几何编码。一般情况下,几何编码方法包括三类:(1)数据变换,如主成分分析[13,15,24,27]、小波变换[17,28~30]和离散余弦变换[18,31]等;(2)曲线拟合,如贝塞尔曲线[13,15,32]、样条曲线[24,33]等;(3)数据的预测,如无损压缩方法中的线性预测[29,34]等。对压缩方法来说,几何编码方法是算法的核心,本章将重点进行分类讨论。
2.1.3 数据量化
量化实质上是一个投射过程,其过程通常是从连续(或近似连续)的值集投射到较少值集上。量化按处理对象的不同可分为矢量量化和标量量化。标量量化是为单个标量值进行的量化;矢量量化则是对由数个标量组成的矢量进行量化。如Kuo等[35]对选择的I帧运动数据进行空域上的矢量量化。
按量化值的分布情况,量化也可分为等规格量化和非等规格量化两种方式。等规格量化是指对各关节数据量化程度都相同,这种量化方式简单,是一种普遍采用的方法。如Chew等[36]在将人体运动数据转换为图像后,将每个图像中的一个像素变为16位的灰度图,其实是对人体旋转数据的一个等规格量化。但是,在人体运动捕获数据的骨骼结构中,各关节通常是不对等的,末端关节误差通常只影响自身,而根关节及近根节点关节的旋转误差通常影响下面各子关节并形成误差累积,这种误差累积经过多层后会显著放大。针对这一问题,研究者提出了非等规格的量化方案。如Váša等[27]采用拉格朗日乘子通过计算最小全局误差矩阵的方式得到各关节不同量化程度的方案;而在Wang等[34]的算法中,对预测参数进行非等间隔的查找表设计也是一种典型的非等规格量化方法。
2.1.4 熵编码
经过几何编码后的数据通常进入到熵编码通道。熵编码[37]在很多人体数据压缩算法中虽然不是重点描述的对象,但作为一个底层编码算法,对人体运动压缩算法的整体性能(压缩比、时间效率等)产生至关重要的影响。
2.1.5 误差控制与矫正
运动捕获数据压缩算法多为有损压缩算法,有损压缩会带来数据损失,特别是运动数据中的高频细节数据。这些高频信息一般来自角色与环境的接触。如角色行走时脚着地,地的反弹力很大并且作用时间较短[13],相应地会产生高频关节数据。对这部分数据要单独处理,尽量采用无损或损失较小的压缩算法以保留高频信息。如Arikan[13]对与环境接触部分的关节数据单独采用类似于JPEG (joint photographic experts group)方法进行压缩;而在Beaudoin等[17]的方法中为了减少末端环境接触骨骼(简称环境骨骼)误差,存储其真实位置与小波压缩后位置的差值,并在解压时采用逆向运动学(IK,inverse kinematics)进行矫正。图2.2[17]所示为是否采用IK矫正的对比效果。从图2.2可看出,标准的、未经过优化的小波算法有很大的数据误差,而经过优化的小波算法误差虽然很少,但是如果不经过IK矫正,也会产生滑步现象。
图2.2 小波压缩中的逆向运动学矫正
环境骨骼的误差来源于骨骼本身的误差和上层骨骼的累积误差两个方面。因此,如果上层累积误差较大,即使对环境骨骼进行了精确处理,也会由于累积误差而导致环境骨骼的误差存在。因此,较好的方法是对上层骨骼进行精度更高的控制;或者以最小化人体运动的整体误差为目标,对各骨骼进行不同精度的控制。如Váša等[27]提出沿着人体骨骼层次结构进行不同精度的处理,并通过控制总体误差矩阵来达到对人体各骨骼不同精度的控制。
以上讨论的环境骨骼误差和累积误差控制方法均为在压缩过程中的误差控制方法。在解压缩时,也可通过实施已知约束来矫正解压后的运动数据。普遍采用的方法是对环境骨骼进行逆向运动学[16,17,28,29]的矫正,文献[36]提出采用滤波方法进行矫正。