【问题标题】:After having calculate SIFT or ORB on a frame, how to real time track the object in a video?在一帧上计算SIFT或ORB后,如何实时跟踪视频中的对象?
【发布时间】:2012-07-15 20:30:52
【问题描述】:

基本上,我想检测一个对象,然后在视频中(逐帧)跟踪它。

我可以在第一帧上检测到它,例如 ORB 或 SIFT。但是对于接下来的帧(或者说接下来的 XX 帧),我想避免再次计算所有关键点(ORB 或 SIFT)以再次检测它。

考虑到我想在视频中实时跟踪它,我该怎么办?

【问题讨论】:

  • 我也有同样的想法,我也有同样的问题,但我在视频上使用了 SURF+SVM,但我得到了同一对象的多个帧,那么您最终使用哪种技术?可以分享一下吗

标签: c++ opencv tracking object-detection


【解决方案1】:

一个常见的选项是使用 patchtracker。这意味着您只需在前一帧关键点周围 8 个像素的区域中搜索关键点。您可以对关键点周围的区域执行cv::matchTemplate(),而不是使用 SIFT。

执行金字塔形搜索有助于提高帧速率。您首先在较低的比例上搜索,如果找不到关键点,则将比例加倍。

如果 patchtracker 由于图像移动太快而失败,您只需再次应用 SIFT 重新初始化系统。我会使用 FAST 而不是 SIFT。您可以使用 SIFT 作为标记,然后使用 FAST 实时检测关键点,生成 SIFT 描述符。

【讨论】:

  • 但是由于您将估计单应性,您可以投影补丁,以便它们将被旋转和缩放
  • 你会有一个大概的位置。另一种选择是使用卡尔曼滤波器,因此您将获得预测的单应性,但这不是必需的。前面的单应性会给出搜索路径的大致位置。
  • @Jav_Rock +1,我正在使用带有 SVM 的 SURF 从实时视频中预测对象,它在预测中效果很好,但是当我预测一个移动的对象时,它会检查并保存包含一个特定移动的每一帧像车辆这样的物体。它需要大量内存,所以卡尔曼滤波器也可以使用它吗?所以我只能保存一个特定对象的一帧,如果它保留接下来的 70 个连续帧。我希望如果有两辆不同的车辆进入并且它们在相机的眼睛中保持 100 个连续帧,那么我的系统只保存其中的 2 个帧谢谢
【解决方案2】:

检测和跟踪视频中的对象是一个非常大的话题,具体方法取决于您的应用程序。没有灵丹妙药! 如果您实现了检测部分,如果您需要跟踪的对象是彩色的,您可以尝试通过颜色(可能是 HSV 颜色空间)可能性的均值偏移进行跟踪,或者尝试模板匹配,或者..您需要更具体地了解您的需要。

【讨论】:

    【解决方案3】:

    您可以使用 OpticalFlow 进行简单跟踪,以下是操作步骤...

    1. 使用 harris 角点检测器或 SIFT 特征检测器查找移动物体的角点。

    2. 将这些角点和上一个图像(您在其中找到要跟踪的对象的角点)和下一个图像提供给光流函数,它将计算下一个图像中同一对象的角点..

    以下是链接:

    Link1

    Link2

    code

    注意:如果您要解决遮挡处理、多人跟踪等问题,那么光流本身无法解决问题。因为需要使用卡尔曼滤波器或粒子滤波器......

    【讨论】:

      【解决方案4】:

      您可以使用 TLD 或 CLM 实现几乎完美的实时跟踪。一旦您检测到感兴趣的对象,请使用该边界框来启动捕食者跟踪。 你可以在这里找到关于 CMT https://www.gnebehay.com/cmt/

      这里是顶级域名 https://www.gnebehay.com/tld/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 2020-01-17
        • 2010-11-22
        相关资源
        最近更新 更多