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