OpenCV ORB检测器发现很少的关键点 [英] OpenCV ORB detector finds very few keypoints
问题描述
我正在尝试使用ORB关键点检测器,它似乎返回的点比SIFT检测器和FAST检测器少得多.
I'm trying to use the ORB keypoint detector and it seems to be returning much fewer points than the SIFT detector and the FAST detector.
此图显示了由ORB检测器找到的关键点:
This image shows the keypoints found by the ORB detector:
,此图显示了SIFT检测阶段找到的关键点(FAST返回相似数量的点).
and this image shows the keypoints found by the SIFT detection stage (FAST returns a similar number of points).
如此少的点导致整个图像的特征匹配结果非常差.我现在只是对ORB的检测阶段感到好奇,尽管这似乎是我得到了不正确的结果.我尝试将ORB检测器与默认参数以及下面详述的自定义参数一起使用.
Having such few points is resulting in very poor feature matching results across images. I'm just curious about the detection stage of ORB right now though because this seems like I'm getting incorrect results. I've tried using the ORB detector with default parameters and also custom parameters detailed below as well.
为什么会有如此大的差异?
Why such a big difference?
代码:
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()
推荐答案
增加 nfeatures 会增加检测到的角点数量.关键点提取器的类型似乎无关紧要.我不确定如何将此参数传递给FAST或Harris,但它似乎有效.
Increasing nfeatures increases the number of detected corners. The type of keypoint extractor seems irrelevant. I'm not sure how this parameter is passed to FAST or Harris but it seems to work.
orb = cv2.ORB_create(scoreType=cv2.ORB_FAST_SCORE)
orb = cv2.ORB_create(nfeatures=100000, scoreType=cv2.ORB_FAST_SCORE)
这篇关于OpenCV ORB检测器发现很少的关键点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!