#include "autostitch.h" #include "meowpp/oo/ObjBase.h" #include "meowpp/oo/ObjSelector.h" #include "meowpp/geo/Vectors.h" #include "meowpp/gra/FeaturePointsDetector_Harris.h" using namespace meow; class Harris: public MyFeaturePointsDetector{ private: FeaturePointsDetector_Harris _body; public: Usage usage() const{ Usage ret; ret.optionAdd("harris-k", "Specify the constant K of 'R = detM - KtraceM'", "", stringPrintf("%.10f", _body.paramK()), false); ret.optionAdd("harris-r", "Specify the threshold of R to determind whether is " "featuer point or not", "", stringPrintf("%.10f", _body.paramR()), false); ret.optionAdd("harris-w", "Specify the sigma of the gaussian blur", "", stringPrintf("%.10f", _body.paramW()), false); ret.optionAdd("harris-n", "Specify the sigma of the gaussian blur to de-noise", "", stringPrintf("%.10f", _body.paramN()), false); ret.optionAdd("harris-g", "Specify the sigma of the gaussian blur to generate feature", "", stringPrintf("%.10f", _body.paramG()), false); ret.optionAdd("harris-l", ".........", "", stringPrintf("%.10f", _body.paramL()), false); ret.optionAdd("harris-b", "Description size", "", stringPrintf("%lu", _body.paramB()), false); return ret; } bool usage(meow::Usage const& usg){ double K = atof(usg.optionValue("harris-k", 0).c_str()); double R = atof(usg.optionValue("harris-r", 0).c_str()); double W = atof(usg.optionValue("harris-w", 0).c_str()); double N = atof(usg.optionValue("harris-n", 0).c_str()); double L = atof(usg.optionValue("harris-l", 0).c_str()); double G = atof(usg.optionValue("harris-g", 0).c_str()); size_t B = atoi(usg.optionValue("harris-b", 0).c_str()); _body.paramK(K); _body.paramR(R); _body.paramW(W); _body.paramN(N); _body.paramL(L); _body.paramG(G); _body.paramB(B); return true; } std::vector > detect(meow::Bitmap const& bmp){ return _body.detect(bmp); } std::string type() const{ return std::string("Harris"); } ObjBase* create() const{ return new Harris(); } }; static meow::ObjSelector __(new Harris(), true);