使用Open CV进行对象跟踪

时间:2016-01-05 15:42:51

标签: c++ opencv

我打算做一个项目,包括从闭路电视摄像机的视频输入跟踪各种物体(包括人,车辆等)。我打算使用OpenCV。实现应该容忍遮挡,并且应该能够识别并继续跟踪对象,即使它们退出框架并在一段时间后重新进入。此外,还应自动识别并跟踪帧中的新条目,并且我需要随时间提取对象的位置。由于有很多选择,我实在很困惑。有人可以提出最好的前进方向。我已经尝试了以下内容:

  • 我尝试使用Open CV的Tracking API并尝试了以下所有算法:MIL,TLD,BOOSTING,MEDIANFLOW。但它们似乎都不够准确。
  • 我也知道卡尔曼滤波器。但是它无法处理识别从不同位置重新进入帧的先前对象的问题。我更喜欢包含此功能的解决方案。
  • 我尝试了Camshift。但它需要规定强度范围。由于之前不知道CCTV安装的实际设置,因此也不能选择。
  • 我也查了一下HOGDescriptor类。但它没有提供直接跟踪的设施吗?我的意思是只进行检测。

是否有更好的解决方案比上面提到的更适合手头的问题?有没有办法提高跟踪算法的准确性?有没有办法改进我已经考虑过的解决方案?请帮助解决我的困惑。

1 个答案:

答案 0 :(得分:2)

您基本上正在寻找完美的跟踪算法:)如果您想知道哪种最适合您的要求,您可以查看基准,例如Visual Object Tracking ChallengeVisual Tracker Benchmark。但实施起来可能很困难。

另一方面,我猜你想要实时表现。在这种情况下,您也应该检查我的this答案。

  

我也知道卡尔曼滤波器。但是它无法处理识别从不同位置重新进入帧的先前对象的问题。我更喜欢包含此功能的解决方案。

没有这样的预测算法。您必须检查每个可能的边界位置以再次找到目标。

  

我尝试了Camshift。但它需要规定强度范围。由于之前不知道CCTV安装的实际设置,因此也不能选择。

因为你几乎想要有史以来最好的算法,所以你可能不喜欢camshift。基于直方图的算法对类似的目标(或任何具有相似颜色的对象)都不具有鲁棒性,有些算法基于直方图并尝试处理形状(fragTrack是一个很好的例子)。但是,我认为它赢了& #39; t让你满意。)

  

我也查了一下HOGDescriptor类。但它没有提供直接跟踪的设施吗?我的意思是只进行检测。

实际上,要检测目标,首先需要对其进行训练(或者(例如),您可以使用对象算法来检测场景中的显着对象)。这意味着你必须为每个可能的目标进行训练。因此,如果您检测到之前训练过的目标之一,您可以尝试在每个帧中检测相同的目标。您可以使用卡尔曼滤波器缩小搜索门限并获得更好的结果。

总结一下,从基准开始。找到适合您的最佳算法。

顺便说一下,deep learning是当今计算机视觉算法的发展趋势。可能最好的一种包括深入学习这种或那种方式。

希望这有帮助,
格克汗。