From ac79257cfbaf35d954a9ba6a96cdc912d7c5b227 Mon Sep 17 00:00:00 2001
From: asantamaria <asantamaria@iri.upc.edu>
Date: Thu, 10 Aug 2017 10:41:22 +0200
Subject: [PATCH] added bruteforce matcher

---
 src/CMakeLists.txt                            |  7 +-
 src/examples/test_matcher.cpp                 |  5 +-
 src/examples/yaml/BRUTEFORCE.yaml             |  5 ++
 .../bruteforce/matcher_bruteforce.cpp         | 17 +++++
 src/matchers/bruteforce/matcher_bruteforce.h  | 66 +++++++++++++++++++
 .../matcher_bruteforce_load_yaml.cpp          | 46 +++++++++++++
 6 files changed, 143 insertions(+), 3 deletions(-)
 create mode 100644 src/examples/yaml/BRUTEFORCE.yaml
 create mode 100644 src/matchers/bruteforce/matcher_bruteforce.cpp
 create mode 100644 src/matchers/bruteforce/matcher_bruteforce.h
 create mode 100644 src/matchers/bruteforce/matcher_bruteforce_load_yaml.cpp

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 48f474b..f763e2a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -54,7 +54,9 @@ SET(sources
 	descriptors/lucid/descriptor_lucid_load_yaml.cpp	
 	matchers/matcher_base.cpp 
 	matchers/flannbased/matcher_flannbased.cpp
-	matchers/flannbased/matcher_flannbased_load_yaml.cpp)
+	matchers/flannbased/matcher_flannbased_load_yaml.cpp
+	matchers/bruteforce/matcher_bruteforce.cpp
+	matchers/bruteforce/matcher_bruteforce_load_yaml.cpp	)
 
 # application header files
 SET(headers 
@@ -92,7 +94,8 @@ SET(headers
 	descriptors/lucid/descriptor_lucid.h
 	matchers/matcher_factory.h
 	matchers/matcher_base.h
-	matchers/flannbased/matcher_flannbased.h)
+	matchers/flannbased/matcher_flannbased.h
+	matchers/bruteforce/matcher_bruteforce.h)
 
 # locate the necessary dependencies
 FIND_PACKAGE(Eigen3 REQUIRED)
diff --git a/src/examples/test_matcher.cpp b/src/examples/test_matcher.cpp
index bcb56ac..3ac6eb6 100644
--- a/src/examples/test_matcher.cpp
+++ b/src/examples/test_matcher.cpp
@@ -36,6 +36,7 @@
 
 // Matchers
 #include "../matchers/flannbased/matcher_flannbased.h"
+#include "../matchers/bruteforce/matcher_bruteforce.h"
 
 int main(void)
 {
@@ -116,7 +117,7 @@ int main(void)
 
     std::cout << "\n================ MATCHER TEST  =================" << std::endl;
 
-    std::string def_matcher = "FLANNBASED";
+    std::string def_matcher = "BRUTEFORCE";
     std::cout << std::endl << "Which MATCHER do you want to test? Type one of the registered names  [default: " << def_matcher << "]: ";
     std::string mat_name = readFromUser(def_matcher);
 
@@ -124,6 +125,8 @@ int main(void)
 
     if (mat_name.compare("FLANNBASED") == 0)
     	mat_ptr = std::static_pointer_cast<MatcherFLANNBASED>(mat_ptr);
+    if (mat_name.compare("BRUTEFORCE") == 0)
+    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE>(mat_ptr);
 
     std::cout << std::endl << "... Testing " << det_ptr->getName() << " with " <<  des_ptr->getName() << " and " <<  mat_ptr->getName() << " ..." << std::endl;
 
diff --git a/src/examples/yaml/BRUTEFORCE.yaml b/src/examples/yaml/BRUTEFORCE.yaml
new file mode 100644
index 0000000..77ad4e1
--- /dev/null
+++ b/src/examples/yaml/BRUTEFORCE.yaml
@@ -0,0 +1,5 @@
+sensor:
+  type: "USB_CAM"
+matcher:
+  type: "BRUTEFORCE"
+  match type: 1     #  Match type. MATCH = 1, KNNMATCH = 2, RADIUSMATCH = 3
\ No newline at end of file
diff --git a/src/matchers/bruteforce/matcher_bruteforce.cpp b/src/matchers/bruteforce/matcher_bruteforce.cpp
new file mode 100644
index 0000000..6acd1f5
--- /dev/null
+++ b/src/matchers/bruteforce/matcher_bruteforce.cpp
@@ -0,0 +1,17 @@
+#include "matcher_bruteforce.h"
+
+namespace vision_utils {
+
+MatcherBRUTEFORCE::MatcherBRUTEFORCE(void)
+{}
+
+MatcherBRUTEFORCE::~MatcherBRUTEFORCE(void)
+{}
+
+} /* namespace vision_utils */
+
+// Register in the MatchersFactory
+namespace vision_utils
+{
+VU_REGISTER_MATCHER("BRUTEFORCE", MatcherBRUTEFORCE);
+} /* namespace vision_utils */
diff --git a/src/matchers/bruteforce/matcher_bruteforce.h b/src/matchers/bruteforce/matcher_bruteforce.h
new file mode 100644
index 0000000..2aee80f
--- /dev/null
+++ b/src/matchers/bruteforce/matcher_bruteforce.h
@@ -0,0 +1,66 @@
+#ifndef _MATCHER_BRUTEFORCE_H_
+#define _MATCHER_BRUTEFORCE_H_
+
+#include "../matcher_base.h"
+#include "../matcher_factory.h"
+
+// yaml-cpp library
+#ifdef USING_YAML
+	#include <yaml-cpp/yaml.h>
+#endif
+
+namespace vision_utils {
+
+// Create all pointers
+VU_PTR_TYPEDEFS(MatcherBRUTEFORCE);
+VU_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE);
+
+/** \brief Class parameters
+ *
+ */
+struct MatcherParamsBRUTEFORCE: public MatcherParamsBase
+{
+	// TODO: Add possible parameters
+};
+
+/** \brief DETECTOR class
+ *
+ */
+class MatcherBRUTEFORCE : public MatcherBase {
+
+    public:
+		MatcherBRUTEFORCE();
+        virtual ~MatcherBRUTEFORCE(void);
+
+        // Factory method
+        static MatcherBasePtr create(const std::string& _unique_name, const ParamsBasePtr _params);
+
+    private:
+
+        void defineMatcher(const ParamsBasePtr _params);
+};
+
+/*
+ * brief Define detector
+ */
+inline void MatcherBRUTEFORCE::defineMatcher(const ParamsBasePtr _params)
+{
+	params_base_ptr_ = std::static_pointer_cast<MatcherParamsBase>(_params);
+	MatcherParamsBRUTEFORCEPtr params_ptr = std::static_pointer_cast<MatcherParamsBRUTEFORCE>(_params);
+    matcher_ = cv::DescriptorMatcher::create("BruteForce");
+}
+
+/*
+ * brief Create object in factory
+ */
+inline MatcherBasePtr MatcherBRUTEFORCE::create(const std::string& _unique_name, const ParamsBasePtr _params)
+{
+    MatcherBRUTEFORCEPtr mat_ptr = std::make_shared<MatcherBRUTEFORCE>();
+    mat_ptr->setName(_unique_name);
+    mat_ptr->defineMatcher(_params);
+    return mat_ptr;
+}
+
+} /* namespace vision_utils */
+
+#endif /* _MATCHER_BRUTEFORCE_H_ */
diff --git a/src/matchers/bruteforce/matcher_bruteforce_load_yaml.cpp b/src/matchers/bruteforce/matcher_bruteforce_load_yaml.cpp
new file mode 100644
index 0000000..1749c0f
--- /dev/null
+++ b/src/matchers/bruteforce/matcher_bruteforce_load_yaml.cpp
@@ -0,0 +1,46 @@
+#include "matcher_bruteforce.h"
+
+#ifdef USING_YAML
+
+// yaml-cpp library
+#include <yaml-cpp/yaml.h>
+
+namespace vision_utils
+{
+
+namespace
+{
+
+static ParamsBasePtr createParamsBRUTEFORCEMatcher(const std::string & _filename_dot_yaml)
+{
+	MatcherParamsBRUTEFORCEPtr params_ptr = std::make_shared<MatcherParamsBRUTEFORCE>();
+
+    using std::string;
+    using YAML::Node;
+    Node yaml_params = YAML::LoadFile(_filename_dot_yaml);
+    if (!yaml_params.IsNull())
+    {
+        Node d_yaml = yaml_params["matcher"];
+        if(d_yaml["type"].as<string>() == "BRUTEFORCE")
+        {
+        	params_ptr->match_type	= d_yaml["match type"].as<int>();
+        	// TODO: Add possible parameters
+        }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_matBRUTEFORCE_params = ParamsFactory::get().registerCreator("BRUTEFORCE MAT", createParamsBRUTEFORCEMatcher);
+
+} /* namespace [unnamed] */
+
+} /* namespace vision_utils */
+
+#endif /* IF USING_YAML */
+
-- 
GitLab