c++ - OpenCV 如何使用 KalmanFilter 类作为 ExtendedKF

标签 c++ opencv kalman-filter

docs 中所写, 可以将 cv::KalmanFilter 类用作扩展卡尔曼滤波器 (EKF)。有人可以解释一下吗?

涉及的所有矩阵are declared as public所以我可以编辑所有这些。 source code用于普通(线性)卡尔曼滤波器。

我认为我应该用我的非线性系统编辑transitionMatrix,即G。 这个矩阵是我的非线性系统之一,它以 statePostcontrol 作为输入变量; ControlMatrix应该全为0吧?

但是我应该把 G 的雅可比行列式放在哪里呢?

我对更新过程有同样的疑问,我有我的非线性系统 H 用于测量矩阵。

也许我有点困惑,有人可以帮助我吗?

最佳答案

所以,我认为我想出了如何将 cv::KalmanFilter 类用作 EKF。 我是这样做的:

  1. kf.statePost 保存在临时变量中:temp = kf.statePost

  2. kf.transitionMatrix中放入转换函数的Jacobian

  3. 做KF的预测步骤

  4. 使用转换函数将 kf.statePre 更改为正确的值:kf.statePre = f(temp, control)

    <
  5. kf.measurementMatrix中放入测量(或校正)函数的雅可比行列式

  6. 做KF的修正步骤

  7. 用正确的值更改 kf.temp5 矩阵:kf.temp5 = measurement - h(statePre) 其中 h()是测量(或修正)函数

  8. 用正确的值更改 kf.statePost:kf.statePost = kf.statePre + kf.gain * kf.temp5

    /li>

最后,您在 kf.statePost 中获得了系统的估计状态!

关于c++ - OpenCV 如何使用 KalmanFilter 类作为 ExtendedKF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21533093/

相关文章:

c++ - 如何使用构造函数在另一个类中创建对象?

r - 如何估计 R 中扩展卡尔曼滤波器的参数

python - 如何在单次观察中运行 pykalman 卡尔曼滤波器? (Python)

OpenCV 到 OpenGL 坐标系的变换

r - 在 R 中定义卡尔曼滤波器的参数

c++ - Qt 中的第一个控制台应用程序

c++ - 如何在不知道底层类型的情况下从模板化父类取回值?

c++ - VS2013中构造函数调用自身时会发生什么?

eclipse - 如何在 Ubuntu 中卸载 opencv?

python - 用(0,0,255)蓝色覆盖最接近蓝色的像素