python - 卡尔曼滤波器如何在 Opencv python 中跟踪多个对象?

标签 python opencv kalman-filter

我不了解使用 python 跟踪和标记多个移动对象的过程。通过将每个帧转换为灰度,然后模糊,然后进行 BGS,我能够隔离移动的物体(尽管二值图像仍然包含大量噪声)。

我用 cv2.findContours() 找到了等高线,它给了我 blob 作为 numpy 矩阵的列表。我想使用卡尔曼滤波器来跟踪这些 Blob ,因为它非常擅长在存在噪声的情况下预测 Blob 的位置。然而,在我看来,鉴于 KF 的性质,寻找轮廓是一个不必要的步骤,特别是因为轮廓函数返回了很多高度可疑的 Blob 。

我查看了 kalman filter 的代码,而且我不知道如何告诉它跟踪 blob,更不用说告诉过滤器 blob 在哪里(或如何单独使用 KF 创建 blob)。

我的问题是,如果 KF 事先不知道 Blob 是什么或 Blob 在哪里(这就是我得到轮廓的原因,但这个结果有点可怕),它如何处理多目标跟踪。而且,一旦 KF 开始跟踪对象,它如何存储 blob 以便轻松标记?

最佳答案

卡尔曼滤波器本身不包含多个对象跟踪机制。为此,您需要一个额外的算法:例如,如果您有未知/可变数量的对象,则需要 Reid 1979 中的多重假设跟踪 (MHT),如果您有已知数量的对象,则需要联合概率数据关联。

请注意,为了实际实现 MHT,您需要在 Cox 和 Hingorani 1996 年的“Reid 多重假设跟踪的有效实现...”中引入其他改进

关于python - 卡尔曼滤波器如何在 Opencv python 中跟踪多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879346/

相关文章:

javascript - 我的 Javascript 仅适用于 Django 2 中嵌入 for 循环的 python 中的一个元素

python - 在 RGB 图像中查找 Point 之间的路径

python - 我可以让一种类方法在后台运行吗?

python - cv2.VideoCapture 帧速率的差异取决于初始化参数

python - 没有名为 'cv2.cv2' 的模块

java - 需要帮助解决使用 opencv 的 Java 中卡尔曼滤波器实现中的错误

tracking - 有界卡尔曼滤波器

c++ - 没有新观察的Opencv卡尔曼滤波器预测

python - 将字符串差异与字符串列表进行比较

python - 对象的父函数的参数