跟踪视频序列,用户定义的目标进行跟踪

时间:2014-04-29 20:26:00

标签: opencv computer-vision feature-detection

我有一个项目来创建一个应用程序,用户可以在其中绘制感兴趣的区域(在此示例中,围绕要跟踪的车辆的矩形),它将在录制的视频的后续帧中自动跟踪车辆。 / p>

到目前为止,我使用OpenCV实现的方法如下:

  

(1)从initial_frame获取用户定义的矩形(感兴趣的区域)   enter image description here

     

(2)在感兴趣的区域使用goodFeaturesToTrack并存储initial_features   enter image description here

     

(3)逐步浏览视频 中的下一帧3.1:获取next_frame 3.2:致电calcOpticalFlowPyrLK(prevImg, nextImg, prevPts, nextPts,...) *其中{{1} }始终为prevImginitial_frame始终为prevPts initial_featues,每次我只用下一帧视频 更新nextImg 3.3:从 nextPts获取新发现的要素的边界矩形3.4:显示带有边界矩形的框架 enter image description here

这种方法适用于50个连续帧中的大多数帧,除了跟踪结果的几次之外:

enter image description here

但超过50帧,结果变得越来越不准确:

enter image description here

原始图像中的特征在后续帧中变得越来越不普遍,这是有道理的,所以我正在寻找关于如何改进这种跟踪方法或者可能完全找到更好方法的想法。

已经出现的是使用卡尔曼滤波器,但是我不知道用于测量和动态参数的参数,以及如何根据光流中的特征更新测量值。 在这种应用程序中,我对任何建议甚至完全不同的对象跟踪方法持开放态度。

*注意:这个函数是用来获取光流返回的特征数组的边界矩形(我在这里使用的是EMGUCV):


  

3 个答案:

答案 0 :(得分:1)

尝试使用相关跟踪器。现代的很好,例如:https://www.youtube.com/watch?v=-8-KCoOFfqs。您还可以在dlib中获取此代码。

答案 1 :(得分:1)

OpenCV 3.0 contrib有几个跟踪器(TLD,MEDIANFLOW,BOOSTING和MIL)。您也可以找到CPP示例。 VOT挑战页面提供了性能比较状态跟踪器。

答案 2 :(得分:0)

美好的一天。 你有什么是漂移问题。 您第一次使用的功能仅适用于对象。 但是当新框架更新旧模板时,背景杂乱的某些部分包含在图像中作为新模板。您需要使用类似的模板更新模板,并且有像BMR调整这样的算法。