基本上,我想检测一个对象,然后在视频中(逐帧)跟踪它。
我可以在第一帧上检测到它,例如 ORB 或 SIFT。但是对于接下来的帧(或者说接下来的 XX 帧),我想避免再次计算所有关键点(ORB 或 SIFT)以再次检测它。
考虑到我想在视频中实时跟踪它,我该怎么办?
基本上,我想检测一个对象,然后在视频中(逐帧)跟踪它。
我可以在第一帧上检测到它,例如 ORB 或 SIFT。但是对于接下来的帧(或者说接下来的 XX 帧),我想避免再次计算所有关键点(ORB 或 SIFT)以再次检测它。
考虑到我想在视频中实时跟踪它,我该怎么办?
一个常见的选项是使用patchtracker。这意味着您只需在前一帧关键点周围 8 个像素的区域中搜索关键点。您可以执行cv::matchTemplate()
关键点周围的区域,而不是使用 SIFT。
执行金字塔搜索有助于提高帧速率。您首先以较低的比例搜索,如果找不到关键点,则将比例加倍。
如果 patchtracker 由于图像移动太快而失败,您只需再次应用 SIFT 重新初始化系统。我会使用 FAST 而不是 SIFT。您可以使用 SIFT 作为标记,然后使用 FAST 实时检测关键点,生成 SIFT 描述符。
检测和跟踪视频中的对象是一个非常大的话题,具体方法取决于您的应用程序。没有灵丹妙药!如果您实现了检测部分,如果您需要跟踪的对象是彩色的,您可以尝试通过颜色(可能是 HSV 颜色空间)可能性的均值偏移进行跟踪,或者尝试模板匹配,或者..您需要更具体地了解您的需要。
您可以使用 TLD 或 CLM 实现几乎完美的实时跟踪。一旦您检测到感兴趣的对象,使用该边界框来启动捕食者跟踪。你可以在这里找到关于 CMT https://www.gnebehay.com/cmt/
和这里的顶级域名 https://www.gnebehay.com/tld/