--- /dev/null
+/*
+ * RobustMatcher.h
+ *
+ * Created on: Jun 4, 2014
+ * Author: eriba
+ */
+
+#ifndef ROBUSTMATCHER_H_
+#define ROBUSTMATCHER_H_
+
+#include <iostream>
+#include <boost/shared_ptr.hpp>
+
+#include <opencv2/core/core.hpp>
+#include <opencv2/highgui/highgui.hpp>
+#include <opencv2/features2d/features2d.hpp>
+#include <opencv2/nonfree/nonfree.hpp>
+
+class RobustMatcher {
+public:
+ RobustMatcher() : ratio_(0.8f)
+ {
+ // ORB is the default feature
+ detector_ = new cv::OrbFeatureDetector();
+ extractor_ = new cv::OrbDescriptorExtractor();
+
+ // BruteFroce matcher with Norm Hamming is the default matcher
+ matcher_ = new cv::BFMatcher(cv::NORM_HAMMING, false);
+
+ }
+ virtual ~RobustMatcher();
+
+ // Set the feature detector
+ void setFeatureDetector(cv::FeatureDetector * detect) { detector_ = detect; }
+
+ // Set the descriptor extractor
+ void setDescriptorExtractor(cv::DescriptorExtractor * desc) { extractor_ = desc; }
+
+ // Set the matcher
+ void setDescriptorMatcher(cv::DescriptorMatcher * match) { matcher_ = match; }
+
+ // Compute the keypoints of an image
+ void computeKeyPoints( const cv::Mat& image, std::vector<cv::KeyPoint>& keypoints);
+
+ // Compute the descriptors of an image given its keypoints
+ void computeDescriptors( const cv::Mat& image, std::vector<cv::KeyPoint>& keypoints, cv::Mat& descriptors);
+
+ // Set ratio parameter for the ratio test
+ void setRatio( float rat) { ratio_ = rat; }
+
+ // Clear matches for which NN ratio is > than threshold
+ // return the number of removed points
+ // (corresponding entries being cleared,
+ // i.e. size will be 0)
+ int ratioTest(std::vector<std::vector<cv::DMatch> > &matches);
+
+ // Insert symmetrical matches in symMatches vector
+ void symmetryTest( const std::vector<std::vector<cv::DMatch> >& matches1,
+ const std::vector<std::vector<cv::DMatch> >& matches2,
+ std::vector<cv::DMatch>& symMatches );
+
+ // Match feature points using ratio and symmetry test
+ void robustMatch( const cv::Mat& frame, std::vector<cv::DMatch>& good_matches,
+ std::vector<cv::KeyPoint>& keypoints_frame,
+ const cv::Mat& descriptors_model );
+
+ // Match feature points using ratio test
+ void fastRobustMatch( const cv::Mat& frame, std::vector<cv::DMatch>& good_matches,
+ std::vector<cv::KeyPoint>& keypoints_frame,
+ const cv::Mat& descriptors_model );
+
+private:
+ // pointer to the feature point detector object
+ cv::FeatureDetector * detector_;
+ // pointer to the feature descriptor extractor object
+ cv::DescriptorExtractor * extractor_;
+ // pointer to the matcher object
+ cv::DescriptorMatcher * matcher_;
+ // max ratio between 1st and 2nd NN
+ float ratio_;
+};
+
+#endif /* ROBUSTMATCHER_H_ */