Skip to content

The implementation about feature matching using various method !!

Notifications You must be signed in to change notification settings

SungJaeShin/Feature_matching

Repository files navigation

Feature Matching

Applied Feature Extraction and Descriptor Method to robust matching !!

[Goal] We can apply various extracton and descriptor method for matching in challenging environment

[Advanced] Algorithm extended by applying the corresponding github page → Parallax

[Advantage] We can easily apply various method only changing parameters!!

[Without GPU Version] You can apply only traditional method (w/o GPU) version in other branch (called only_trad_method)

  • Challenging Environment
    Query Image Candidate Image

1. Dependencies

2. Methodology to apply feature matching

  • Feature Extraction Method

    • [1] ORB
    • [2] goodFeaturesToTrack
    • [3] SIFT
    • [4] SuperPoint
  • Feature Descriptor Method

  • Macher Method

    • [1] Brute-Force Matcher (BF)
    • [2] Fast Library for Approximate Nearest Neighbors Matcher (FLANN)
  • Matching Method

    • [1] vanilla match (VANILLA)
    • [2] knn match (KNN)
    • [3] radius match (RADIUS)
  • Outlier Rejection Method

    • [1] findFundamentalMatrix (FM)
    • [2] vector field consensus (VFC)

3. Build and Run

Clone the repository and build and run simultaneously:

   $ cd ${workspace}
   $ git clone https://github.com/SungJaeShin/Feature_matching.git
   $ cd Feature_matching
   $ sh start.sh

4. Changing Parameters

  • IMAGE_NUM (include.h): Put value to test image pair

  • EXTRACT_MODE (include.h):

    • 1 → apply ORB
    • 2 → apply GFTT (GoodFeaturesToTrack)
    • 3 → apply SIFT
    • 4 → apply GFTT(Query) + ORB(Candidate)
    • 5 → apply GFTT(Query) + SIFT(Candidate)
    • 6 → apply SuperPoint
  • DESCRIPTOR_MODE (include.h):

    • 1 → apply AKAZE
    • 2 → apply SURF
    • 3 → apply DAISY
    • 4 → apply SuperPoint
  • MATCHER_MODE (include.h):

    • 1 → apply BF Matcher (Brute-Force)
    • 2 → apply FLANN Matcher (Fast Library for Approximate Nearest Neighbors)
  • MATCHING_MODE (include.h):

    • 1 → apply vanilla match
    • 2 → apply knn match
    • 3 → apply radius match
  • REJECTION_MODE (include.h):

    • 1 → apply fundamentalMatrix
    • 2 → apply VFC
  • MIN_DIS (include.h): Put value to change feature's Euclidean distance when using GoodFeaturesToTrack extractor

  • superpoint_model_weight_path (matching.cpp): Put absolute path for getting pre-trained SuperPoint model

  • query_path, cand_path (matching.cpp): Put absolute path for getting query image and candidate image

  • save_path (plot.h): Put absolute path for saving matching result

5. Advanced Changing Parameters (Option)

This variables are not requirement, but the following variables are also considered to obtain more robust results.

  • [CASE 1] When you use BFMatcher, please change in create arguments

    • SIFT, SURF → cv::NORM_L1 & cv::NORM_L2
    • ORB → cv::NORM_HAMMING
  • [CASE 2] When you use radiusMatch, please change maxDistance argument

    • In above case, there are some preference radius results !! (Default = 0.3)
      • [Preference radius] 0.4 => 405 matches / 0.3 => 183 matches / 0.2 => 117 matches
  • [CASE 3] When you use findFundamentalMat, please change ransacReprojThreshold argument (Default = 1)

    • If you want to get more robust result, then change '0.1' or etc.

6. Results

  • Results of Inlier Number and Time Consumption

    • ORB Result

    • GFTT Result

    • SIFT Result

  • Matching Results Set

    ORB + AKAZE + FM (inliers 22) ORB + SURF + FM (inliers 44) ORB + DAISY + FM (inliers 57)
    GFTT + AKAZE + FM (inliers 10) GFTT + SURF + FM (inliers 9) GFTT + DAISY + FM (inliers 10)
    SIFT + AKAZE + FM (inliers 11) SIFT + SURF + FM (inliers 17) SIFT + DAISY + FM (inliers 19)
    GFTT + ORB + AKAZE + FM (inliers 10) GFTT + ORB + SURF + FM (inliers 10) GFTT + ORB + DAISY + FM (inliers 8)
    GFTT + SIFT + AKAZE + FM (inliers 10) GFTT + SIFT + SURF + FM (inliers 9) GFTT + SIFT + DAISY + FM (inliers 9)
  • SuperPoint Result (C++ Version)

    • Time consumption getting Pre-trained SuperPoint model: 21.1761 ms
    • Result of features using SuperPoint Model
      Query Features Candidate Features
  • SuperPoint + SuperGlue Result (Python Version) (Follow this Page !!)

    • Red: more confident, Blue: less confident
    Threshold = 0.3 (inliers 64) Threshold = 0.4 (inliers 52)
    Threshold = 0.5 (inliers 47) Threshold = 0.6 (inliers 40)
    Threshold = 0.7 (inliers 30) Threshold = 0.8 (inliers 25)

7. Best Results

  • C++ Results

    • ORB + SURF + BF + KNN + FM (ransacReprojThreshold = 1)

    • ORB + DAISY + BF + KNN + FM (ransacReprojThreshold = 1)

    • ORB + SURF + BF + KNN + FM (ransacReprojThreshold = 0.1)

    • ORB + DAISY + BF + KNN + FM (ransacReprojThreshold = 0.1)

    • ORB + SURF + BF + KNN + VFC

    • ORB + DAISY + BF + KNN + VFC

  • Python Version (Follow this Page !!)

    • SuperPoint + SuperGlue (matching threshold = 0.8) (Red: more confident, Blue: less confident)

8. Support Docker

Test on Ubuntu 18.04 equipped with P2000 NoteBook

9. Other Error Related

  • [1] SuperGlue Error
    • (1) ImportError: /home/sj/anaconda3/envs/feature_matching/bin/../lib/libgio-2.0.so.0: undefined symbol: g_unix_get_passwd_entry

10. Reference

[1] Jianbo Shi and Carlo Tomasi. Good features to track. In Computer Vision and Pattern Recognition, 1994. Proceedings CVPR'94., 1994 IEEE Computer Society Conference on, pages 593–600. IEEE, 1994.
[2] David G. Lowe. Distinctive image features from scale-invariant keypoints. Int. J. Comput. Vision, 60(2):91–110, November 2004.
[3] Herbert Bay, Tinne Tuytelaars, and Luc Van Gool. Surf: Speeded up robust features. Computer Vision–ECCV 2006, pages 404–417, 2006.
[4] Ethan Rublee, Vincent Rabaud, Kurt Konolige, Gary R. Bradski: ORB: An efficient alternative to SIFT or SURF. ICCV 2011: 2564-2571.
[5] Pablo Fernández Alcantarilla, Jesús Nuevo, and Adrien Bartoli. Fast explicit diffusion for accelerated features in nonlinear scale spaces. BMVC, pages 13.1–13.11, 2013.
[6] E. Tola, V. Lepetit, and P. Fua. Daisy: An efficient dense descriptor applied to wide baseline stereo. IEEE Transactions on Pattern Analysis and Machine Intelligence, 32(5):815–830, May 2010.
[7] Jiayi Ma, Ji Zhao, Jinwen Tian, Alan Yuille, and Zhuowen Tu. Robust Point Matching via Vector Field Consensus, IEEE Transactions on Image Processing, 23(4), pp. 1706-1721, 2014
[8] Jiayi Ma, Ji Zhao, Jinwen Tian, Xiang Bai, and Zhuowen Tu. Regularized Vector Field Learning with Sparse Approximation for Mismatch Removal, Pattern Recognition, 46(12), pp. 3519-3532, 2013
[9] DeTone, Daniel & Malisiewicz, Tomasz & Rabinovich, Andrew. SuperPoint: Self-Supervised Interest Point Detection and Description. CVPR Deep Learning for Visual SLAM Workshop (CVPR), 2018
[10] https://bkshin.tistory.com/entry/OpenCV-28-%ED%8A%B9%EC%A7%95-%EB%A7%A4%EC%B9%ADFeature-Matching
[11] https://stackoverflow.com/questions/18744051/what-the-hessian-minimum-threshold-means-on-the-surffeaturedetector-function
[12] https://www.researchgate.net/figure/Relation-between-hessian-threshold-value-and-Accuracy-of-SURF-detector-As-shown-in_fig2_309363445
[13] https://docs.opencv.org/3.4/d9/d37/classcv_1_1xfeatures2d_1_1DAISY.html
[14] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pckbj123&logNo=100203116086
[15] https://076923.github.io/posts/Python-opencv-38/
[16] https://docs.opencv.org/3.4/db/d95/classcv_1_1ORB.html#adc371099dc902a9674bd98936e79739c
[17] https://bkshin.tistory.com/entry/OpenCV-27-%ED%8A%B9%EC%A7%95-%EB%94%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%84%B0-%EA%B2%80%EC%B6%9C%EA%B8%B0-SIFT-SURF-ORB
[18] https://docs.opencv.org/3.4/d7/d60/classcv_1_1SIFT.html
[19] https://leechamin.tistory.com/330
[20] https://github.com/mpkuse/robust_feature_matching
[21] https://github.com/ChanWoo25/SuperPoint2CPP
[22] https://github.com/magicleap/SuperPointPretrainedNetwork
[23] https://github.com/magicleap/SuperGluePretrainedNetwork

11. Acknowledgement

Thanks for Yeeun Kim help to get robust feature matching method !!

12. Future Works

  • Apply GCBB (Linear time vehicle relocation in SLAM paper)

About

The implementation about feature matching using various method !!

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published