}
}
-namespace
-{
-struct RoiPredicate
-{
- RoiPredicate(const cv::Rect& r) :
- r(r)
- {
- }
-
- bool operator()(const cv::KeyPoint& keyPt) const
- {
- return !r.contains(keyPt.pt);
- }
-
- cv::Rect r;
-};
-
-void runByImageBorder(std::vector<cv::KeyPoint>& keypoints, cv::Size imageSize, int borderSize)
-{
- if (borderSize > 0)
- {
- keypoints.erase(
- std::remove_if(
- keypoints.begin(),
- keypoints.end(),
- RoiPredicate(
- cv::Rect(
- cv::Point(borderSize, borderSize),
- cv::Point(imageSize.width - borderSize,
- imageSize.height - borderSize)))), keypoints.end());
- }
-}
-}
-
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
inline bool keypointResponseGreater(const cv::KeyPoint& lhs, const cv::KeyPoint& rhs)
// Remove keypoints very close to the border
// half_patch_size_ for orientation, 4 for Harris
unsigned int border_safety = std::max(half_patch_size_, 4);
-#if ((CV_MAJOR_VERSION >= 2) && ((CV_MINOR_VERSION >2) || ((CV_MINOR_VERSION == 2) && (CV_SUBMINOR_VERSION>=9))))
cv::KeyPointsFilter::runByImageBorder(keypoints, image_pyramid[level].size(), border_safety);
-#else
- ::runByImageBorder(keypoints, image_pyramid[level].size(), border_safety);
-#endif
// Keep more points than necessary as FAST does not give amazing corners
if (keypoints.size() > 2 * n_features_per_level_[level])
cv::KeyPointsFilter::runByImageBorder(keypoints, image.size(), border_safety);
// Get the patterns to apply
- cv::Ptr<OrbPatterns> patterns = patterns_[level];
+ OrbPatterns* patterns = patterns_[level];
//create the descriptor mat, keypoints.size() rows, BYTES cols
descriptors = cv::Mat::zeros(keypoints.size(), kBytes, CV_8UC1);
double t = (double)getTickCount();
dextractor->compute( img, keypoints, calcDescriptors );
t = getTickCount() - t;
- ts->printf(cvtest::TS::LOG, "\nAverage time of computiting one descriptor = %g ms (previous time = %g ms).\n", t/((double)cvGetTickFrequency()*1000.)/calcDescriptors.rows, prevTime );
+ ts->printf(cvtest::TS::LOG, "\nAverage time of computing one descriptor = %g ms (previous time = %g ms).\n", t/((double)cvGetTickFrequency()*1000.)/calcDescriptors.rows, prevTime );
if( calcDescriptors.rows != (int)keypoints.size() )
{
test.safe_run();
}
+TEST( Features2d_Detector_ORB, regression )
+{
+ CV_FeatureDetectorTest test( "detector-orb", FeatureDetector::create("ORB") );
+ test.safe_run();
+}
+
TEST( Features2d_Detector_GridFAST, regression )
{
CV_FeatureDetectorTest test( "detector-grid-fast", FeatureDetector::create("GridFAST") );
test.safe_run();
}
+TEST( Features2d_DescriptorExtractor_ORB, regression )
+{
+ // TODO adjust the parameters below
+ CV_DescriptorExtractorTest<L2<float> > test( "descriptor-orb", 0.035f,
+ DescriptorExtractor::create("ORB"), 0.147372f );
+ test.safe_run();
+}
+
TEST( Features2d_DescriptorExtractor_BRIEF, regression )
{
CV_DescriptorExtractorTest<Hamming> test( "descriptor-brief", 1,