【问题标题】:KalmanFilter(6,2,0) transition matrixKalmanFilter(6,2,0) 转移矩阵
【发布时间】:2013-07-24 01:29:30
【问题描述】:

我正在从事一个对象跟踪项目,我想改进使用卡尔曼滤波器获得的结果。

我在互联网上找到了很多有效的示例,但我真的很想了解其背后的原因。

使用opencv,这里是部分代码:

KalmanFilter KF(6, 2, 0);
Mat_ state(6, 1); 
Mat processNoise(6, 1, CV_32F);
...
KF.statePre.at(0) = mouse_info.x;
KF.statePre.at(1) = mouse_info.y;
KF.statePre.at(2) = 0;
KF.statePre.at(3) = 0;
KF.statePre.at(4) = 0;
KF.statePre.at(5) = 0;
KF.transitionMatrix = *(Mat_(6, 6) << 1,0,1,0,0.5,0, 0,1,0,1,0,0.5, 0,0,1,0,1,0, 0,0,0,1,0,1, 0,0,0,0,1,0, 0,0,0,0,0,1);
KF.measurementMatrix = *(Mat_(2, 6) << 1,0,1,0,0.5,0, 0,1,0,1,0,0.5);

这个结果比 KalmanFilter(4,2,0) 更平滑,但我真的不明白为什么。 谁能解释一下这个 (6,6) 转换矩阵的背后是什么?

编辑:解决方案可能是here,但显然我自己还不够好......

感谢您的帮助。

【问题讨论】:

    标签: c++ opencv computer-vision tracking kalman-filter


    【解决方案1】:

    你有一个由6个分量组成的状态向量X,其中前两个是对象的x和y位置;让我们假设其他 4 个是它们的速度和加速度:

    X = [x, y, v_x, v_y, a_x, a_y] t

    在卡尔曼滤波器中,您的下一个状态 Xt+1 等于前一个状态 Xt 乘以转换矩阵 A,因此使用您发布的转换矩阵,您将拥有:

    x t+1 = x t + v_x t + 0.5 a_x t

    y t+1 = y t + v_y t + 0.5 a_y t

    v_x t+1 = v_x t + a_x t

    v_y t+1 = v_t t + a_t t

    a_x t+1 = a_x t

    a_y t+1 = a_y t

    如果两个状态之间的时间间隔等于 1(这就是为什么假设其他四个变量是速度和加速度是有意义的),那么哪些是物体以恒定加速度运动的方程的离散近似。

    这是一个卡尔曼滤波器,它允许速度估计的更快变化,因此它引入的延迟比使用恒速模型的 (4, 2, 0) 滤波器低。

    【讨论】:

    • 谢谢,我得出了同样的结论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多