【问题标题】:OpenCV Brisk not detecting any keypointsOpenCV Brisk 未检测到任何关键点
【发布时间】:2021-09-01 22:30:05
【问题描述】:

我想在更大的图像中检测一张图像(即查看是否存在类似版本)。模板匹配不够准确,因为项目可以生根和缩放,所以 Brisk 似乎是一个有希望的方法:

但是,当我尝试创建描述符时,我没有得到任何回报:

这是我的示例图片:

BRISK = cv2.BRISK_create()
keypoints1, descriptors1 = BRISK.detectAndCompute(img, None)

返回

 ([], None)

有什么建议可以让我获得更好的结果吗?为什么 Brisk 没有检测到任何特征?将阈值更改为 0 并添加八度音似乎没有帮助。

【问题讨论】:

    标签: opencv feature-extraction imagedownload


    【解决方案1】:

    您的图片太小,无法找到任何有意义的描述符。除非您使用更大尺寸的图像,否则可以使用以下解决方案:

    img = cv2.imread("/path/to/image/so_brisk.png")
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  # Gray
    w, h = gray.shape
    scale_factor = 3
    gray = cv2.resize(gray, (h*scale_factor, w*scale_factor), interpolation = cv2.INTER_AREA)
    
    BRISK = cv2.BRISK_create()
    keypoints1, descriptors1 = BRISK.detectAndCompute(gray, None)
    

    【讨论】:

    • 好的,这似乎可行。谢谢。当我从 BFMatcher 获得匹配时,我如何才能最好地确定哪张卡是最佳匹配? Brisk 适合这个吗?
    • 老实说,我没有在任何项目中使用过 BRISK,我使用过 SIFT,并且效果很好。由于 BRISK 是 SIFT 的替代品,我的预感是它至少和 SIFT 一样好。使用它来找到最佳匹配会很棘手,您可能必须选择前 5 或 10 个描述符(按距离并按最小到最大距离排序)并进行最小二乘以找到最接近的匹配候选图像。但是当图像很大甚至可能不是很准确时,该代码肯定会非常低效。
    • 看起来神经网络可能更适合这样的分类任务
    • 确实如此。我打算建议但没有这样做,因为这将是相当多的工作。我确实在我的应用程序中广泛使用它。顺便说一句,我发布的解决方案解决了您提出的问题:D
    • 我们开始吧。但有一点后续问题:stackoverflow.com/questions/68039211/…
    猜你喜欢
    • 2021-01-11
    • 2012-09-06
    • 2020-08-09
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多