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

3
我不太理解使用Python跟踪和标记多个移动对象的过程。我能够通过将每个帧转换为灰度图像,然后模糊处理,再进行背景分割,从而隔离出移动对象(尽管二值图像仍包含大量噪声)。
我使用cv2.findContours()找到了轮廓,它给我返回了一个numpy矩阵列表作为blob。我想使用卡尔曼滤波器来跟踪这些blob,因为在存在噪声的情况下,它非常擅长预测blob的位置。但是,鉴于KCF的特性,我认为找到轮廓是一个不必要的步骤,尤其是由于轮廓函数返回了许多高度可疑的blob。
我查看了卡尔曼滤波器的代码,但我不知道如何告诉它跟踪blob,更不用说告诉滤波器blob在哪里(或如何使用KF单独创建blob)。
我的问题是,如果KCF事先不知道blob的内容和位置(这就是我得到轮廓的原因),那么它如何处理多个对象的跟踪?一旦KCF开始跟踪对象,它如何存储blob以便可以轻松地进行标记?
1个回答

6

Kalman滤波器本身不包含多个目标跟踪机制。为此,您需要添加额外的算法:例如,如果您有未知/可变数量的对象,则需要使用Reid 1979中的Multiple Hypothesis Tracking(MHT),如果您知道对象的数量,则需要使用Joint Probabilistic Data Association。

请注意,为了实际实现MHT,您需要引入Cox和Hingorani 1996中介绍的其他改进,“Reid's multiple hypothesis tracking…”的高效实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接