所以,我能够在两个图像,一个查询图像和其他场景图像中的特征点中进行匹配:
flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.match(des1,des2)
现在,当我匹配时,我如何知道查询图像在场景图像中的定向方式。我可以根据这些匹配知道角度或比例吗?
我在比赛中看到distance
属性 - 但我不明白我们如何使用它来查找方向。
答案 0 :(得分:0)
距离是“描述符向量空间”中点之间的距离。这不是“ X,Y”距离。
提醒该过程:
如果需要,过滤单应性=“此转换矩阵看起来不错/不好”。
def ransac_filter(matches, pic1, pic2):
MIN_MATCH_COUNT = 10
good = []
transformation_matrix = None
if len(matches) > MIN_MATCH_COUNT:
src_pts = np.float32([pic1.key_points[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2)
dst_pts = np.float32([pic2.key_points[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2)
# Find the transformation between points
transformation_matrix, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
# Get a mask list for matches = A list that says "This match is an in/out-lier"
matchesMask = mask.ravel().tolist()
# Filter the matches list thanks to the mask
for i, element in enumerate(matchesMask):
if element == 1:
good.append(matches[i])
pic1.transformation_matrix = transformation_matrix
pic1.matchesMask = matchesMask
else:
logger = logging.getLogger()
logger.info("not enough matches")
return good, transformation_matrix
从以下方面得到一些启发: https://docs.opencv.org/3.1.0/d1/de0/tutorial_py_feature_homography.html