我正在尝试使用ORB关键点检测器,它似乎比SIFT检测器和FAST检测器返回的点少得多。
此图显示了ORB探测器找到的关键点:
,此图显示了SIFT检测阶段找到的关键点(FAST返回相似数量的点)。
具有这么少的点会导致图像之间的特征匹配结果非常差。我现在只是对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()
答案 0 :(得分:7)
增加 nfeatures 会增加检测到的角落数量。关键点提取器的类型似乎无关紧要。我不确定这个参数是如何传递给FAST或Harris的,但似乎有效。
orb = cv2.ORB_create(scoreType=cv2.ORB_FAST_SCORE)
orb = cv2.ORB_create(nfeatures=100000, scoreType=cv2.ORB_FAST_SCORE)
答案 1 :(得分:0)
即使此线程很旧,我希望这可以对遇到相同问题的人有所帮助:
我不确定如何将此参数传递给FAST或Harris,但它似乎有效。
Rublee等人对此做了很好的解释。在他们的论文“ ORB:SIFT或SURF的有效替代品”中。由于我认为无法更好地解释它,因此直接引自“ 2011年国际会议 计算机视觉”:
FAST不能测量拐角,我们 已经发现它在边缘具有很大的响应。我们雇用 哈里斯角点度量[11]来排序FAST关键点。 对于目标N个关键点,我们首先将 阈值低到足以获得N个以上的关键点,然后 根据哈里斯度量值对它们进行排序,然后选择 前N分。