【问题标题】:Real time keypoint detection algorithm实时关键点检测算法
【发布时间】:2021-05-11 21:56:45
【问题描述】:

我需要在监控摄像头下测量传送带的速度。皮带穿了几年基本上没有质感,上面什么都没有,甚至很难看出皮带是否在移动。

我正在尝试将此问题作为对象跟踪问题来解决:

  1. 在腰带上找到一些关键点/对象。
  2. 使用 OpenCV 的中值流跟踪器跟踪这些关键点/对象。
  3. 逆透视变换并获得 3D 空间中的速度。

如果手动给出第 1 步中的关键点/对象,则第 2 步和第 3 步工作得很好,但我在自动查找关键点时遇到了性能问题:即使我将图像裁剪成非常小的图像,关键点检测也会花费 60 毫秒以上。我尝试了在 OpenCV 中实现的 SURF 和 ORB,但都不够快。

还有其他更快的选择吗?

【问题讨论】:

  • emm 通常快速运行只需几微秒。以 480p 图像为例。运行它只需要大约 5 毫秒。
  • 中位流跟踪器。是缓慢的过程。试试 KCF 或 LKT 追踪器?
  • @DrYuanShenghai 我已经测试了 OpenCV 中实现的所有跟踪器,在我的情况下,中值流是最快和最可靠的。皮带的运动非常平稳,绝对没有遮挡。它与其他特征跟踪问题非常不同。
  • 好的。可以发布一些视频或图像以进行进一步分析吗?如果我理解正确,您需要跟踪帧间特征移动。不跟踪对象,对吗?我有一种感觉,您可能会创建一个框来跟踪杀死您的 PC 的每个功能。在 VSLAM 中,从来没有这样做过。 ORBSLAM 与 SVO 相比相对较慢。也许 SVO 就是您要找的东西?

标签: opencv keypoint feature-tracking


【解决方案1】:

也许您可以尝试使用 FAST 算法进行角点检测。它比您尝试过的选项更快。它在opencv中实现。以下是直接从 opencv 文档 (https://docs.opencv.org/master/df/d0c/tutorial_py_fast.html) 中提取的示例代码:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('simple.jpg',0)

# Initiate FAST object with default values
fast = cv.FastFeatureDetector_create()

# find and draw the keypoints
kp = fast.detect(img,None)
img2 = cv.drawKeypoints(img, kp, None, color=(255,0,0))

# Print all default params
print( "Threshold: {}".format(fast.getThreshold()) )
print( "nonmaxSuppression:{}".format(fast.getNonmaxSuppression()) )
print( "neighborhood: {}".format(fast.getType()) )
print( "Total Keypoints with nonmaxSuppression: {}".format(len(kp)) )
cv.imwrite('fast_true.png',img2)

# Disable nonmaxSuppression
fast.setNonmaxSuppression(0)

kp = fast.detect(img,None)

print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) )
img3 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
cv.imwrite('fast_false.png',img3)

【讨论】:

  • FAST 稍微快一点,不是改变游戏规则,仍然不够快,无法实时运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 2010-09-26
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多