如何在 OpenCV Python 中实现基于 FLANN 的特征匹配?

opencvpythonserver side programmingprogramming更新于 2024/2/8 16:25:00

我们使用尺度不变特征变换 (SIFT) 和 FLANN(近似最近邻快速库)实现两幅图像之间的特征匹配。SIFT 用于查找特征关键点和描述符。使用带有 knn 的基于 FLANN 的匹配器来匹配两幅图像中的描述符。我们使用 cv2.FlannBasedMatcher() 作为基于 FLANN 的匹配器。

步骤

要使用 SIFT 特征检测器和基于 FLANN 的匹配器在两幅图像之间实现特征匹配,您可以按照以下步骤操作:

  • 导入所需的库 OpenCV、MatplotlibNumPy。确保您已经安装了它们。

  • 使用 cv2.imread() 方法将两幅输入图像读取为灰度图像。指定图像的完整路径。

  • 使用 sift=cv2.SIFT_create() 使用默认值启动 SIFT 对象。

  • 使用 sift.detectAndCompute() 检测并计算两个输入图像中的关键点 'kp1' 和 'kp2' 以及描述符 'des1' 和 'des2'。

  • 创建一个基于 FLANN 的匹配器对象 flann = cv2.FlannBasedMatcher() 并使用 flann.knnMatch(des1,des2,k=2) 匹配描述符。它返回匹配项。对匹配项应用比率测试以获得最佳匹配。使用 cv2.drawMatchesKnn() 绘制匹配项。

  • 可视化关键点匹配项。

让我们看一些使用 SIFT 特征检测器和基于 FLANN 的匹配器匹配两幅图像的关键点的示例。

输入图像

我们在下面的示例中使用以下图像作为输入文件。



示例

在此示例中,我们使用 SIFT 算法检测两个输入图像的关键点和描述符,并使用 基于 FLANN 的匹配器knn 匹配描述符。我们还应用比率测试来仅找到好的匹配项。我们还绘制关键点和匹配项。

# import required libraries import numpy as np import cv2 from matplotlib import pyplot as plt # read two input images img1 = cv2.imread('car.jpg',0) img2 = cv2.imread('car-rotated-crop.jpg',0) # Initiate SIFT detector sift = cv2.SIFT_create() # find the keypoints and descriptors with SIFT kp1, des1 = sift.detectAndCompute(img1,None) kp2, des2 = sift.detectAndCompute(img2,None) # FLANN parameters FLANN_INDEX_KDTREE = 0 index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) search_params = dict(checks=50) # or pass empty dictionary # apply FLANN based matcher with knn flann = cv2.FlannBasedMatcher(index_params,search_params) matches = flann.knnMatch(des1,des2,k=2) # Need to draw only good matches, so create a mask matchesMask = [[0,0] for i in range(len(matches))] # ratio test as per Lowe's paper for i,(m,n) in enumerate(matches): if m.distance < 0.1*n.distance: matchesMask[i]=[1,0] draw_params = dict(matchColor = (0,255,0),singlePointColor = (255,0,0),matchesMask = matchesMask,flags = 0) img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params) plt.imshow(img3),plt.show()

输出

当您运行上述 Python 程序时,它将生成以下输出窗口 −



相关文章