论文提出了一种基于四元数距离的关键帧提取。首先注意两个计算公式:四元数距离和基于四元数的帧距离
四元数距离:
首先如何用一个四元数表示一个旋转呢?
这里用到四元数与被旋转向量的叉乘。设原始向量为p,四元数为q=[s,V]=[w,x,y,,z],那么将向量p 按照四元数旋转q的结果即为:
p'=[w,x,y,z] [0,p] [w,x,y,z]^(-1) (最后一项代表四元数的逆)
基于此,证明出了四元数距离的公式:
帧距离:
人体运动的表示:
其中p(t)为根关节的评议运动。q为关节的旋转运动。
那么两帧之间的距离为:设m(t1),m(t2)分别为不同时刻t1,t2 上的两帧,他们之间的距离定义为:
其中αi 是关节的重要度。
接着引入了文章的算法一:关键帧提取
首先设置一个动态数组KeyArray记录关键帧,last表示最后得到的关键帧,T为总帧数,δ为事先设定的阈值
接着开始置为last=1,初始化循环变量t=2,文章采用阈值为1.105
然后判断t是否小于T,是的话按照帧距离计算dist=D(t,last),否则算法结束
然后判断dist>δ,成立就加入关键帧序列KeyArray
最后t=t+1,重复上面两步
基于算法一,提出了算法二去重建动画
这里有一个四元数插值的公式
算法描述:
设num为关键帧数目
第一步初始化循环变量k=0
第二步若k>num-1,则算法停止,取其中两个关键帧t1=KeyArray[k],t2+KeyArray[k+1]
第三步对t1和t2之间的所有非关键帧进行插值,根平移线性插值,关节旋转角进行四元数插值。
第四步k=k+1,返回第二步