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个最佳匹配项,但离群值的百分比仍然很高。 >
答案 0 :(得分:0)
cv2.findHomography
如果源对到目标投影之间的距离大于ransacReprojThreshold
(在代码中为5.0),则将一个点对视为内部点:
norm(src_pts[i] - M * dst_pts[i]) > ransacReprojThreshold
ransacReprojThreshold-将点对视为内部点的最大允许重新投影错误。
因此,如果您要找到100个“最佳”匹配项,即使它的重投影错误大于5.0: