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

时间:2015-09-21 18:43:23

标签: python opencv computer-vision feature-detection

我正在尝试使用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 :(得分:7)

增加 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

答案 1 :(得分:0)

即使此线程很旧,我希望这可以对遇到相同问题的人有所帮助:

  

我不确定如何将此参数传递给FAST或Harris,但它似乎有效。

Rublee等人对此做了很好的解释。在他们的论文“ ORB:SIFT或SURF的有效替代品”中。由于我认为无法更好地解释它,因此直接引自“ 2011年国际会议 计算机视觉”:

  

FAST不能测量拐角,我们   已经发现它在边缘具有很大的响应。我们雇用   哈里斯角点度量[11]来排序FAST关键点。   对于目标N个关键点,我们首先将   阈值低到足以获得N个以上的关键点,然后   根据哈里斯度量值对它们进行排序,然后选择   前N分。