首页 文章

OpenCV ORB检测器找到的关键点非常少

提问于
浏览
6

我正在尝试使用ORB关键点检测器,它似乎返回比SIFT检测器和FAST检测器少得多的点 .

此图显示了ORB检测器找到的关键点:

enter image description here

此图像显示了SIFT检测阶段找到的关键点(FAST返回相似数量的点) .

enter image description here

具有这么少的点导致图像之间的特征匹配结果非常差 . 我现在只是对ORB的检测阶段感到好奇,因为这似乎是我得到了不正确的结果 . 我已尝试使用带有默认参数的ORB检测器以及下面详述的自定义参数 .

为什么会有这么大的差异?

码:

orb = cv2.ORB_create(edgeThreshold=15, patchSize=31, nlevels=8, fastThreshold=20, scaleFactor=1.2, WTA_K=2,scoreType=cv2.ORB_HARRIS_SCORE, firstLevel=0, nfeatures=500)
#orb = cv2.ORB_create()
kp2 = orb.detect(img2)
img2_kp = cv2.drawKeypoints(img2, kp2, None, color=(0,255,0), \
        flags=cv2.DrawMatchesFlags_DEFAULT)

plt.figure()
plt.imshow(img2_kp)
plt.show()

2 回答

  • 0

    增加 nfeatures 会增加检测到的拐角数量 . 关键点提取器的类型似乎无关紧要 . 我不确定这个参数如何传递给FAST或Harris,但似乎有效 .

    orb = cv2.ORB_create(scoreType=cv2.ORB_FAST_SCORE)
    

    enter image description here

    orb = cv2.ORB_create(nfeatures=100000, scoreType=cv2.ORB_FAST_SCORE)
    

    enter image description here

  • 4

    虽然这个帖子很老,但我希望这可以帮助有同样问题的人:

    我不确定这个参数是如何传递给FAST或Harris的,但似乎有效 .

    Rublee等人对此进行了很好的解释 . 在他们的论文“ORB:SIFT或SURF的有效替代品”中 . 由于我认为不能更好地解释它,这里是“2011年计算机视觉国际 Session ”第2565页的直接引用:

    FAST不会产生角度度量,我们发现它沿边缘有很大的响应 . 我们采用Harris角点测量[11]来订购FAST关键点 . 对于关键点的目标数量N,我们首先将阈值设置得足够低以获得多于N个关键点,然后根据Harris度量对它们进行排序,并选择前N个点 .

相关问题