From 017895dd93fbf1afa4adaa9672f56cd8b46f041a Mon Sep 17 00:00:00 2001 From: Maria Dimashova Date: Thu, 12 Jul 2012 17:51:12 +0000 Subject: [PATCH] filtered MSER keypoints that have centers out of image --- modules/features2d/include/opencv2/features2d/features2d.hpp | 4 ++-- modules/features2d/src/mser.cpp | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index 4e46b27ae5..b64d71ae24 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -114,7 +114,7 @@ CV_EXPORTS void read(const FileNode& node, CV_OUT vector& keypoints); /* * A class filters a vector of keypoints. * Because now it is difficult to provide a convenient interface for all usage scenarios of the keypoints filter class, - * it has only 4 needed by now static methods. + * it has only several needed by now static methods. */ class CV_EXPORTS KeyPointsFilter { @@ -142,7 +142,7 @@ public: /* * Retain the specified number of the best keypoints (according to the response) */ - static void retainBest(vector& keypoints, int npoints); + static void retainBest( vector& keypoints, int npoints ); }; diff --git a/modules/features2d/src/mser.cpp b/modules/features2d/src/mser.cpp index c2a2749981..acbfdcc5e3 100644 --- a/modules/features2d/src/mser.cpp +++ b/modules/features2d/src/mser.cpp @@ -1288,15 +1288,17 @@ void MserFeatureDetector::detectImpl( const Mat& image, vector& keypoi (*this)(image, msers, mask); vector >::const_iterator contour_it = msers.begin(); + Rect r(0, 0, image.cols, image.rows); for( ; contour_it != msers.end(); ++contour_it ) { // TODO check transformation from MSER region to KeyPoint RotatedRect rect = fitEllipse(Mat(*contour_it)); float diam = sqrt(rect.size.height*rect.size.width); - if( diam > std::numeric_limits::epsilon() ) + if( diam > std::numeric_limits::epsilon() && r.contains(rect.center) ) keypoints.push_back( KeyPoint( rect.center, diam, rect.angle) ); } + } }