我在用计算机视觉跟踪人。我有观察值(斑点作为背景减去后斑点检测的输出),我想推断产生这些观察值的对象。
我有一些卡尔曼滤波器代码的困扰。这对我来说很清楚,但我的问题是多目标跟踪:我的问题是有时观察不完整/噪声。让我更好地解释一下--在一个观察清晰的测试中,我为每个人都有一个斑点。卡尔曼滤波器可以帮助我将人的嘈杂路径平滑成平滑的曲线。但是,这不是我的问题;问题是有时斑点检测并不完美,我有一个人的两个斑点(例如,如果我想跟踪的人穿着背景颜色相同的t恤),或者有时我有两个人的一个斑点(例如,如果两个人相互拥抱或太接近)。
我搜索了一些理论,找到了很多用粒子滤波器解决目标跟踪问题的论文。所以我学习了贝叶斯滤波器,蒙特卡罗方法,重要性抽样,它是有一点清楚的(我没有关于概率的数学知识来理解一切,但我的想法很清楚)。
无论如何,我仍然不明白粒子过滤器如何帮助我检测2个斑点对应1个对象或1个斑点对应2个对象的情况。
有人能帮助理解这个问题吗?
发布于 2014-08-09 18:04:32
卡尔曼滤波器在这种情况下是一种背景减除器方法。它不能处理数据关联,只能处理高斯噪声。
最后,我重新实现了由目标检测激活的基于直方图的粒子滤波器。
如果任何人对此感兴趣,请作为评论询问!
发布于 2013-04-08 20:28:43
首先,OpenCV VideoSurveillance项目是开始处理您的问题的好方法。
它执行检测响应的数据关联,正如您所说的do.Also,它通过一种简单的机制(初始化也基于帧阈值和删除)来处理误报(如您所说的2个斑点对1个对象)。另一个问题,正如你所提到的,大约1个斑点对应2个对象通常被称为遮挡(在VideoSurveillance项目中使用术语“碰撞”,但它现在已经过时了)。VideoSurveillance正在使用基于3D颜色直方图建模的粒子过滤器实现来解决这种情况。
简单解释:如何根据外观(衣着)区分两个不同的目标?您可以存储它们的颜色直方图,并在以后的帧中使用它,对吗?但是,如何进行搜索呢?您可以在下一帧中搜索所有可能的质心,或者使用散布在您认为您的对象所在区域周围的200个随机点。这200个点就是粒子。它们是如何工作的?他们比较他们聚焦的区域,并产生物体在那里的概率。它们越接近,可能性就越大。最后,你总结了所有的可能性,并找到了“平均”质心。
简单地说,每个目标的服装都是在概率函数中建模的,并且由于粒子滤波的思想实现了接近实时的计算。
最后,卡尔曼滤波器是一个预测器,它只使用运动数据来帮助跟踪器。它“过滤”极端的移动行为,以防粒子过滤结果变得比它应该的更疯狂。VideoSurveillance也包含了这一点。它是对外观的补充,当跟踪器同时使用两者时,它会更复杂。
编辑:它如何用于多目标跟踪?假设我们有一个具有数据关联的简单跟踪器,假设两个对象即将“碰撞”。在合并对象之前,跟踪器工作得很好。在“合并”过程中,tracker只能看到一个对象。另一个丢了。过了一段时间,它们分开了,跟踪器检测到旧对象是新对象!我们该如何解决这个问题呢?这次让我们从粒子过滤和外观建模开始:
*如上所述,遮挡目标的边界框仍由建模器建模。如果被遮挡的人保持太长时间的隐藏,建模人员将忘记旧对象,并学习遮挡区域(即非遮挡对象)前面的内容,或者会像孤立的盒子一样四处走动(这称为漂移)。VideoSurveillance没有这样的机制。一个简单的解决方案可以是在遮挡期间停止建模器自适应。多么?当两个边界框重叠时。
发布于 2014-08-09 06:11:50
卡尔曼滤波器或粒子滤波器不能处理数据关联问题(多个跟踪问题,其中多个检测必须与多个轨迹匹配)。
你需要的是联合概率数据关联过滤器(JPDAF),它将以一种软的方式将每个检测与一个轨道相关联(一个检测属于第一个轨道,Y%属于第二个轨道...)。
底层跟踪算法可以是粒子滤波或卡尔曼滤波。
看看C#中的JPDAF实现-为卡尔曼和粒子滤波器实现的。目前的工作样本是卡尔曼滤波器和粒子滤波器,JPDAF将在稍后推出-但它已经实现并准备就绪。
Accord.NET扩展库:https://github.com/dajuric/accord-net-extensions
https://stackoverflow.com/questions/15873484
复制相似问题