如何使用视频对物体进行运动跟踪? [关闭]

Posted

技术标签:

【中文标题】如何使用视频对物体进行运动跟踪? [关闭]【英文标题】:How to do motion tracking of an object using video? [closed] 【发布时间】:2011-06-09 18:36:33 【问题描述】:

有人可以指导我学习教程或指导我如何跟踪以 6 DOF 移动的物体的运动。我打算使用移动玩具车的视频流。我想计算玩具车的位移和旋转角度。我遇到了一些研究论文,但找不到任何适合这项工作的库。

有没有办法使用 OpenCV 或 Matlab 或其他一些免费提供的软件来做到这一点?

谢谢

【问题讨论】:

可能是神经网络(我完全不确定)... 我希望有一种更简单的方法 (:D) 可能是使用边缘、角落和表面特征 那么我猜模式匹配看起来是唯一的选择。在这种情况下祝你好运;) 这是一个您要解决的难题。 @Utkrash 这是我最后一年研究的一部分。我的项目与免费视点视频有关。该项目非常依赖于此。我必须完成这件事。我计划研究这里提出的方法。这就是为什么我还没有接受任何。如果我成功了,我肯定会发布我的解决方案 【参考方案1】:

看看TLD(显然是Matlab):

TLD 是一种屡获殊荣的实时算法,用于跟踪视频流中的未知对象。感兴趣的对象由单个帧中的边界框定义。 TLD 同时跟踪对象,了解它的外观并在它出现在视频中时检测它。结果是实时跟踪通常会随着时间的推移而改进。

没有亲自使用过,但是演示视频很棒。

【讨论】:

【参考方案2】:

跟踪是一个经典的计算机视觉问题,计算机科学仍致力于研究它;您可以通过查看CVPR 2010(这是一年一度的***计算机视觉会议)中的accepted papers 列表来快速了解该领域的最新技术,您会发现仍有活跃的正在发表的关于该主题的作品(在列表中搜索“跟踪”一词)。

跟踪问题解决方案的标准处理流程如下:首先解析图像以提取有意义的描述符,从而捕获图像的相关角点和其他显着特征。这些描述符随后被馈送到一个在线分类器,该分类器经过训练可以在每一帧中检测您感兴趣的特定对象的可能实例。您的对象的描述符可能是从先前的对象外观示例中先验地知道的(即离线计算),但它通常在每一帧中根据系统随时间看到的内容进行更新,以使检测自适应到动态对象外观。最后,为了从每一帧(从检测到的那些)中的可能候选池中进行选择,对象的位置和速度等参数使用顺序相对于先前帧估计统计模型。

有大量关于良好图像描述符的计算机视觉文献,但其中一些最受欢迎的是SIFT、SURF 或HOG。对于分类,最成功的两种方法是support vector machines或classification ensembles(例如boosting或random forests),而对于估计部分,大多数人仍然使用Kalman filters(这是一种顺序的@987654331 @)、particle filters 或更一般的density estimation models。

您描述的具体情况比自然户外场景中任意相机和对象运动的更一般和更困难的对象跟踪问题要容易一些,因此您可能能够在网上找到一些可以立即在您的设置,但我对此表示怀疑。正如其他人指出的那样(据我所知),没有现成的 库可以立即适用于各种对象、背景和运动空间。也就是说,您可能可以在线找到我上面描述的标准通用管道的各个组件(分类器、过滤器/特征库、马尔可夫估计模型)的代码。

我的建议是,如果你有兴趣构建一个好的系统(即真正有效的系统),那么请查看***年度计算机视觉会议上最新论文作者的网站,例如CVPR、@ 987654335@、ECCV 和 SIGGRAPH。他们倾向于将最近工作的代码与一些视频示例放在一起,这可能有助于您了解他们的方法在真实环境中的工作原理。

【讨论】:

【参考方案3】:

如果你想尝试一些现成的代码,OpenCV 附带了一个示例文件。在 OpenCV 2.1 中,它位于 samples/c/blobtrack.cpp 中,而在 OpenCV 2.2 中,它位于 samples/c/blobtrack_sample.cpp 中。两者都带有 .exe 文件,因此您可以立即试用这些示例,以防您碰巧使用 Windows。有一个旧网站The OpenCV Video Surveillance / Blob Tracker Facility,记录了代码的工作原理。

blobtrack.cpp中的tracker分为三个阶段(抄自上一个链接):

    前景/背景鉴别器,将每个像素标记为前景或背景。 一种斑点检测器,可将相邻的“前景”像素分组为斑点,填充样式。 一个 Blob 跟踪器,它为 Blob 分配 ID 号并逐帧跟踪它们的运动。

blobtrack.cpp 实际上为每个阶段实现了几种方法,因此您可以尝试不同的组合来查看哪种方法效果最好。

最后一个阶段意味着您实际上可以同时跟踪多个对象。我已经在使用静态相机拍摄的高速公路上行驶的车辆视频上对其进行了测试,它的效果非常好,如果用最好的方法有点慢的话。

此外,如果您的视频的背景是静态的,也就是说,如果从一帧到另一帧的唯一变化是玩具,那么您可以使用一种称为背景减法的简单技术大有帮助汽车本身。但我认为这只会帮助你定位物体,而不是估计它的姿势。

注意:我无法使用 OpenCV 2.2 附带的示例。 OpenCV 2.1 附带的那个对我来说很好用。

【讨论】:

【参考方案4】:

也许KLT Tracker (Kanade Lucas Tomasi) 可以帮助您。它告诉您检测到的点在图像之间移动的位置。 OpenCV 库包含一个 KLT Tracker 版本,但没有仿射一致性检查(如 KLT 主页所述)。

【讨论】:

【参考方案5】:

我怀疑是否有准备好使用的程序...至少您将必须获得几个方法或库,并且使用不那么简单的数学来做到这一点。人们为此做论文!

这是我最近读到的一篇论文:

http://cobweb.ecn.purdue.edu/RVL/Research/ModelBasedTracking/index.html

如果您认为不是您正在寻找的东西,那么去参考只是为了获得更多的想法;)

【讨论】:

【参考方案6】:

这是你要找的软件http://www.cabrillo.edu/~dbrown/tracker/

这篇文章可能对你有所启发http://www.wired.com/wiredscience/2010/10/physics-of-angry-birds/

【讨论】:

以上是关于如何使用视频对物体进行运动跟踪? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

目标跟踪基于matlab光流法运动视频跟踪含Matlab源码 1357期

目标跟踪基于Kalman滤波跟踪视频运动目标matlab代码

如何跟踪运动物体的轨迹openCV C++

跟踪运动目标

滤波跟踪基于Kalman滤波的视频目标跟踪matlab 源码

目标检测基于matlab GUI背景差分算法视频运动物体跟踪含Matlab源码 1915期