在计算了一帧的SIFT或ORB之后,如何实时跟踪视频中的对象

After having calculate SIFT or ORB on a frame, how to real time track the object in a video?

本文关键字:何实时 实时 跟踪 对象 视频 算了 计算 一帧 ORB SIFT 之后      更新时间:2023-10-16

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

我可以用ORB或SIFT在第一帧上检测到它。但对于接下来的帧(或者说接下来的XX帧),我希望避免再次对所有关键点(ORB或SIFT)进行挖掘以再次检测。

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

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

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

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

检测和跟踪视频中的对象是一个非常大的主题,具体方法在很大程度上取决于您的应用程序。没有神奇的子弹!如果你实现了检测部分,如果你需要跟踪的对象是有色的,你可以尝试通过颜色(可能是HSV颜色空间)可能性的均值偏移进行跟踪,或者尝试模板匹配,或者。。你需要更加明确自己的需求。

您可以使用OpticalFlow进行简单跟踪,以下是执行此操作的步骤…

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

  2. 将这些角点和上一个图像(在该图像中,您找到了要跟踪的对象的角点)以及下一个图像交给opticalflow函数,它将在接下来的图像中计算同一对象的角。。

以下是链接:

Link1

Link2

代码

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

使用TLD或CLM可以实现近乎完美的实时跟踪。一旦你检测到感兴趣的物体,就使用边界框来启动捕食者跟踪。你可以在这里找到CMThttps://www.gnebehay.com/cmt/

和TLDhttps://www.gnebehay.com/tld/