光学运动捕捉后处理(自动处理)
最近阅读了一篇对于自动处理光学运动捕捉数据的文章,感觉很有意思,分享如下,论文名称《Robust Marker Trajectory Repair for MOCAP using Kinematic》
前置知识
首先需要对光学运动捕捉有一定的了解,wiki百科
光学捕捉的核心思想在于获取演员身上贴的点的坐标,推算出演员的表演信息
解决了什么问题
动捕数据录制后,一般需要进行后处理,后处理分为两步
- 对marker点标签进行更改
在动捕数据中,经常出现marker点label的swap,marker点错误label的情况
- 对marker点轨迹线进行更改
动捕数据由于marker点丢失造成轨迹线断开,有了补点的需求,同时需要对补充的点进行编辑;对于一些数据,如果过于抖动,需要进行平滑,这一步只要有两点,数据填充与曲线编辑
基本思路
- 检出出错的marker点,将出错的marker点去除
- 将marker中轨迹线中缺失的部分进行填充
具体算法
流程图:
具体流程:
- 将输入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,则一切都是虚的
其他
The End