如何在opencv中从远到近跟踪场景中的对象

时间:2014-03-10 18:25:50

标签: opencv computer-vision

我需要跟踪道路上的汽车,可以通过GMM监控物体变化,但是道路上的汽车从远到近改变其大小,建议用什么算法从远到近跟踪物体还是差不多?

1 个答案:

答案 0 :(得分:1)

高斯混合模型(GMM)对于将汽车建模为对象并不是一个糟糕的选择,但我不确定如何使用它来模拟背景,因为它可能更加异构并且需要大量混合。学习GMM与EM(期望最大化)可能是处理密集型。所以我的建议是开始使用简单的直方图,它将对象建模为具有计数而不是高斯分布集合的箱的集合。下面我将介绍在OpenCV中实现的两种此类方法。

使用openCV开始跟踪的最简单方法是使用meanshift函数。相关方法Camshift是meanshift的修改版本,当对象改变其大小或方向时,它还校正初始边界框的大小和方向。您可以在openCV包的camshiftdemo.c中找到相应的演示。

meanshift和camshift的输入是一个概率图,其中每个像素指示(近似)它属于对象的可能性(以及可能的背景)。创建此类地图的一种方法是计算要跟踪的对象的直方图,然后将其反投影到图像中,因此,例如,如果您的直方图只有两个数据库,其中计数为90,I = 255,计数为10 I = 100,强度为255的每个像素的概率为90%,强度为100的每个像素的得率为10%(参见有关直方图backprojection的详细说明)。

请注意,这些方法基于某些功能的直方图,例如强度,颜色或其他任何功能。您可以尝试添加更多特征直方图,并更正将对象直方图与背景直方图相关联的概率图。最后,您可以更新每帧的直方图,以补偿对象和背景的变化。

现在,简而言之,它是如何运作的。顾名思义,meanshift根据概率平均值的位置(在此窗口内计算)移动初始窗口,并且平均值通常偏离(偏移)远离窗口中心并朝向最高概率群集(希望您的对象) )。该过程迭代地重复直到收敛。

当然,如果您的初始猜测距离实际概率最大值太远,则窗口可能会陷入与您的对象无关的局部最大值。因此,高帧速率很重要,因为它可以保证对象在帧之间不会移动很多,并且可以使用先前的位置作为窗口位置初始化的合理猜测。