*/
struct RoiPredicate
{
- RoiPredicate( float _minX, float _minY, float _maxX, float _maxY )
- : minX(_minX), minY(_minY), maxX(_maxX), maxY(_maxY)
+ RoiPredicate( const Rect& _r ) : r(_r)
{}
bool operator()( const KeyPoint& keyPt ) const
{
- Point2f pt = keyPt.pt;
- float eps = std::numeric_limits<float>::epsilon();
- return (pt.x < minX + eps) || (pt.x >= maxX - eps) ||
- (pt.y < minY + eps) || (pt.y >= maxY - eps);
+ return !r.contains( keyPt.pt );
}
- float minX, minY, maxX, maxY;
+ Rect r;
};
DescriptorExtractor::~DescriptorExtractor()
void DescriptorExtractor::compute( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const
{
- if( image.empty() || keypoints.empty() )
- return;
+ if( image.empty() || keypoints.empty() )
+ return;
- // Check keypoints are in image. Do filter bad points here?
+ // Check keypoints are in image. Do filter bad points here?
//for( size_t i = 0; i < keypoints.size(); i++ )
// CV_Assert( Rect(0,0, image.cols, image.rows).contains(keypoints[i].pt) );
- computeImpl( image, keypoints, descriptors );
+ computeImpl( image, keypoints, descriptors );
}
void DescriptorExtractor::compute( const vector<Mat>& imageCollection, vector<vector<KeyPoint> >& pointCollection, vector<Mat>& descCollection ) const
}
void DescriptorExtractor::removeBorderKeypoints( vector<KeyPoint>& keypoints,
- Size imageSize, float borderSize )
+ Size imageSize, int borderSize )
{
if( borderSize > 0)
{
keypoints.erase( remove_if(keypoints.begin(), keypoints.end(),
- RoiPredicate(borderSize, borderSize,
- (float)imageSize.width - borderSize,
- (float)imageSize.height - borderSize)),
+ RoiPredicate(Rect(Point(borderSize, borderSize),
+ Point(imageSize.width - borderSize, imageSize.height - borderSize)))),
keypoints.end() );
}
}