【问题标题】:Keypoints detection and matching between binary masks二进制掩码之间的关键点检测和匹配
【发布时间】:2019-08-03 09:05:23
【问题描述】:

我正在尝试使用 opencv (tutorial) 在下面显示的图像之间匹配关键点。 问题是我不确定是否需要调整一些参数或者我完全使用了错误的方法。只取 map.png 的右侧也无济于事。 这是我的代码,也是结果。

import numpy as np
import cv2
import matplotlib.pyplot as plt

img1 = cv2.imread('../map.png',0)
img2 = cv2.imread('../mask.png',0)

orb = cv2.ORB_create()

kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

matches = bf.match(des1,des2)

matches = sorted(matches, key = lambda x:x.distance)

img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:20], None, flags=2)
cv2.imwrite('test.png', img3)

【问题讨论】:

  • 可以发图片吗?
  • 我在发布代码和图片时遇到了一些问题...
  • 您可以将它们发布到外部服务器并上传链接

标签: python opencv computer-vision template-matching keypoint


【解决方案1】:

您使用的 ORB 等特征检测器旨在匹配平移、旋转和比例不同的图像之间的特征点。当图像在透视上存在显着差异(即您的情况)并且因此您的方法不起作用时,它们不打算使用。此外,此类算法专为照片等纹理丰富的图像而设计。在您的情况下,这些特征是重复的(从第一张图像中提取的多个特征点,例如行尾,可以匹配到另一个图像中的一个点)。 在您的情况下,您应该考虑其他功能,例如基于线交点的功能,请参阅tutorial 了解更多信息。这只是一个提示,而不是解决您的问题的方法,因为它确实具有挑战性。

【讨论】:

    猜你喜欢
    • 2014-09-12
    • 2017-04-28
    • 2014-05-04
    • 2017-03-19
    • 1970-01-01
    • 2012-05-27
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多