用于多目标跟踪的粒子滤波器

nki*_*int 9 opencv tracking computer-vision particle-filter

我在跟踪计算机视觉的人.我有观察结果(blob作为背景扣除后blob检测的输出),我想推断产生这些观察结果的对象.

我对一些卡尔曼滤波器代码感到困扰.这对我来说很清楚,但我的问题是多目标跟踪:我的问题是有时观察结果不完整/嘈杂.让我更好地解释一下 - 在一个有明确观察的测试中,每个人都有1个blob.卡尔曼滤波器可以帮助我将人的嘈杂路径平滑成平滑的曲线.但是,这不是我的问题; 问题是,有时blob检测并不完美,我有1个人的2个blob(例如,如果我想跟踪的人穿着与背景相同颜色的T恤)或有时我有2个blob for 2人(例如,如果两个人拥抱自己或彼此太近).

我搜索了一些理论,我发现很多论文正在用粒子滤波器解决物体跟踪问题.所以我研究了贝叶斯滤波器,蒙特卡罗方法,重要性抽样,它有点清晰(我没有关于概率的数学知识来理解一切,但这个想法很清楚).

无论如何,我还不明白粒子滤波器如何帮助我检测2个blob对应1个对象或1个blob对应2个对象的情况.

有人可以帮助理解这个问题吗?

Lov*_*ill 7

首先,OpenCV VideoSurveillance项目是开始处理您的问题的好方法.

它执行检测响应的数据关联,正如您所说的那样.它还通过简单的机制处理误报(如您所说,2个blob到1个对象)(初始化基于帧阈值和删除).正如你所提到的,另一个问题是,对应于2个对象的1个blob通常称为遮挡(使用VideoSurveillance项目中的术语"碰撞",但现在它已经过时了).VideoSurveillance使用基于3D颜色直方图建模的粒子滤镜实现来解决这种情况.

简单解释:如何根据外观(他们的衣服)区分两个不同的目标?您可以存储它们的颜色直方图,并在以后的帧中使用它,对吗?但是,你如何进行搜索?您可以在下一帧中搜索所有可能的质心,或者使用让我们说的200个随机点散布在您认为对象所在的区域周围.这200个点是粒子.他们是如何工作的?他们比较他们关注的区域并产生物体存在的概率.它们越接近,可能性就越大.最后,您总结了所有可能性并找到了"均值"质心.

简单来说,每个目标的服装在概率函数内建模,并且由于粒子滤波的想法,实现了近实时计算.

最后,卡尔曼滤波器是一个预测器,它仅使用运动数据帮助跟踪器.它会"过滤"极端运动行为,以防粒子滤波器结果比应有的更疯狂.VideoSurveillance也包括这一点.它与外观互补,当使用两者时,跟踪器更加复杂.

编辑:如何对多目标跟踪有用?假设我们有一个简单的数据关联跟踪器,假设两个对象即将"碰撞".跟踪器工作正常,直到对象合并为止.在"合并"期间,跟踪器只能看到一个对象.另一个丢了.过了一会儿,他们分开了,跟踪器将旧物体检测为新物体!我们该如何解决这个问题?让我们重新开始粒子过滤和外观建模:

  • 在合并之前,我们有两个物体相互移动.对象是独立的,跟踪器可以清楚地看到它们.在此期间,外观建模器(一种"记住"对象如何看起来的机制)正在学习这两个对象的外观.当然,随着框架的流逝,两个物体都会略微改变它们的外观.这就是为什么,建模师有一个"学习率",让他随着时间的推移调整他的"记忆".

  • 在合并期间,这次我们将跟踪器设置得更耐心,并且不像以前那样容易杀死第二个对象.跟踪器允许两个对象都处于活动状态.像以前一样成功地跟踪非遮挡对象,而另一个对象边界框尝试再次重新定位它的目标.如果我们幸运*,在很短的时间之后,被遮挡的(隐藏的)物体将重新出现(分裂),并且由于粒子,边界框将被吸引到那里.

*如上所述,遮挡目标的边界框仍然由建模者建模.如果被遮挡的人隐藏得太长,建模者将忘记旧对象并了解遮挡区域前面的内容(即非遮挡对象)或将像孤儿框一样四处游荡(这称为漂移).VideoSurveillance没有相应的机制.一个简单的解决方案可以是在遮挡期间停止建模器适应.怎么样?当两个边界框重叠时.


nki*_*int -2

在这种情况下,卡尔曼滤波器是一种背景减法器方法。它不能处理数据关联,只能处理高斯噪声。

最后,我重新实现了由对象检测激活的基于直方图的粒子滤波器。

如果有人对此感兴趣,请发表评论!