-
用来快速匹配特征。
-
名词含义:
des1:第一组特征向量
des2:第二组特征向量 -
基于opencv,该方法得到des1在des2中前k个最近的特征
输入:
相同维度的两个特征描述
n行 m列,n是关键点个数,m是每个关键点特征描述的维度
输出:
前k个最相近的特征向量
import cv2
from numpy import *
# While using ORB, you can pass the following.
FLANN_INDEX_LSH = 6
index_params = dict(algorithm=FLANN_INDEX_LSH,
table_number=6, # 12
key_size=12, # 20
multi_probe_level=1) # 2
search_params = dict(checks=50) # or pass empty dictionary 这是第二个字典,指定了索引里的树应该被递归遍历的次数
flann = cv2.FlannBasedMatcher(index_params, search_params)
# 制作描述子
des_1 = array([[0, 0], [1, 1], [3, 3]]).astype(uint8) # 训练 模板
des_2 = array([[3, 3], [0, 0], [1, 1]]).astype(uint8) # 查询
# queryDescriptors, trainDescriptors, k, mask, compactResult
matches = flann.knnMatch(des_2, des_1, k=2)
# print(matches)
for (m, n) in matches: # m是最小距离 n是次小距离(或者一会加上过滤)
print(m.distance)
# print('m.queryIdx:', m.queryIdx) # 查询
print('trainIdx:', m.trainIdx) # 训练
输出结果:
0.0
trainIdx: 2
0.0
trainIdx: 0
0.0
trainIdx: 1
由此看出,在查询图像中找到了每个最相似的关键点的索引