Merge pull request #13361 from okriof:brisk_getset
authorokriof <okriof@users.noreply.github.com>
Wed, 5 Dec 2018 15:44:23 +0000 (16:44 +0100)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Wed, 5 Dec 2018 15:44:23 +0000 (18:44 +0300)
* 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.

modules/features2d/include/opencv2/features2d.hpp
modules/features2d/src/brisk.cpp
modules/features2d/test/test_brisk.cpp

index 450ba77..75eb028 100644 (file)
@@ -285,6 +285,18 @@ public:
         const std::vector<int> &numberList, float dMax=5.85f, float dMin=8.2f,
         const std::vector<int>& indexChange=std::vector<int>());
     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
index 4038279..67c4123 100644 (file)
@@ -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
index 22f08e5..783b694 100644 (file)
@@ -73,6 +73,18 @@ void CV_BRISKTest::run( int )
 
   Ptr<FeatureDetector> detector = BRISK::create();
 
+  // Check parameter get/set functions.
+  BRISK* detectorTyped = dynamic_cast<BRISK*>(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<KeyPoint> keypoints1;
   vector<KeyPoint> keypoints2;
   detector->detect(image1, keypoints1);