5

我将 Kinect 与 OpenNI/NITE 一起使用。OpenNI 可以在 NITE 的帮助下跟踪人手。此外,OpenNI 可以平滑跟踪的手线,我试图弄清楚它是如何做到的。

我尝试使用卡尔曼滤波器,用卡尔曼估计的手部位置替换旧的手部位置,但 OpenNI 中的平滑度仍然要好得多。

我将不胜感激有关如何平滑在线数据或如何在卡尔曼滤波器中设置参数的任何线索(特定于手部跟踪的东西,因为我已经知道参数的作用)。

4

2 回答 2

5

使用卡尔曼滤波器并不像看起来那么容易。你需要选择一个好的运动模型、一个好的状态向量和一个好的测量模型。对于您的问题,我猜您是对位置进行 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

您还需要正确设置误差的协方差,因为这会将选择速度的误差建模为常数(这是不正确的)。

检查这篇论文。查看滤波器预测和更新方程所需的雅可比矩阵。它们很重要。如果您认为它们是同一性的,则过滤器将起作用,但只有在您正确选择雅可比 W(乘以 Q)、H 和 A 时,它才会准确地起作用。Q 和 R 是对角线,请尝试给出实验值。

希望这有帮助,祝你好运。

于 2012-05-25T07:36:11.327 回答
0

这里有一个简单的例子,展示了如何设置卡尔曼滤波器的参数。

这个例子代表了一种直观地测试不同平滑输出的简单方法。检查评论还帮助我了解了不同的参数(噪声、运动模型、初始化等)。

希望它有所帮助,它工作得很好,而且代码很容易理解。

它使用 opencv 实现。

希望能帮助到你!

于 2013-12-26T22:16:05.797 回答