非静态环境中的目标跟踪

Object Tracking in non static environment

我正在从事基于无人机的视频监控项目。我需要同样实现对象跟踪。我尝试过传统方法,但由于非静态环境,这些方法似乎都失败了。

This is an example 我想要达到的目标。但这使用了非静态相机无法实现的背景减法。

我也尝试过使用 SURF features 基于特征的跟踪,但它无法用于较小的对象并且容易出现误报。

在这种情况下实现 objective 的最佳方法是什么?

编辑:对象可以是定义的感兴趣区域内的任何对象。对象通常是人或车辆。这个想法是用户将制作一个边界框来定义感兴趣的区域。无人机现在必须开始跟踪这个感兴趣区域内的任何东西。

跟踪本地功能(如 SURF)不适用于您的情况。训练分类器(例如使用 HAAR 功能进行提升)也不会奏效。让我解释一下原因。

您要跟踪的对象将包含在边界框中。在这个边界框内可以有任何对象,而不是 personcar 或您用来训练分类器的其他东西。

此外,在目标附近,在边界框中也会有背景噪音,一旦目标物体移动,背景噪音就会改变,即使物体的外观没有改变。 此外,您对象的外观发生变化(例如,一个人转身,或掉落夹克,车辆反射太阳等......),或者对象(部分或全部)被遮挡了一段时间。所以跟踪局部特征很有可能很快就丢失被跟踪的对象。

所以 第一个问题 是你必须处理潜在的许多不同的对象,可能是先验未知的,进行跟踪,你不能为每个对象训练分类器.

第二个问题是你必须跟随一个外观可能发生变化的物体,所以你需要更新你的模型。

第三个问题是你需要一些逻辑告诉你你丢失了被跟踪的对象,你需要在场景中再次检测它。


那怎么办?那么,您需要一个好的 长期追踪器

最好的(据我所知)之一是通过 Kalal et. al.. You can see on the dedicated page 大量示例视频进行的跟踪学习检测 (TLD),您可以看到它在移动相机、物体改变外观等...

幸运的是,OpenCV 3.0.0 有一个 TLD, and you can find a sample code here 的实现(在上述站点中也有一个 Matlab + C 实现)。

主要缺点是此方法可能很慢。您可以测试它是否对您有问题。如果是这样,您可以对视频流进行降采样、升级硬件或切换到更快的跟踪方法,但这取决于您的要求和需要。

祝你好运!

最简单的尝试是帧差分而不是背景减法。从当前帧中减去上一帧,对差异图像进行阈值处理使其二值化,然后使用一些形态学来清除噪声。使用这种方法,您通常只能获得对象的边缘,但这通常足以进行跟踪。

您还可以尝试使用 vision.PointTracker 来增强此方法,它实现了 KLT (Kanad-Lucas-Tomasi) 点跟踪算法。

或者,您可以尝试使用密集光流。参见 opticalFlowLK, opticalFlowHS, and opticalFlowLKDoG