diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a03903d27797e81ce4c2fb1d202b11937e46b9c6..a4a52dc875b48e6905515f0635c58858ff4fe791 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -50,6 +50,8 @@ SET(sources
 	descriptors/brief/descriptor_brief_load_yaml.cpp
 	descriptors/daisy/descriptor_daisy.cpp
 	descriptors/daisy/descriptor_daisy_load_yaml.cpp
+	descriptors/lucid/descriptor_lucid.cpp
+	descriptors/lucid/descriptor_lucid_load_yaml.cpp	
 	matchers/matcher_base.cpp )
 
 # application header files
@@ -85,6 +87,7 @@ SET(headers
 	descriptors/freak/descriptor_freak.h
 	descriptors/brief/descriptor_brief.h
 	descriptors/daisy/descriptor_daisy.h
+	descriptors/lucid/descriptor_lucid.h
 	matchers/matcher_factory.h
 	matchers/matcher_base.h)
 
diff --git a/src/descriptors/lucid/descriptor_lucid.cpp b/src/descriptors/lucid/descriptor_lucid.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..42bbd7a1dc453adaf19b1b9712477ef6c062f7d6
--- /dev/null
+++ b/src/descriptors/lucid/descriptor_lucid.cpp
@@ -0,0 +1,17 @@
+#include "descriptor_lucid.h"
+
+namespace vision_utils {
+
+DescriptorLUCID::DescriptorLUCID(void)
+{}
+
+DescriptorLUCID::~DescriptorLUCID(void)
+{}
+
+} /* namespace vision_utils */
+
+// Register in the DescriptorsFactory
+namespace vision_utils
+{
+VU_REGISTER_DESCRIPTOR("LUCID", DescriptorLUCID);
+} /* namespace vision_utils */
diff --git a/src/descriptors/lucid/descriptor_lucid.h b/src/descriptors/lucid/descriptor_lucid.h
new file mode 100644
index 0000000000000000000000000000000000000000..148021ac4a493bb3ea2d8cb28230dea898ec1fc6
--- /dev/null
+++ b/src/descriptors/lucid/descriptor_lucid.h
@@ -0,0 +1,69 @@
+#ifndef _DESCRIPTOR_LUCID_H_
+#define _DESCRIPTOR_LUCID_H_
+
+#include "../descriptor_base.h"
+#include "../descriptor_factory.h"
+
+// yaml-cpp library
+#ifdef USING_YAML
+	#include <yaml-cpp/yaml.h>
+#endif
+
+namespace vision_utils {
+
+// Create all pointers
+VU_PTR_TYPEDEFS(DescriptorLUCID);
+VU_PTR_TYPEDEFS(DescriptorParamsLUCID);
+
+/** \brief Class parameters
+ *
+ */
+struct DescriptorParamsLUCID: public ParamsBase
+{
+ 	int lucid_kernel = 1;	// Kernel for descriptor construction, where 1=3x3, 2=5x5, 3=7x7 and so forth
+	int blur_kernel = 2;	// Kernel for blurring image prior to descriptor construction, where 1=3x3, 2=5x5, 3=7x7 and so forth
+};
+
+/** \brief DETECTOR class
+ *
+ */
+class DescriptorLUCID : public DescriptorBase {
+
+    public:
+		DescriptorLUCID();
+        virtual ~DescriptorLUCID(void);
+
+        // Factory method
+        static DescriptorBasePtr create(const std::string& _unique_name, const ParamsBasePtr _params);
+
+    private:
+
+        void defineDescriptor(const ParamsBasePtr _params);
+};
+
+/*
+ * brief Define detector
+ */
+inline void DescriptorLUCID::defineDescriptor(const ParamsBasePtr _params)
+{
+    DescriptorParamsLUCIDPtr params_ptr = std::static_pointer_cast<DescriptorParamsLUCID>(_params);
+
+    descriptor_ = cv::xfeatures2d::LUCID::create(params_ptr->lucid_kernel,
+    		params_ptr->blur_kernel);
+}
+
+
+/*
+ * brief Create object in factory
+ */
+inline DescriptorBasePtr DescriptorLUCID::create(const std::string& _unique_name, const ParamsBasePtr _params)
+{
+    DescriptorLUCIDPtr det_ptr = std::make_shared<DescriptorLUCID>();
+    det_ptr->setName(_unique_name);
+    det_ptr->defineDescriptor(_params);
+    return det_ptr;
+}
+
+} /* namespace vision_utils */
+
+#endif /* _DESCRIPTOR_LUCID_H_ */
diff --git a/src/descriptors/lucid/descriptor_lucid_load_yaml.cpp b/src/descriptors/lucid/descriptor_lucid_load_yaml.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..50de9f18392eef12c4def9934cdf86fa170d8431
--- /dev/null
+++ b/src/descriptors/lucid/descriptor_lucid_load_yaml.cpp
@@ -0,0 +1,46 @@
+#include "descriptor_lucid.h"
+
+#ifdef USING_YAML
+
+// yaml-cpp library
+#include <yaml-cpp/yaml.h>
+
+namespace vision_utils
+{
+
+namespace
+{
+
+static ParamsBasePtr createParamsLUCIDDescriptor(const std::string & _filename_dot_yaml)
+{
+	DescriptorParamsLUCIDPtr params_ptr = std::make_shared<DescriptorParamsLUCID>();
+
+    using std::string;
+    using YAML::Node;
+    Node yaml_params = YAML::LoadFile(_filename_dot_yaml);
+    if (!yaml_params.IsNull())
+    {
+        Node d_yaml = yaml_params["descriptor"];
+        if(d_yaml["type"].as<string>() == "LUCID")
+        {
+        	params_ptr->lucid_kernel	= d_yaml["lucid_kernel"].as<int>();
+        	params_ptr->blur_kernel		= d_yaml["blur_kernel"].as<int>();
+        }else
+        {
+            std::cerr << "Bad configuration file. Wrong type " << d_yaml["type"].as<string>() << std::endl;
+            return nullptr;
+        }
+    }
+
+	return params_ptr;
+}
+
+// Register in the SensorFactory
+const bool registered_desLUCID_params = ParamsFactory::get().registerCreator("LUCID DES", createParamsLUCIDDescriptor);
+
+} /* namespace [unnamed] */
+
+} /* namespace vision_utils */
+
+#endif /* IF USING_YAML */
+
diff --git a/src/examples/test_descriptor.cpp b/src/examples/test_descriptor.cpp
index e408c7a14373c301402b69c3113e9698ee29a2e9..0d451a858f44dc3448618c8bcf3a9942f53a3ac4 100644
--- a/src/examples/test_descriptor.cpp
+++ b/src/examples/test_descriptor.cpp
@@ -32,7 +32,8 @@
 #include "../descriptors/freak/descriptor_freak.h"
 #include "../descriptors/brief/descriptor_brief.h"
 #include "../descriptors/daisy/descriptor_daisy.h"
-//#include "../descriptors/lucid/descriptor_lucid.h"
+#include "../descriptors/lucid/descriptor_lucid.h"
+//#include "../descriptors/dense/descriptor_dense.h"
 
 int main(void)
 {
@@ -110,8 +111,10 @@ int main(void)
     	des_ptr = std::static_pointer_cast<DescriptorBRIEF>(des_ptr);
     else if (des_name.compare("DAISY") == 0)
     	des_ptr = std::static_pointer_cast<DescriptorDAISY>(des_ptr);
-//    else if (des_name.compare("LUCID") == 0)
-//    	des_ptr = std::static_pointer_cast<DescriptorLUCID>(des_ptr);
+    else if (des_name.compare("LUCID") == 0)
+    	des_ptr = std::static_pointer_cast<DescriptorLUCID>(des_ptr);
+    //    else if (des_name.compare("DENSE") == 0)
+    //    	des_ptr = std::static_pointer_cast<DescriptorDENSE>(des_ptr);
 
     std::cout << std::endl << "... Testing " << det_ptr->getName() << " with " <<  des_ptr->getName() << " ..." << std::endl;
 
diff --git a/src/examples/yaml/LUCID.yaml b/src/examples/yaml/LUCID.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6889d085676c6cca2c631c54661f3f67ffe7ced5
--- /dev/null
+++ b/src/examples/yaml/LUCID.yaml
@@ -0,0 +1,6 @@
+sensor:
+  type: "USB_CAM"
+descriptor:
+  type: "LUCID"
+  lucid_kernel: 1
+  blur_kernel: 2
\ No newline at end of file