我正在使用Kinect和OpenNI / NITE。 OpenNI可以在NITE的帮助下跟踪人手。此外,OpenNI可以平滑跟踪的手线,我试图弄清楚它是如何做到的。
我尝试使用卡尔曼滤波器,用kalman估计的手位置替换旧手位置,但OpenNI中的更平滑更好。
我很欣赏有关如何平滑在线数据或如何在卡尔曼滤波器中设置参数的任何线索(特定于手部跟踪的内容,因为我已经知道参数的作用)。
答案 0 :(得分:4)
使用卡尔曼滤波器并不像看起来那么容易。您需要选择一个好的运动模型,一个好的状态向量和一个好的测量模型。对于你的问题,我想你会对位置进行3d跟踪,而不是方向(屏幕上指针的x,y和z位置),我会选择以下内容:
State vector =[x, y, z, v_x, v_y, v_z]
Update equations: (x,y,z) = (x,y,z)+ (v_x,v_y,v_z)*delta(t)
velocity would be constant
您还需要正确设置误差的协方差,因为这会将选择速度的误差建模为常数(这不是真的)。
检查paper。看一下预测和更新滤波器方程所需的雅可比行列式。它们很重要。如果你考虑它们的身份,那么过滤器就可以工作,但是如果你正确地选择雅可比行列式W(乘以Q),H和A,它只能准确地工作.Q和R是对角的,试着给出实验值。
希望这会有所帮助,祝你好运。
答案 1 :(得分:0)
Here有一个简单的例子,展示了如何设置卡尔曼滤波器的参数。
这个例子代表了一种直观地测试不同平滑输出的简单方法。检查注释还有助于我理解不同的参数(噪声,运动模型,初始化等)。
希望它有所帮助,它运作良好,并且代码很容易理解。
它使用opencv实现。
希望它有所帮助!