/// <summary> /// Recover the homography matrix using RANDSAC. If the matrix cannot be recovered, null is returned. /// </summary> /// <param name="model">The model keypoints</param> /// <param name="observed">The observed keypoints</param> /// <param name="ransacReprojThreshold"> /// The maximum allowed reprojection error to treat a point pair as an inlier. /// If srcPoints and dstPoints are measured in pixels, it usually makes sense to set this parameter somewhere in the range 1 to 10. /// </param> /// <param name="mask"> /// The mask matrix of which the value might be modified by the function. /// As input, if the value is 0, the corresponding match will be ignored when computing the homography matrix. /// If the value is 1 and RANSAC determine the match is an outlier, the value will be set to 0. /// </param> /// <returns>The homography matrix, if it cannot be found, null is returned</returns> /// <param name="matches">Matches. Each matches[i] is k or less matches for the same query descriptor.</param> public static Mat GetHomographyMatrixFromMatchedFeatures(VectorOfKeyPoint model, VectorOfKeyPoint observed, VectorOfVectorOfDMatch matches, Mat mask, double ransacReprojThreshold) { Mat homography = new Mat(); bool found = Features2DInvoke.getHomographyMatrixFromMatchedFeatures(model, observed, matches, mask, ransacReprojThreshold, homography); if (found) { return(homography); } else { homography.Dispose(); return(null); } }