From c6d22f7dfe5669959b462e8b40f3d2e5d8e6eb19 Mon Sep 17 00:00:00 2001
From: asantamaria <asantamaria@iri.upc.edu>
Date: Fri, 28 Jul 2017 13:03:15 +0200
Subject: [PATCH] new constructor to enter mask for the detector

---
 src/feature_detector/feature_detector.cpp | 26 +++++++++++++----------
 src/feature_detector/feature_detector.h   |  8 +++----
 src/vision_utils.cpp                      |  8 +++----
 src/vision_utils.h                        | 12 ++++++-----
 4 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/src/feature_detector/feature_detector.cpp b/src/feature_detector/feature_detector.cpp
index e20a67e..7535472 100644
--- a/src/feature_detector/feature_detector.cpp
+++ b/src/feature_detector/feature_detector.cpp
@@ -81,18 +81,20 @@ int CFeature_Detector::getKeyPointsLimit(void)
 }
 
 CFeature_Detector::KeyPointVector CFeature_Detector::detectKeyPoints(const cv::Mat& _image)
+{
+	cv::Mat mask = cv::Mat::ones(_image.size(), CV_8U);
+	return detectKeyPoints(_image, mask);
+}
+
+CFeature_Detector::KeyPointVector CFeature_Detector::detectKeyPoints(const cv::Mat& _image, const cv::Mat& _mask)
 {
     if (!is_init_)
         std::cerr << "[CFeature_Detector::detectKeyPoints]: Detector non initialized." << std::endl;
 
-    // TODO: Set a clever mask to reduce image search
-    if (mask_.empty())
-        mask_ = cv::Mat::ones(_image.size(), CV_8U);
-
     KeyPointVector kpts;
 
     clock_t tStart = clock();
-    feature_detector_->detect(_image, kpts, mask_);
+    feature_detector_->detect(_image, kpts, _mask);
     detect_time_ = (double)(clock() - tStart) / CLOCKS_PER_SEC;
 
     if (isLimited())
@@ -105,6 +107,12 @@ CFeature_Detector::KeyPointVector CFeature_Detector::detectKeyPoints(const cv::M
 }
 
 CFeature_Detector::KeyLineVector CFeature_Detector::detectKeyLines(const cv::Mat& _image)
+{
+	cv::Mat mask = cv::Mat::ones(_image.size(), CV_8U);
+	return detectKeyLines(_image, mask);
+}
+
+CFeature_Detector::KeyLineVector CFeature_Detector::detectKeyLines(const cv::Mat& _image, const cv::Mat& _mask)
 {
     if (!is_init_)
         std::cerr << "[CFeature_Detector::detectKeyLines]: Detector non initialized." << std::endl;
@@ -112,15 +120,11 @@ CFeature_Detector::KeyLineVector CFeature_Detector::detectKeyLines(const cv::Mat
     KeyLineVector kls;
     KeyLineVector kls2;
 
-    // TODO: Set a clever mask to reduce image search
-    if (mask_.empty())
-        mask_ = cv::Mat::ones(_image.size(), CV_8U);
-
     clock_t tStart = clock();
     if (type_ == detector::LSD)
-        lsd_detector_->detect(_image, kls, SCALE_FACTOR_LINE_DETECTOR, NUM_OCTAVE_LINE_DETECTOR, mask_);
+        lsd_detector_->detect(_image, kls, SCALE_FACTOR_LINE_DETECTOR, NUM_OCTAVE_LINE_DETECTOR, _mask);
     else
-        ed_detector_->detect(_image, kls2, mask_);
+        ed_detector_->detect(_image, kls2, _mask);
     detect_time_ = (double)(clock() - tStart) / CLOCKS_PER_SEC;
     kls.insert(kls.end(), kls2.begin(), kls2.end());
 
diff --git a/src/feature_detector/feature_detector.h b/src/feature_detector/feature_detector.h
index 7c07945..fb283a1 100644
--- a/src/feature_detector/feature_detector.h
+++ b/src/feature_detector/feature_detector.h
@@ -125,8 +125,10 @@ class CFeature_Detector
         /**
          * \brief Detect features (points or lines)
          */
-        KeyPointVector detectKeyPoints(const cv::Mat&);
-        KeyLineVector detectKeyLines(const cv::Mat&);
+        KeyPointVector detectKeyPoints(const cv::Mat& _image);
+        KeyPointVector detectKeyPoints(const cv::Mat& _image, const cv::Mat& _mask);
+        KeyLineVector detectKeyLines(const cv::Mat& _image);
+        KeyLineVector detectKeyLines(const cv::Mat& _image, const cv::Mat& _mask);
 
         /**
          * \brief Draw detected features
@@ -147,8 +149,6 @@ class CFeature_Detector
 
         double detect_time_; // Detection time
 
-        cv::Mat mask_; // Mask to reduce image search
-
         FeatureDetectorPtr feature_detector_; // Feature point detectors
         LSDDetector lsd_detector_; // Feature line detector
         EDDetector ed_detector_; // Feature line detector
diff --git a/src/vision_utils.cpp b/src/vision_utils.cpp
index 228863a..26e6254 100644
--- a/src/vision_utils.cpp
+++ b/src/vision_utils.cpp
@@ -1,10 +1,8 @@
 #include "vision_utils.h"
 
-CVision_Utils::CVision_Utils()
-{
+CVision_Utils::CVision_Utils() {
 }
- 
-CVision_Utils::~CVision_Utils()
-{
+
+CVision_Utils::~CVision_Utils() {
 }
 
diff --git a/src/vision_utils.h b/src/vision_utils.h
index ec7555f..ec36cf1 100644
--- a/src/vision_utils.h
+++ b/src/vision_utils.h
@@ -5,11 +5,13 @@
 #include "feature_detector/feature_detector.h"
 #include "feature_descriptor/feature_descriptor.h"
 
-class CVision_Utils
-{
-  public:
-    CVision_Utils();
-    ~CVision_Utils();
+#include <functional>
+#include <set>
+
+class CVision_Utils {
+public:
+	CVision_Utils();
+	~CVision_Utils();
 };
 
 #endif
-- 
GitLab