예제 #1
0
        /// <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);
            }
        }