我正在使用带有 OpenNI/NITE 的 Kinect。 OpenNI 可以在 NITE 的帮助下跟踪人手。此外,OpenNI 可以平滑跟踪的手线,我试图弄清楚它是如何做到的。
我尝试使用卡尔曼滤波器,用卡尔曼估计的手部位置替换旧的手部位置,但 OpenNI 中的平滑度仍然要好得多。
我很感激有关如何平滑在线数据或如何在卡尔曼滤波器中设置参数的任何线索(特定于手部跟踪的东西,因为我已经知道参数的作用)。
最佳答案
使用卡尔曼滤波器并不像看起来那么容易。你需要选择一个好的运动模型、一个好的状态向量和一个好的测量模型。对于您的问题,我猜您要对位置进行 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 是对角线,请尝试给出实验值。
希望这有帮助,祝你好运。
关于computer-vision - 使用卡尔曼滤波器在线平滑手部跟踪数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558956/