예제 #1
0
        private void MatchBySurf(Mat src1, Mat src2)
        {
            var gray1 = new Mat();
            var gray2 = new Mat();

            Cv2.CvtColor(src1, gray1, ColorConversionCodes.BGR2GRAY);
            Cv2.CvtColor(src2, gray2, ColorConversionCodes.BGR2GRAY);

            var surf = SURF.Create(500, 4, 2, true);

            // Detect the keypoints and generate their descriptors using SURF
            KeyPoint[] keypoints1, keypoints2;
            var descriptors1 = new MatOfFloat();
            var descriptors2 = new MatOfFloat();
            surf.Compute(gray1, null, out keypoints1, descriptors1);
            surf.Compute(gray2, null, out keypoints2, descriptors2);

            // Match descriptor vectors 
            var bfMatcher = new BFMatcher(NormTypes.L2, false);
            var flannMatcher = new FlannBasedMatcher();
            DMatch[] bfMatches = bfMatcher.Match(descriptors1, descriptors2);
            DMatch[] flannMatches = flannMatcher.Match(descriptors1, descriptors2);

            // Draw matches
            var bfView = new Mat();
            Cv2.DrawMatches(gray1, keypoints1, gray2, keypoints2, bfMatches, bfView);
            var flannView = new Mat();
            Cv2.DrawMatches(gray1, keypoints1, gray2, keypoints2, flannMatches, flannView);

            using (new Window("SURF matching (by BFMather)", WindowMode.AutoSize, bfView))
            using (new Window("SURF matching (by FlannBasedMatcher)", WindowMode.AutoSize, flannView))
            {
                Cv2.WaitKey();
            }
        }
예제 #2
-1
        private void FindMatchingFeatures_Click(object sender, EventArgs e)
        {
            var file1 = comboBox1.SelectedItem.ToString();
            var file2 = comboBox2.SelectedItem.ToString();

            using (var img1 = new Mat(file1, ImreadModes.GrayScale))
            using (var img2 = new Mat(file2, ImreadModes.GrayScale))
            using (var dst = new Mat())
            {
                // find keypoints
                //var kp1 = FindFeatures(Constants.ImageControl1);
                //var kp2 = FindFeatures(Constants.ImageControl2);

                // find descriptors
                var descriptors1 = new Mat();
                var descriptors2 = new Mat();

                var kp1 = FindFeaturesDescriptors_ORB(file1, out descriptors1);
                var kp2 = FindFeaturesDescriptors_ORB(file2, out descriptors2);

                // find keypoint matches
                var bfMatcher = new BFMatcher(NormTypes.Hamming2, true);
                DMatch[] bfMatches = bfMatcher.Match(descriptors1, descriptors2);

                // draw things
                Cv2.DrawMatches(img1, kp1, img2, kp2, bfMatches, dst);
                using (new Window("ORB matching (by BFMatcher)", WindowMode.FreeRatio, dst))
                {
                    Cv2.WaitKey();
                }
            }
        }