changed border type to float
authorMaria Dimashova <no@email>
Mon, 31 Jan 2011 16:45:12 +0000 (16:45 +0000)
committerMaria Dimashova <no@email>
Mon, 31 Jan 2011 16:45:12 +0000 (16:45 +0000)
modules/features2d/src/descriptors.cpp

index 12d485b..3ea1c9e 100644 (file)
@@ -54,14 +54,16 @@ namespace cv
  */
 struct RoiPredicate
 {
-    RoiPredicate(float _minX, float _minY, float _maxX, float _maxY)
+    RoiPredicate( float _minX, float _minY, float _maxX, float _maxY )
         : minX(_minX), minY(_minY), maxX(_maxX), maxY(_maxY)
     {}
 
-    bool operator()( const KeyPoint& keyPt) const
+    bool operator()( const KeyPoint& keyPt ) const
     {
         Point2f pt = keyPt.pt;
-        return (pt.x < minX) || (pt.x >= maxX) || (pt.y < minY) || (pt.y >= maxY);
+        float eps = std::numeric_limits<float>::epsilon();
+        return (pt.x < minX + eps) || (pt.x >= maxX - eps) ||
+               (pt.y < minY + eps) || (pt.y >= maxY - eps);
     }
 
     float minX, minY, maxX, maxY;
@@ -102,14 +104,14 @@ bool DescriptorExtractor::empty() const
 }
 
 void DescriptorExtractor::removeBorderKeypoints( vector<KeyPoint>& keypoints,
-                                                 Size imageSize, int borderSize )
+                                                 Size imageSize, float borderSize )
 {
     if( borderSize > 0)
     {
         keypoints.erase( remove_if(keypoints.begin(), keypoints.end(),
-                                   RoiPredicate((float)borderSize, (float)borderSize,
-                                                (float)(imageSize.width - borderSize),
-                                                (float)(imageSize.height - borderSize))),
+                                   RoiPredicate(borderSize, borderSize,
+                                                (float)imageSize.width - borderSize,
+                                                (float)imageSize.height - borderSize)),
                          keypoints.end() );
     }
 }