Skip to content
Snippets Groups Projects
Commit ac79257c authored by Angel Santamaria-Navarro's avatar Angel Santamaria-Navarro
Browse files

added bruteforce matcher

parent 115824d2
No related branches found
No related tags found
No related merge requests found
...@@ -54,7 +54,9 @@ SET(sources ...@@ -54,7 +54,9 @@ SET(sources
descriptors/lucid/descriptor_lucid_load_yaml.cpp descriptors/lucid/descriptor_lucid_load_yaml.cpp
matchers/matcher_base.cpp matchers/matcher_base.cpp
matchers/flannbased/matcher_flannbased.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 # application header files
SET(headers SET(headers
...@@ -92,7 +94,8 @@ SET(headers ...@@ -92,7 +94,8 @@ SET(headers
descriptors/lucid/descriptor_lucid.h descriptors/lucid/descriptor_lucid.h
matchers/matcher_factory.h matchers/matcher_factory.h
matchers/matcher_base.h matchers/matcher_base.h
matchers/flannbased/matcher_flannbased.h) matchers/flannbased/matcher_flannbased.h
matchers/bruteforce/matcher_bruteforce.h)
# locate the necessary dependencies # locate the necessary dependencies
FIND_PACKAGE(Eigen3 REQUIRED) FIND_PACKAGE(Eigen3 REQUIRED)
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
// Matchers // Matchers
#include "../matchers/flannbased/matcher_flannbased.h" #include "../matchers/flannbased/matcher_flannbased.h"
#include "../matchers/bruteforce/matcher_bruteforce.h"
int main(void) int main(void)
{ {
...@@ -116,7 +117,7 @@ int main(void) ...@@ -116,7 +117,7 @@ int main(void)
std::cout << "\n================ MATCHER TEST =================" << std::endl; 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::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); std::string mat_name = readFromUser(def_matcher);
...@@ -124,6 +125,8 @@ int main(void) ...@@ -124,6 +125,8 @@ int main(void)
if (mat_name.compare("FLANNBASED") == 0) if (mat_name.compare("FLANNBASED") == 0)
mat_ptr = std::static_pointer_cast<MatcherFLANNBASED>(mat_ptr); 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; std::cout << std::endl << "... Testing " << det_ptr->getName() << " with " << des_ptr->getName() << " and " << mat_ptr->getName() << " ..." << std::endl;
......
sensor:
type: "USB_CAM"
matcher:
type: "BRUTEFORCE"
match type: 1 # Match type. MATCH = 1, KNNMATCH = 2, RADIUSMATCH = 3
\ No newline at end of file
#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 */
#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_ */
#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 */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment