Computer vision 基于卡尔曼滤波的手部跟踪数据在线平滑

Computer vision 基于卡尔曼滤波的手部跟踪数据在线平滑,computer-vision,tracking,smoothing,kalman-filter,Computer Vision,Tracking,Smoothing,Kalman Filter,我正在将Kinect与OpenNI/NITE一起使用。OpenNI可以在NITE的帮助下跟踪人手。此外,OpenNI可以平滑跟踪的手线,我正试图弄清楚它是如何做到这一点的 我尝试使用Kalman滤波器,用Kalman估计的手位置替换旧的手位置,但是OpenNI中的平滑度更好 如果能提供任何关于如何平滑在线数据或如何在卡尔曼滤波器中设置参数的线索,我将不胜感激(因为我已经知道了参数的作用,这是手部跟踪特有的)。使用卡尔曼滤波器并不像看上去那么容易。你需要选择一个好的运动模型,一个好的状态向量和一个

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

我尝试使用Kalman滤波器,用Kalman估计的手位置替换旧的手位置,但是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
您还需要正确设置误差的协方差,因为这将模拟选择恒定速度的误差(这不是真的)

看看这个。查看预测和更新滤波器方程所需的雅可比矩阵。它们很重要。如果你认为它们是同一性,那么过滤器就可以工作了,但是如果你正确选择雅可比矩阵W(乘子Q),H和A. Q和R是对角线的,试着给出实验值。 希望这能有所帮助,祝你好运。

有一个简单的例子说明如何设置卡尔曼滤波器的参数

该示例代表了一种直观地测试不同平滑输出的简单方法。检查注释也有助于我理解不同的参数(噪声、运动模型、初始化等)

希望能有所帮助,它工作得很好,代码也很容易理解

它使用opencv实现


希望有帮助

我试过这个模型,也试过加速。然而,当它在运动中平滑信号时,当手静止时,抖动仍然出现。此外,模型本身似乎是错误的。也就是说,用标准的运动方程来模拟手的运动,手并不是真的遵循这个,是吗?