原文来源:http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1222132
引言部分:
对于计算机动画来说,从稀疏的动作描述中产生真实的人体运动很重要。动画师使用关键帧技术来调整动作细节非常耗时。如果我们能够把粗糙的关键帧转换为令人印象深刻的关键帧,动画制作将会更加有效率。另一个例子就是虚拟人的运动合成。使用传统方法比如IK(逆运动学)的方法产生自然点的运动比较难,运动会看起来机械化。
一个可能的方法是重用运动数据。但是传统方法都是放在连接和修改运动信号上面。这些技术对于产生变化的运动捕获数据比较有用,但是对于任意的姿态描述的插值缺乏灵活性。
在这篇文章中,我们提出使用独立成分分析的方法来做基于样本的运动插值技术。我们从多维的运动信号中提取比较具有代表性的运动路径。提取出的运动信号对应于可以用来描述复杂人体运动的感性的有意义的人体运动特征。通过在ICA基向量空间中对任意稀疏运动插值,我们能够得到真实的运动结构。
我们的技术可以提供一种灵活的动作编辑技术就想传统的关键帧动画一样,但是使在各层次中对捕获数据的重用变成可能。算法的实现很简单,因为有公开的ICA软件可以被使用。
基于ICA的运动插值,我们已经开发了一些基本技术,包括:
1> 运动纹理映射。精细运动表示的细节可以在ICA域中对运动路径做小小的改变而实现重建。我们在样本运动中搜索相似运动结构,并且对插值运动添加残差。
2> 运动转换。我们可以通过在ICA域中修改运动路径从而转换运动特征。我们可以把运动信号转换为某一个特定人的运动。
3> 混合并行行为。层次ICA使混合并行行为成为可能。
4> 从特征描述中产生运动。从特征运动描述中重组运动,而且有很少的特征损失。
另外一个重要的应用是对稀疏运动插值我们可以从稀疏运动描述中生成联系连续运动。
相关工作:
Gleicher使用时空约束提供一个低层次的交互运动编辑工具。Lee et al.提出了一个交互式多分辨率运动编辑器用来运动的精细控制。Popovic 和Witkin在一个降维空间中描述了一种运动编辑方法,目的是为了在保持物理有效性的同时编辑运动。
另一种方法就是用运动信号 去修改捕获运动。Bruderlin 和Williams和Unuma et al提出了一种连续域编辑方法。连续域编辑方法与ICA的区别在于ICA从运动样本中找到了最优基向量。运动基向量代表的是样本运动包含的运动特征。我们的方法可以用到任意长度的输入信号中,这在人体运动分析中略胜一筹。
Rose运动径向基函数,从一系列的对其的有标签的运动中推测,并且使用运动学解决运动的平滑连接。结合ICA的分析和RBF(径向基函数)的character,分析和融合变得方便了,因为ICA可以对运动信号降维。
Brand and Heman提出了一种统计学方法,称为"风格机器",产生了包含运动变换在内的令人印象深刻的结果。风格机器HMM(隐马尔可夫模型)代表复杂运动的过渡。运动信号与混合高斯相似。或许最大的区别是ICA是一种低层次信号处理方法。稀疏姿态插值可以在ICA域中做简单插值而完成。信号层次的变形也是可能的。ICA分析方法和机器学习结合可以得到很好的结果。
人体运动的独立成分分析:
1.概览
图二显示了我们的方法的概览。首先使用运动捕捉系统得到一系列的动作样本。通过投影样本运动到基向量把运动分割为独立成分。一帧的姿态参数作为一个点投影到ICA域中。连续运动同样产生了连续运动轨迹。
图三显示分解运动模式的例子。使用ICA是因为它具有稳定的性能。我们可以提取独立运动信号,比如手和脚的运动。通过修改ICA域的运动路径可以生成各种各样的运动特征。ICA的一个重要特点是基向量构成了运动特征空间。在基向量空间的任意点插值都是可能的。
2.将运动分割成独立成分
我们通过一个包含17个刚体部分的清晰结构的关节角来描述一个人体运动,对应髋部,腹部,胸部,颈部,头部,上臂,胳膊下,双手,大腿,小腿,双脚。然后我们使用样本运动通过ICA方法生成基向量。
设3D姿态参数θ (t)为:
t代表的是帧数。姿态参数θ(t)代表的是n维第t列数据向量,n为姿态参数的数目。
对运动姿态参数进行零均值化:
T是总帧数,那么新姿态参数

就变成:
假设构成运动的独立成分是
原文最后一个下标为n,但是我感觉应该是m,因为提取独立成分以后,总帧数不变,但是描述姿态的参数肯定是变得简洁了,而且下一段原文给出了S(t)的下表范围。
姿态参数然后可以被表示为:
A是一个不变的n*m满秩矩阵,向量ai,i=1,2....,m是ICA的基向量。独立成分m≤n。系数si(t) i=1,2,...,m相互独立。
从这里可以看出s是一个m*T的矩阵,A是n*m的矩阵,这样就得到了零均值化以后的θ矩阵为n*T的矩阵。T为帧数,n为姿态书,更加说明了独立成分s(t)的最后一个小标为m。
独立成分的需要使用一个m*n的分离矩阵B计算,所以m 向量:
这样便有一个估计:y(t)≈s(t)。独立成分向量为s(t)。
为了计算方便,先白化数据向量

,这一点可以参考ICA的计算方法。白化方法:
x(t)是第t行白化向量,V是m*n的白化矩阵。用PCA方法白化姿态参数。PCA白化矩阵的形式为

,其中E的列是PCA的特征向量,D的对角线是对应元素的特征值。
预白化白化矩阵以后,记为
W
T,是正交阵,然后分离方程式就变成了
接下来就是求这个正交阵。
这篇文章采用的是FastICA算法作为ICA的执行。
作为分割标准,需要使用到负熵。负熵J的计算接近于最大化负熵原则:

是与y具有相同协方差矩阵的高斯随机向量。G是任意非二次函数。w是n维约束向量,
计算矩阵W需要最优化下列问题
在最大值处,每一个向量wi(i=1,2,...,m)给出了W的每一列。
定点算法是用来计算主成分的。问题来源于:
E是数学期望,g是不同的G,这里把g(u)=tanh(au)
分割矩阵
W
T是使用定点算法算得的。所以运动参数θ(t)被分割成独立成分y(t),公式为:
3. 重构过程
姿态参数是根据独立成分y(t)和基向量矩阵A重构的。根据wi可以计算出ICA的基向量ai:
然后就可以计算出姿态参数了:

其中y'(t)是修改的独立成分。
稀疏运动插值
1. ICA域中的姿态插值
每一帧的姿态参数在ICA域中被投影成一个点。输入的稀疏姿态提供关键帧或者运动描述语言,比如Labanotation
设指定姿态为Q0,Q1,.....,Qn。我们使用Hermite插值对局部定义曲线去插值。单位向量Ii显示了Qi点的正切方向:
使用Qi和Ii构造三次bezier样条曲线。插值函数P(t) 就变成了:
其中αi是任意常数。
2. 提取和重构运动姿态
各种各样的运动特征,运动风格可以通过在ICA域中修改运动轨迹获得。图4显示了简单的例子。散步动作被分割成几个不同的轨迹。通过修改运动轨迹,可以产生不同的行走模式。在实验中,运动信号被分割成基本的运动结构,这些结构可以代表运动风格。运动状态的细节也可以被动画师修改。
3. 运动纹理映射
通过ICA插值我们可以得到近似真实的运动结构。但是运动表现的细节还是运动轨迹的形状。我们使用运动纹理映射从样本中修复细节运动。运动纹理映射与图片融合的传统纹理映射一样。通过给基本运动结构增加细节,就可以得到产生更多不同的运动。
图5展示了运动纹理映射的概念,在文中,我们通过选取ICA域中最接近的运动样本实现运动纹理映射,并在4.1的插值运动中增加残差。我们使用Hermite插值稀疏去匹配动作路径。其它状态匹配算法也是有用的。
其它可能的扩展
1.人体运动编码
许多应用需要人体运动的特征描述。比如,如果我们生成了一个人体运动的象征性描述,并且重构了自然的运动信号,那么描述语言间的联系会更加宽松。使用ICA的优点是重构运动信号时有很少的损失,因为运动插值是在特征空间中。
在ICA域中有很多方法去描述运动路径。文中采用Hermite插值系数的简单编码方法。编码可以分为四步:
1> 将运动路径分成适当的部分。
2> 从运动轨迹中提取特征点,比如最大化曲率。
3> 使用贝塞尔样条曲线进行Hermite插值
4> 通过列出贝塞尔曲线的控制点来编码。
设曲线上的特征点为Qi和Q(i+1),大概的曲线可以表示为:
对应的三次bezier样条曲线的控制点为R(3i),R(3i+1),R(3i+2),R(3i+3),区间i≤t<≤i+1。B是由Bernstein多项式给出的。
每一个控制点可以表示为:
使用R(3i),R(3i+1),R(3i+2),R(3i+3)最为编码代表运动信号,我们可以重构原始运动信号。
我们的方法可以应用到很多的人体运动上,运动信号的重构也很快,特征描述中的运动信号实时产生也必将简单。
2.混合并行行为
ICA的优点是所有的运动信号被混合为不同的运动轨迹。但是编辑并行运动也有缺点。层次地使用ICA,我们单独编辑人体各部分,并且也修改了身体各部位的关系。
图6显示了层次ICA的图表。我们把ICA应用到了6个身体部位,比如头,身体,左臂,右臂,左腿,右腿,然后我们使用ICA把身体6个部位的运动轨迹应用到全部身体部位运动轨迹中去。
实验
我们把角色的角数据投影到ICA特征向量中去。ICA的帧工作不能决定独立成分的数目,在初步工作中,我们ICA的基向量维数为贡献率90%。使用白化处理的PCA降维参数。这个过程可以被设置,当维数不影响操作的重复性。ICA的设计使用matlab 中的FastICA工具包。
1. 运动纹理映射
图7显示的是生成芭蕾舞序列。被彩色帧围绕的姿态是作为关键帧的稀疏姿态的设置。我们可以看到插值运动有一个看似真实的运动状态。运动表示的细节就是从运动纹理映射中恢复的。
2.混合并行行为
图8显示了使用ICA产生并行行为的例子。我们使用层次ICA在5.2部分描述了。a是原始行走模式,b和c混合了不同的手臂动作。我们可以看到混合不同的运动是可行的。
3.从特征描述中产生运动
图9显示了连接基本行为的例子。每一个运动用5.1的codebook代表,并且与编码联系起来,比如‘stand’和‘run’。a是ICA域的一个成分,是简单组合了运动。b是经过平滑处理关节角以后的运动。