diff --git a/src/feature_detector/feature_detector.cpp b/src/feature_detector/feature_detector.cpp
index e20a67ed1c58c8af4a799afb3e6f3376d52800fd..7535472f9fcd27c552f8035fffa0716019d4f6ff 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 7c07945f18a831f7c039c4b9d9469b57b419b3f6..fb283a10ec27d070a6f9acb6562d76ab879d6394 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 228863a0124b60bfbd2e0a31a67f136bccb2cf47..26e6254853aa5de9f4bc6d2a3cd695c5ad49f4c3 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 ec7555fcb2497c3d1a85d0748efd2d9b3a50edba..ec36cf19ba3564d8a3822bcd504fbe9f3b178a4f 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