Commit 017895dd authored by Maria Dimashova's avatar Maria Dimashova

filtered MSER keypoints that have centers out of image

parent 3df72fe6
...@@ -114,7 +114,7 @@ CV_EXPORTS void read(const FileNode& node, CV_OUT vector<KeyPoint>& keypoints); ...@@ -114,7 +114,7 @@ CV_EXPORTS void read(const FileNode& node, CV_OUT vector<KeyPoint>& keypoints);
/* /*
* A class filters a vector of 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, * 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 class CV_EXPORTS KeyPointsFilter
{ {
...@@ -142,7 +142,7 @@ public: ...@@ -142,7 +142,7 @@ public:
/* /*
* Retain the specified number of the best keypoints (according to the response) * Retain the specified number of the best keypoints (according to the response)
*/ */
static void retainBest(vector<KeyPoint>& keypoints, int npoints); static void retainBest( vector<KeyPoint>& keypoints, int npoints );
}; };
......
...@@ -1288,15 +1288,17 @@ void MserFeatureDetector::detectImpl( const Mat& image, vector<KeyPoint>& keypoi ...@@ -1288,15 +1288,17 @@ void MserFeatureDetector::detectImpl( const Mat& image, vector<KeyPoint>& keypoi
(*this)(image, msers, mask); (*this)(image, msers, mask);
vector<vector<Point> >::const_iterator contour_it = msers.begin(); vector<vector<Point> >::const_iterator contour_it = msers.begin();
Rect r(0, 0, image.cols, image.rows);
for( ; contour_it != msers.end(); ++contour_it ) for( ; contour_it != msers.end(); ++contour_it )
{ {
// TODO check transformation from MSER region to KeyPoint // TODO check transformation from MSER region to KeyPoint
RotatedRect rect = fitEllipse(Mat(*contour_it)); RotatedRect rect = fitEllipse(Mat(*contour_it));
float diam = sqrt(rect.size.height*rect.size.width); float diam = sqrt(rect.size.height*rect.size.width);
if( diam > std::numeric_limits<float>::epsilon() ) if( diam > std::numeric_limits<float>::epsilon() && r.contains(rect.center) )
keypoints.push_back( KeyPoint( rect.center, diam, rect.angle) ); keypoints.push_back( KeyPoint( rect.center, diam, rect.angle) );
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment