From: okriof Date: Wed, 5 Dec 2018 15:44:23 +0000 (+0100) Subject: Merge pull request #13361 from okriof:brisk_getset X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~1^2~386 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ef42baf9f07251ee4325d3eec94147a94d722935;p=platform%2Fupstream%2Fopencv.git Merge pull request #13361 from okriof:brisk_getset * Get/Set functions for BRISK parameters, issue #11527. Allows setting threshold and octaves parameters after creating a brisk object. These parameters do not affect the initial pattern initialization and can be changed later without re-initialization. * Fix doc parameter name. * Brisk get/set functions tests. Check for correct value and make tests independent of default parameter values. * Add dummy implementations for BRISK get/set functions not to break API in case someone has overloaded the Feature2d::BRISK interface. This makes BRISK different from the other detectors/descriptors on the other hand, where get/set functions are pure virtual in the interface. --- diff --git a/modules/features2d/include/opencv2/features2d.hpp b/modules/features2d/include/opencv2/features2d.hpp index 450ba77..75eb028 100644 --- a/modules/features2d/include/opencv2/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d.hpp @@ -285,6 +285,18 @@ public: const std::vector &numberList, float dMax=5.85f, float dMin=8.2f, const std::vector& indexChange=std::vector()); CV_WRAP virtual String getDefaultName() const CV_OVERRIDE; + + /** @brief Set detection threshold. + @param threshold AGAST detection threshold score. + */ + CV_WRAP virtual void setThreshold(int threshold) { CV_UNUSED(threshold); return; }; + CV_WRAP virtual int getThreshold() const { return -1; }; + + /** @brief Set detection octaves. + @param octaves detection octaves. Use 0 to do single scale. + */ + CV_WRAP virtual void setOctaves(int octaves) { CV_UNUSED(octaves); return; }; + CV_WRAP virtual int getOctaves() const { return -1; }; }; /** @brief Class implementing the ORB (*oriented BRIEF*) keypoint detector and descriptor extractor diff --git a/modules/features2d/src/brisk.cpp b/modules/features2d/src/brisk.cpp index 4038279..67c4123 100644 --- a/modules/features2d/src/brisk.cpp +++ b/modules/features2d/src/brisk.cpp @@ -80,6 +80,26 @@ public: return NORM_HAMMING; } + virtual void setThreshold(int threshold_in) CV_OVERRIDE + { + threshold = threshold_in; + } + + virtual int getThreshold() const CV_OVERRIDE + { + return threshold; + } + + virtual void setOctaves(int octaves_in) CV_OVERRIDE + { + octaves = octaves_in; + } + + virtual int getOctaves() const CV_OVERRIDE + { + return octaves; + } + // call this to generate the kernel: // circle of radius r (pixels), with n points; // short pairings with dMax, long pairings with dMin diff --git a/modules/features2d/test/test_brisk.cpp b/modules/features2d/test/test_brisk.cpp index 22f08e5..783b694 100644 --- a/modules/features2d/test/test_brisk.cpp +++ b/modules/features2d/test/test_brisk.cpp @@ -73,6 +73,18 @@ void CV_BRISKTest::run( int ) Ptr detector = BRISK::create(); + // Check parameter get/set functions. + BRISK* detectorTyped = dynamic_cast(detector.get()); + ASSERT_NE(nullptr, detectorTyped); + detectorTyped->setOctaves(3); + detectorTyped->setThreshold(30); + ASSERT_EQ(detectorTyped->getOctaves(), 3); + ASSERT_EQ(detectorTyped->getThreshold(), 30); + detectorTyped->setOctaves(4); + detectorTyped->setThreshold(29); + ASSERT_EQ(detectorTyped->getOctaves(), 4); + ASSERT_EQ(detectorTyped->getThreshold(), 29); + vector keypoints1; vector keypoints2; detector->detect(image1, keypoints1);