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

时间:2012-07-16 22:47:31

标签: c++ opencv tracking object-detection

基本上我想检测一个物体,而不是在视频中逐帧追踪它。

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

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

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:5)

检测和跟踪视频中的对象是一个非常大的主题,并且高度依赖于您的应用程序。没有灵丹妙药! 如果您实现了检测部分,您可以尝试通过手段跟踪颜色(可能是HSV颜色空间)可能性,如果您需要跟踪的对象是彩色的..,或尝试模板匹配,或者..您需要更具体的需要。

答案 2 :(得分:4)

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

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

  2. 给出那些角落和之前的图像(在其中找到要跟踪的对象的角落)和下一个图像到光流功能,它将计算下一个图像中同一对象的角落..

  3. 以下是链接:

    Link1

    Link2

    code

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

答案 3 :(得分:0)

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

和TLD在这里 https://www.gnebehay.com/tld/