光学运动捕捉后处理(自动处理)

Xsens动作捕捉 2023-05-05 3962

最近阅读了一篇对于自动处理光学运动捕捉数据的文章,感觉很有意思,分享如下,论文名称《Robust Marker Trajectory Repair for MOCAP using Kinematic》

光学运动捕捉后处理(自动处理)  第1张

前置知识

首先需要对光学运动捕捉有一定的了解,wiki百科

光学捕捉的核心思想在于获取演员身上贴的点的坐标,推算出演员的表演信息

解决了什么问题

动捕数据录制后,一般需要进行后处理,后处理分为两步

  1. 对marker点标签进行更改
    在动捕数据中,经常出现marker点label的swap,marker点错误label的情况
  2. 对marker点轨迹线进行更改
    动捕数据由于marker点丢失造成轨迹线断开,有了补点的需求,同时需要对补充的点进行编辑;对于一些数据,如果过于抖动,需要进行平滑,这一步只要有两点,数据填充与曲线编辑

基本思路

  1. 检出出错的marker点,将出错的marker点去除
  2. 将marker中轨迹线中缺失的部分进行填充

具体算法

流程图:

光学运动捕捉后处理(自动处理)  第2张


具体流程:

  1. 将输入marker分别放入一个robust solver与一个ik solver,得出两个pose
a. robust solver得出的pose比较平滑,但是会失去细节(具体见论文robust solver),robust solver输入marker点,直接回归出pose;这个pose是smooth pose,但是可能会有细节损失(对应图中a->b
b. ik solver由于输入makrer点可能有问题(如marker label swap,marker点错误label等),会有pose求解不正常的情况(对应图中a->c)

2. 将两个pose进行比对,如果某一个joint差异过大,则认为与该joint相关的marker点出错,将出错的marker点删除(对应图中b、c->e)

论文中的pose使用joint position、joint angle进行表示,这样的话,对于robust solver得出的pose与ik solver得出的pose进行比对,如果joint position或者joint angle偏差过大,那么与该joint相关的makrer点一定出了问题(如果没有出问题,那么joint position、joint angle一致性很强)

这里论文还是很暴力的,检测到marker点标签错误,直接进行删除(一般人工处理就是需要对标签进行更正)

3. 将一些轨迹线过少的marker点进行删除(轨迹线过少,如只出现了4、5帧,就认为该轨迹线不可信,现实中,这些点可能是ghost点)(图中未显示,放在e里面进行


4. 将marker点中轨迹线缺失部分进行补充

a. 有了robust solver计算出的smooth pose,我们可以通过fk计算出virtual marker的轨迹线,这个轨迹线是smooth并且正确的(对应图中b->d部分
b. 对于真实marker点,其中缺失的部分,可以使用virtual marker点的轨迹线进行填充(对应图中f部分


对于marker点中轨迹线缺失的部分,填充算法如下:
输入:virmarker点轨迹线,marker点轨迹线(有缺失)
输出:marker点轨迹线(完整)
步骤:
1. 计算marker点轨迹线中,缺失部分的起点、终点,与其对应在virmarker中的偏差,以及偏差的速度
2. 通过首尾的位置、速度信息可以得出offset的spline曲线
3. virmarker的轨迹线+offset spline曲线,可以填充marker点缺失部分的轨迹线

5. 重新进行ik计算,这时候求解出的pose是平滑并且保留细节的pose(对应图中g->h部分

个人评价

这篇论文实现的核心在于robust solver的实现,如果robust solver不work,则一切都是虚的

其他

  1. 论文地址

The End