Giter Club home page Giter Club logo

feature_matching's Introduction

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!!

  • 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)

feature_matching's People

Contributors

sungjaeshin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

feature_matching's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.