python - OpenCV ORB 检测器发现非常少的关键点

标签 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()

最佳答案

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

关于python - OpenCV ORB 检测器发现非常少的关键点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32702433/

相关文章:

opencv - 检测或分割网格中的图标

opencv - OpenCV 3 中 SIFT 的示例代码?

python - 从文本文件中解析电子邮件信息

python - 为什么有些人将两个不同网络的参数链接起来并使用相同的优化器进行训练?

python - 分水岭分割不包括单独的对象?

machine-learning - 卷积神经网络的识别类型

python - Keras 中的模型包装器还有哪些其他权重类型?

python - 继续获取 CORS 策略 : No 'Access-Control-Allow-Origin' even with FastAPI CORSMiddleware

python - 卷积并合并到输入图像后如何计算输出大小

c++ - 背景提取