如何在OpenCV中使用Flann特征匹配找到场景中图像的方向

时间:2018-02-28 13:30:11

标签: opencv cv2 flann

所以,我能够在两个图像,一个查询图像和其他场景图像中的特征点中进行匹配:

flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.match(des1,des2)

现在,当我匹配时,我如何知道查询图像在场景图像中的定向方式。我可以根据这些匹配知道角度或比例吗?

我在比赛中看到distance属性 - 但我不明白我们如何使用它来查找方向。

1 个答案:

答案 0 :(得分:0)

距离是“描述符向量空间”中点之间的距离。这不是“ X,Y”距离。

提醒该过程:

  • 在两张图片中找到关键点
  • 估计“匹配” =按键之间的距离,按对进行比较
  • 删除不匹配项(比率,交叉检查...)
  • 使用Homography计算来估计两张图片之间进行的转换(平移,旋转...)
  • 如果需要,过滤单应性=“此转换矩阵看起来不错/不好”。

    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