使用ransac时如何获得更多内线?

时间:2019-07-01 18:15:54

标签: python matching homography ransac

matches = sorted(matches, key = lambda x: x.distance)
src_pts = np.float32([ kp1[m.queryIdx].pt for m in matches ]).reshape(-1,1,2)
dst_pts = np.float32([ kp2[m.trainIdx].pt for m in matches ]).reshape(-1,1,2)
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
matchesMask = mask.ravel().tolist()

我将MatchMask中的值用作离群值,事实证明该值受ransac的影响太大,我试图从匹配项中仅获取前100个最佳匹配项,但离群值的百分比仍然很高。 >

1 个答案:

答案 0 :(得分:0)

cv2.findHomography如果源对到目标投影之间的距离大于ransacReprojThreshold(在代码中为5.0),则将一个点对视为内部点:

norm(src_pts[i] - M * dst_pts[i]) > ransacReprojThreshold

ransacReprojThreshold-将点对视为内部点的最大允许重新投影错误。

因此,如果您要找到100个“最佳”匹配项,即使它的重投影错误大于5.0:

  1. 创建一个成对的数组:(点对和重投影错误),
  2. 按重投影错误排序
  3. 获得100点的最小投影误差。