【问题标题】:Understanding the Kalman Filter Class in OpenCV了解 OpenCV 中的卡尔曼滤波器类
【发布时间】:2022-07-11 23:09:28
【问题描述】:

我正在使用 OpenCV 中的 KalmanFilter 类来预测一个点。

我正在跟踪一个轮廓,这意味着我收到了它的 x,y 点。

所以我的代码看起来像这样:

首先我说我得到了 4 个动态参数和 2 个测量参数。 我理解它的方式是我跟踪的 (x,y) 位置是我的测量值,并且它们的速度我得到了 4 个动态参数

 #Give Input to Kalman class
kalman = cv2.KalmanFilter(4,2)
kalman.measurementMatrix = np.array([[1,0,0,0],[0,1,0,0]],np.float32)
kalman.transitionMatrix = np.array([[1,0,1,0],[0,1,0,1],[0,0,1,0],[0,0,0,1]],np.float32)

在此之后,我在 opencv 中跟踪我的轮廓并将位置传递给班级。

mp = np.array([[np.float32(center_x)],[np.float32(center_y)]])
kalman.correct(mp)
tp = kalman.predict()
PredictedPointx,PredictedPointy = int(tp[0]),int(tp[1])

结果我得到 2 个预测点,我的代码有效。

问题是我不知道这整个过程到底发生了什么。

我有一些问题,比如

  1. 为什么我的转换矩阵是这样的

不是这样的:

  1. 在给我 2 分后我收到速度是否正确?

  2. 所有其他卡尔曼值和计算在哪里。 比如卡尔曼增益等等。

有人能解释一下在我的 x 和 y 位置传递后到底发生了什么吗?

感谢您的阅读

【问题讨论】:

    标签: python numpy opencv kalman-filter


    【解决方案1】:

    这篇文章太长了,无法评论,所以我将其解析为答案。

    1.) 你在处理什么 FPS,你在哪里找到转换矩阵?如果是 1 FPS,那么 dt = 1 和你的转换矩阵是好的。

    2.) 一旦您提供超过一个点,您应该会立即收到有关速度的估计。假设速度没有突然变化,速度估计的质量将随着您提供给过滤器的点数而提高。

    3.) 卡尔曼增益不是卡尔曼滤波器的参数。给定滤波器的假设,最佳卡尔曼增益在滤波器迭代期间计算并用于实际滤波(参见Kalman Filter Wikipedia page 上的K_t)。缺少过程噪声和测量噪声协方差矩阵,但可以分别用processNoiseCovmeasurementNoiseCov设置(根据the documentation

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 2017-08-11
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多