parent
3b24aa2441
commit
924e062426
1 changed files with 83 additions and 0 deletions
@ -0,0 +1,83 @@ |
|||||||
|
/*
|
||||||
|
* 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_ */ |
Loading…
Reference in new issue