From a667a92e528642097bbe9d3715f990893e71ea29 Mon Sep 17 00:00:00 2001 From: asantamaria <asantamaria@iri.upc.edu> Date: Thu, 10 Aug 2017 10:59:39 +0200 Subject: [PATCH] added matcher bruteforce hamming 2 --- src/CMakeLists.txt | 15 +++-- src/examples/test_matcher.cpp | 5 +- src/examples/yaml/BRUTEFORCE_HAMMING_2.yaml | 5 ++ .../matcher_bruteforce_hamming_2.cpp | 17 +++++ .../matcher_bruteforce_hamming_2.h | 66 +++++++++++++++++++ ...matcher_bruteforce_hamming_2_load_yaml.cpp | 46 +++++++++++++ 6 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 src/examples/yaml/BRUTEFORCE_HAMMING_2.yaml create mode 100644 src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.cpp create mode 100644 src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h create mode 100644 src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2_load_yaml.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 387a6db..46028f0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -53,15 +53,17 @@ SET(sources descriptors/lucid/descriptor_lucid.cpp descriptors/lucid/descriptor_lucid_load_yaml.cpp matchers/matcher_base.cpp - matchers/flannbased/matcher_flannbased.cpp - matchers/flannbased/matcher_flannbased_load_yaml.cpp matchers/bruteforce/matcher_bruteforce.cpp matchers/bruteforce/matcher_bruteforce_load_yaml.cpp matchers/bruteforce_l1/matcher_bruteforce_l1.cpp matchers/bruteforce_l1/matcher_bruteforce_l1_load_yaml.cpp matchers/bruteforce_hamming/matcher_bruteforce_hamming.cpp - matchers/bruteforce_hamming/matcher_bruteforce_hamming_load_yaml.cpp ) - + matchers/bruteforce_hamming/matcher_bruteforce_hamming_load_yaml.cpp + matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.cpp + matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2_load_yaml.cpp + matchers/flannbased/matcher_flannbased.cpp + matchers/flannbased/matcher_flannbased_load_yaml.cpp) + # application header files SET(headers vision_utils.h @@ -98,10 +100,11 @@ SET(headers descriptors/lucid/descriptor_lucid.h matchers/matcher_factory.h matchers/matcher_base.h - matchers/flannbased/matcher_flannbased.h matchers/bruteforce/matcher_bruteforce.h matchers/bruteforce_l1/matcher_bruteforce_l1.h - matchers/bruteforce_hamming/matcher_bruteforce_hamming.h) + matchers/bruteforce_hamming/matcher_bruteforce_hamming.h + matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h + matchers/flannbased/matcher_flannbased.h) # locate the necessary dependencies FIND_PACKAGE(Eigen3 REQUIRED) diff --git a/src/examples/test_matcher.cpp b/src/examples/test_matcher.cpp index 592976c..18e09bf 100644 --- a/src/examples/test_matcher.cpp +++ b/src/examples/test_matcher.cpp @@ -39,6 +39,7 @@ #include "../matchers/bruteforce/matcher_bruteforce.h" #include "../matchers/bruteforce_l1/matcher_bruteforce_l1.h" #include "../matchers/bruteforce_hamming/matcher_bruteforce_hamming.h" +#include "../matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h" int main(void) { @@ -119,7 +120,7 @@ int main(void) std::cout << "\n================ MATCHER TEST =================" << std::endl; - std::string def_matcher = "BRUTEFORCE_HAMMING"; + 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); @@ -133,6 +134,8 @@ int main(void) mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_L1>(mat_ptr); if (mat_name.compare("BRUTEFORCE_HAMMING") == 0) mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING>(mat_ptr); + if (mat_name.compare("BRUTEFORCE_HAMMING_2") == 0) + mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING_2>(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_HAMMING_2.yaml b/src/examples/yaml/BRUTEFORCE_HAMMING_2.yaml new file mode 100644 index 0000000..86fe620 --- /dev/null +++ b/src/examples/yaml/BRUTEFORCE_HAMMING_2.yaml @@ -0,0 +1,5 @@ +sensor: + type: "USB_CAM" +matcher: + type: "BRUTEFORCE_HAMMING_2" + match type: 1 # Match type. MATCH = 1, KNNMATCH = 2, RADIUSMATCH = 3 \ No newline at end of file diff --git a/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.cpp b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.cpp new file mode 100644 index 0000000..493f7dc --- /dev/null +++ b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.cpp @@ -0,0 +1,17 @@ +#include "matcher_bruteforce_hamming_2.h" + +namespace vision_utils { + +MatcherBRUTEFORCE_HAMMING_2::MatcherBRUTEFORCE_HAMMING_2(void) +{} + +MatcherBRUTEFORCE_HAMMING_2::~MatcherBRUTEFORCE_HAMMING_2(void) +{} + +} /* namespace vision_utils */ + +// Register in the MatchersFactory +namespace vision_utils +{ +VU_REGISTER_MATCHER("BRUTEFORCE_HAMMING_2", MatcherBRUTEFORCE_HAMMING_2); +} /* namespace vision_utils */ diff --git a/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h new file mode 100644 index 0000000..acec694 --- /dev/null +++ b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h @@ -0,0 +1,66 @@ +#ifndef _MATCHER_BRUTEFORCE_HAMMING_2_H_ +#define _MATCHER_BRUTEFORCE_HAMMING_2_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_HAMMING_2); +VU_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE_HAMMING_2); + +/** \brief Class parameters + * + */ +struct MatcherParamsBRUTEFORCE_HAMMING_2: public MatcherParamsBase +{ + // TODO: Add possible parameters +}; + +/** \brief DETECTOR class + * + */ +class MatcherBRUTEFORCE_HAMMING_2 : public MatcherBase { + + public: + MatcherBRUTEFORCE_HAMMING_2(); + virtual ~MatcherBRUTEFORCE_HAMMING_2(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_HAMMING_2::defineMatcher(const ParamsBasePtr _params) +{ + params_base_ptr_ = std::static_pointer_cast<MatcherParamsBase>(_params); + MatcherParamsBRUTEFORCE_HAMMING_2Ptr params_ptr = std::static_pointer_cast<MatcherParamsBRUTEFORCE_HAMMING_2>(_params); + matcher_ = cv::DescriptorMatcher::create("BruteForce-Hamming(2)"); +} + +/* + * brief Create object in factory + */ +inline MatcherBasePtr MatcherBRUTEFORCE_HAMMING_2::create(const std::string& _unique_name, const ParamsBasePtr _params) +{ + MatcherBRUTEFORCE_HAMMING_2Ptr mat_ptr = std::make_shared<MatcherBRUTEFORCE_HAMMING_2>(); + mat_ptr->setName(_unique_name); + mat_ptr->defineMatcher(_params); + return mat_ptr; +} + +} /* namespace vision_utils */ + +#endif /* _MATCHER_BRUTEFORCE_HAMMING_2_H_ */ diff --git a/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2_load_yaml.cpp b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2_load_yaml.cpp new file mode 100644 index 0000000..41fd170 --- /dev/null +++ b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2_load_yaml.cpp @@ -0,0 +1,46 @@ +#include "matcher_bruteforce_hamming_2.h" + +#ifdef USING_YAML + +// yaml-cpp library +#include <yaml-cpp/yaml.h> + +namespace vision_utils +{ + +namespace +{ + +static ParamsBasePtr createParamsBRUTEFORCE_HAMMING_2Matcher(const std::string & _filename_dot_yaml) +{ + MatcherParamsBRUTEFORCE_HAMMING_2Ptr params_ptr = std::make_shared<MatcherParamsBRUTEFORCE_HAMMING_2>(); + + 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_HAMMING_2") + { + 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_HAMMING_2_params = ParamsFactory::get().registerCreator("BRUTEFORCE_HAMMING_2 MAT", createParamsBRUTEFORCE_HAMMING_2Matcher); + +} /* namespace [unnamed] */ + +} /* namespace vision_utils */ + +#endif /* IF USING_YAML */ + -- GitLab