diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index 638336193..489bf8d1e 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -1550,7 +1550,7 @@ public: /**\param init_thresh the initial threshold to start with, default = 20 * \param nonmax whether to use non max or not for fast feature detection */ - FastAdjuster(int init_thresh = 20, bool nonmax = true); + FastAdjuster(int init_thresh=20, bool nonmax=true, int min_thresh=1, int max_thresh=200); virtual void tooFew(int min, int n_detected); virtual void tooMany(int max, int n_detected); @@ -1563,7 +1563,7 @@ protected: int thresh_; bool nonmax_; - int init_thresh_; + int init_thresh_, min_thresh_, max_thresh_; }; @@ -1573,7 +1573,7 @@ protected: class CV_EXPORTS StarAdjuster: public AdjusterAdapter { public: - StarAdjuster(double initial_thresh = 30.0); + StarAdjuster(double initial_thresh=30.0, double min_thresh=2., double max_thresh=200.); virtual void tooFew(int min, int n_detected); virtual void tooMany(int max, int n_detected); @@ -1584,14 +1584,14 @@ public: protected: virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - double thresh_, init_thresh_; + double thresh_, init_thresh_, min_thresh_, max_thresh_; CvStarDetectorParams params_; //todo use these instead of thresh_ }; class CV_EXPORTS SurfAdjuster: public AdjusterAdapter { public: - SurfAdjuster( double initial_thresh=400.f ); + SurfAdjuster( double initial_thresh=400.f, double min_thresh=2, double max_thresh=1000 ); virtual void tooFew(int min, int n_detected); virtual void tooMany(int max, int n_detected); @@ -1602,7 +1602,7 @@ public: protected: virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - double thresh_, init_thresh_; + double thresh_, init_thresh_, min_thresh_, max_thresh_; }; CV_EXPORTS Mat windowedMatchingMask( const vector& keypoints1, const vector& keypoints2, diff --git a/modules/features2d/src/dynamic.cpp b/modules/features2d/src/dynamic.cpp index 9495eb635..6b2511cd3 100644 --- a/modules/features2d/src/dynamic.cpp +++ b/modules/features2d/src/dynamic.cpp @@ -93,8 +93,9 @@ void DynamicAdaptedFeatureDetector::detectImpl(const Mat& image, vector& keypoints, const Mat& mask) const @@ -118,17 +119,18 @@ void FastAdjuster::tooMany(int, int) //a useful point bool FastAdjuster::good() const { - return (thresh_ > 1) && (thresh_ < 200); + return (thresh_ > min_thresh_) && (thresh_ < max_thresh_); } Ptr FastAdjuster::clone() const { - Ptr cloned_obj = new FastAdjuster( init_thresh_, nonmax_ ); + Ptr cloned_obj = new FastAdjuster( init_thresh_, nonmax_, min_thresh_, max_thresh_ ); return cloned_obj; } -StarAdjuster::StarAdjuster(double initial_thresh) : - thresh_(initial_thresh), init_thresh_(initial_thresh) +StarAdjuster::StarAdjuster(double initial_thresh, double min_thresh, double max_thresh) : + thresh_(initial_thresh), init_thresh_(initial_thresh), + min_thresh_(min_thresh), max_thresh_(max_thresh) {} void StarAdjuster::detectImpl(const Mat& image, vector& keypoints, const Mat& mask) const @@ -151,17 +153,18 @@ void StarAdjuster::tooMany(int, int) bool StarAdjuster::good() const { - return (thresh_ > 2) && (thresh_ < 200); + return (thresh_ > min_thresh_) && (thresh_ < max_thresh_); } Ptr StarAdjuster::clone() const { - Ptr cloned_obj = new StarAdjuster( init_thresh_ ); + Ptr cloned_obj = new StarAdjuster( init_thresh_, min_thresh_, max_thresh_ ); return cloned_obj; } -SurfAdjuster::SurfAdjuster( double initial_thresh ) : - thresh_(initial_thresh), init_thresh_(initial_thresh) +SurfAdjuster::SurfAdjuster( double initial_thresh, double min_thresh, double max_thresh ) : + thresh_(initial_thresh), init_thresh_(initial_thresh), + min_thresh_(min_thresh), max_thresh_(max_thresh) {} void SurfAdjuster::detectImpl(const Mat& image, vector& keypoints, const cv::Mat& mask) const @@ -186,12 +189,12 @@ void SurfAdjuster::tooMany(int, int) //a useful point bool SurfAdjuster::good() const { - return (thresh_ > 2) && (thresh_ < 1000); + return (thresh_ > min_thresh_) && (thresh_ < max_thresh_); } Ptr SurfAdjuster::clone() const { - Ptr cloned_obj = new SurfAdjuster( init_thresh_ ); + Ptr cloned_obj = new SurfAdjuster( init_thresh_, min_thresh_, max_thresh_ ); return cloned_obj; }