/GMS-Feature-Matcher

C++ code for "GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence"

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence

alt tag

Publication:

JiaWang Bian, Wen-Yan Lin, Yasuyuki Matsushita, Sai-Kit Yeung, Tan Dat Nguyen, Ming-Ming Cheng

GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence IEEE CVPR, 2017

[Project Page] [pdf] [Bib] [Code] [Youtube]

Other Resouces

The method has been integrated into OpenCV library (see xfeatures2d in opencv_contrib).

The paper was selected and reviewed by Computer Vision News.

More experiments are shown in MatchBench.

Usage

Requirement:

1.OpenCV 3.0 or later (for IO and ORB features, necessary)

2.cudafeatures2d module(for gpu nearest neighbor, optional)

C++ Example:

Image pair demo in demo.cpp.

Matlab Example

You should compile the code with opencv library firstly(see the 'Compile.m').

Python Example:

Use Python3 to run gms_matcher script.

Tune Parameters:

In demo.cpp
	1.	#define USE_GPU" (need cudafeatures2d module) 
			using cpu mode by commenting it.
			
	2.	For high-resolution images, we suggest using 100K features with setFastThreshod(5);
	
	3.	For low-resolution (like VGA) images, we suggest using 10K features with setFastThreshod(0);

In gms_matcher.h
			
	2.	#define THRESH_FACTOR 6			
			The higher, the less matches。
			
	3. 	int GetInlierMask(vector<bool> &vbInliers, bool WithScale = false, bool WithRotation = false)
			Set WithScale to be true for unordered image matching and false for video matching.

If you like this work, please cite our paper

@inproceedings{bian2017gms,
  title={GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence},
  author={JiaWang Bian and Wen-Yan Lin and Yasuyuki Matsushita and Sai-Kit Yeung and Tan Dat Nguyen and Ming-Ming Cheng},
  booktitle={IEEE Conference on Computer Vision and Pattern Recognition},
  year={2017}
}