103 #ifndef _RLOFPARAMETER_H_
104 #define _RLOFPARAMETER_H_
105 #include <OpticalFlow/IFeatureTracker.h>
106 #ifdef USE_BOOSTSERIALIZATION
107 #include <boost/lexical_cast.hpp>
108 #include <boost/archive/xml_oarchive.hpp>
109 #include <boost/archive/xml_iarchive.hpp>
110 #include <boost/serialization/nvp.hpp>
111 #include <boost/serialization/list.hpp>
112 #include <boost/serialization/vector.hpp>
113 #include <boost/serialization/map.hpp>
114 #include <boost/serialization/deque.hpp>
115 #include <boost/serialization/string.hpp>
116 #include <boost/serialization/version.hpp>
117 #include <boost/serialization/split_member.hpp>
118 #include <boost/serialization/shared_ptr.hpp>
119 #include <boost/serialization/split_free.hpp>
120 #include <boost/mpl/bool.hpp>
121 #include <boost/cast.hpp>
125 #define RLOF_RESOLVE_TENSOR_AS_L2NORM 16
126 #define RLOF_RESOLVE_TENSOR_CONTINIOUS 32
127 #define RLOF_RESOLVE_USE_I 64
134 class DECL_SPEC CLocalFlowParameter : public FeatureTrackerContext
140 WIN_CROSSADAPTIVE = 2,
152 ILL_TEST_MODEL = 8 };
154 : m_WindowType(WIN_STANDART)
158 , m_SolverType(ITER_STANDART)
159 , m_IlluminationModel(ILL_NO_MODEL)
176 throw(std::exception(
"CLocalFlowParameter: error maxLevel need to be >= 0\n"));
210 const int level()
const {
return m_MaxLevel; };
222 WindowType m_WindowType;
231 #ifdef USE_BOOSTSERIALIZATION
233 friend class boost::serialization::access;
234 template<
class Archive>
235 void serialize(Archive & ar,
const unsigned int version)
237 ar & boost::serialization::make_nvp(
"m_WindowType", m_WindowType);
238 ar & boost::serialization::make_nvp(
"m_SolverType", m_SolverType);
239 ar & boost::serialization::make_nvp(
"m_IlluminationModel", m_IlluminationModel);
240 ar & boost::serialization::make_nvp(
"m_MaxLevel", m_MaxLevel);
241 ar & boost::serialization::make_nvp(
"m_MaxIter", m_MaxIter);
242 ar & boost::serialization::make_nvp(
"m_WinSize", m_WinSize);
243 ar & boost::serialization::make_nvp(
"m_Verbosity", m_Verbosity);
244 ar & boost::serialization::make_nvp(
"m_Flags", m_Flags);
247 virtual std::string uid()
const {
248 return boost::lexical_cast<std::string>(m_WindowType)
249 +boost::lexical_cast<std::string>(m_SolverType)
250 +boost::lexical_cast<std::string>(m_IlluminationModel)
251 +boost::lexical_cast<std::string>(m_MaxLevel)
252 +boost::lexical_cast<std::string>(m_MaxIter)
253 +boost::lexical_cast<std::string>(m_WinSize)
254 +boost::lexical_cast<std::string>(m_Verbosity)
255 +boost::lexical_cast<std::string>(m_Flags);
273 void largeWinSize(
const int & val);
277 void smallWinSize(
const int & val);
282 void norm(
const std::vector<float> val);
286 void L2iteration(
int val);
290 const int largeWinSize()
const;
294 const int smallWinSize()
const ;
298 const std::vector<float> norm()
const;
302 const int L2iteration()
const;
306 const bool hasChangedWinSize()
const;
310 bool needRGBData()
const;
324 #ifdef USE_BOOSTSERIALIZATION
326 friend class boost::serialization::access;
327 template<
class Archive>
328 void serialize(Archive & ar,
const unsigned int version)
330 ar & boost::serialization::make_nvp(
"CLocalFlowParameter", boost::serialization::base_object<CLocalFlowParameter>(*
this));
331 ar & boost::serialization::make_nvp(
"m_SmallWinSize", m_SmallWinSize);
332 ar & boost::serialization::make_nvp(
"m_ParamNorm", m_ParamNorm);
333 ar & boost::serialization::make_nvp(
"m_Param", m_Param);
334 ar & boost::serialization::make_nvp(
"m_SSDThreshold", m_SSDThreshold);
335 ar & boost::serialization::make_nvp(
"m_NoL2Iteration", m_NoL2Iteration);
336 ar & boost::serialization::make_nvp(
"m_WinSizeHasChanged", m_WinSizeHasChanged);
339 virtual std::string uid()
const
341 std::string res = CLocalFlowParameter::uid()
342 +boost::lexical_cast<std::string>(m_SmallWinSize)
343 +boost::lexical_cast<std::string>(m_SolverType)
344 +boost::lexical_cast<std::string>(m_SSDThreshold)
345 +boost::lexical_cast<std::string>(m_NoL2Iteration)
346 +boost::lexical_cast<std::string>(m_WinSizeHasChanged);
347 for(
auto i = m_ParamNorm.begin(); i != m_ParamNorm.end(); ++i)
348 res = res + boost::lexical_cast<std::string>(*i);
349 for(
auto i = m_Param.begin(); i != m_Param.end(); ++i)
350 res = res + boost::lexical_cast<std::string>(*i);
372 void segmentationThreshold(
int val);
376 int segmentationThreshold()
const;
380 void smallWinSize(
const int & val);
384 const int smallWinSize()
const ;
395 #ifdef USE_BOOSTSERIALIZATION
397 friend class boost::serialization::access;
398 template<
class Archive>
399 void serialize(Archive & ar,
const unsigned int version)
401 ar & boost::serialization::make_nvp(
"m_SegmentationThreshold", m_SegmentationThreshold);
402 ar & boost::serialization::make_nvp(
"m_UseBothImage", m_UseBothImage);
403 ar & boost::serialization::make_nvp(
"m_UsePreComputedCross", m_UsePreComputedCross);
404 ar & boost::serialization::make_nvp(
"m_ColorSpace", m_ColorSpace);
405 ar & boost::serialization::make_nvp(
"m_SmallWinSize", m_SmallWinSize);
408 virtual std::string uid()
const
410 return boost::lexical_cast<std::string>(m_SegmentationThreshold)
411 +boost::lexical_cast<std::string>(m_UseBothImage)
412 +boost::lexical_cast<std::string>(m_UsePreComputedCross)
413 +boost::lexical_cast<std::string>(m_ColorSpace)
414 +boost::lexical_cast<std::string>(m_SmallWinSize);
436 #ifdef USE_BOOSTSERIALIZATION
438 friend class boost::serialization::access;
439 template<
class Archive>
440 void serialize(Archive & ar,
const unsigned int version)
442 ar & boost::serialization::make_nvp(
"CLocalFlowParameter", boost::serialization::base_object<CLocalFlowParameter>(*
this));
464 #ifdef USE_BOOSTSERIALIZATION
466 friend class boost::serialization::access;
467 template<
class Archive>
468 void serialize(Archive & ar,
const unsigned int version)
470 ar & boost::serialization::make_nvp(
"CRobustFlowParameter", boost::serialization::base_object<CRobustFlowParameter>(*
this));
471 ar & boost::serialization::make_nvp(
"CCrossParameter", boost::serialization::base_object<CCrossParameter>(*
this));
474 virtual std::string uid()
const
476 return CCrossParameter::uid() + CRobustFlowParameter::uid();
489 #ifdef USE_BOOSTSERIALIZATION
491 friend class boost::serialization::access;
492 template<
class Archive>
493 void serialize(Archive & ar,
const unsigned int version)
495 ar & boost::serialization::make_nvp(
"CPLKParameter", boost::serialization::base_object<CPLKParameter>(*
this));
496 ar & boost::serialization::make_nvp(
"CCrossParameter", boost::serialization::base_object<CCrossParameter>(*
this));
499 virtual std::string uid()
const
501 return CCrossParameter::uid()+ CLocalFlowParameter::uid();
518 if( dynamic_cast<const CPLKParameter*>(parameter) )
519 return "CPLKParameter";
520 if( dynamic_cast<const CCrossPLKParameter*>(parameter) )
521 return "CCrossPLKParameter";
522 if( dynamic_cast<const CCrossRobustFlowParameter*>(parameter) )
523 return "CCrossRobustFlowParameter";
524 if( dynamic_cast<const CCrossParameter*>(parameter) )
525 return "CCrossParameter";
526 if( dynamic_cast<const CRobustFlowParameter*>(parameter) )
527 return "CRobustFlowParameter";
539 if( name ==
"CPLKParameter")
541 if( name ==
"CCrossPLKParameter")
543 if( name ==
"CCrossRobustFlowParameter")
545 if( name ==
"CRobustFlowParameter" )
549 #ifdef USE_BOOSTSERIALIZATION
552 using boost::serialization::make_nvp;
553 std::string _name =
name(parameter);
554 std::ofstream ofs((basePath.append(_name).append(
".xml")).c_str());
555 if( ofs.is_open() ==
false)
556 throw(std::exception(
"[CLocalFlowParameterFactory::save] Could not open setting file"));
558 boost::archive::xml_oarchive oa(ofs);
559 if( dynamic_cast<const CPLKParameter*>(parameter) )
560 oa << make_nvp(_name.c_str(), *
dynamic_cast<const CPLKParameter*
>(parameter));
561 else if( dynamic_cast<const CCrossPLKParameter*>(parameter) )
563 else if( dynamic_cast<const CCrossRobustFlowParameter*>(parameter) )
565 else if( dynamic_cast<const CCrossParameter*>(parameter) )
566 oa << make_nvp(_name.c_str(), *
dynamic_cast<const CCrossParameter*
>(parameter));
567 else if( dynamic_cast<const CRobustFlowParameter*>(parameter) )
570 throw(std::exception(
"[CLocalFlowParameterFactory::serialize] no cast found."));
574 using boost::serialization::make_nvp;
575 std::string _name =
name(parameter);
576 std::ifstream ifs((basePath.append(_name).append(
".xml")).c_str());
577 if( ifs.is_open() ==
false)
579 save(basePath, parameter);
580 std::cerr <<
"[CLocalFlowParameterFactory::serialize] use and save default: " << basePath.append(_name).append(
".xml") << std::endl;
584 boost::archive::xml_iarchive ia(ifs);
585 if( dynamic_cast<CPLKParameter*>(parameter) )
586 ia >> make_nvp(_name.c_str(), *
dynamic_cast<CPLKParameter*
>(parameter));
587 else if( dynamic_cast<CCrossPLKParameter*>(parameter) )
589 else if( dynamic_cast<CCrossRobustFlowParameter*>(parameter) )
591 else if( dynamic_cast<CCrossParameter*>(parameter) )
592 ia >> make_nvp(_name.c_str(), *
dynamic_cast<CCrossParameter*
>(parameter));
593 else if( dynamic_cast<CRobustFlowParameter*>(parameter) )
596 throw(std::exception(
"[CLocalFlowParameterFactory::serialize] no cast found."));
Feature tracker parameter base class This class is the base class for all parameter classes in that l...
static CLocalFlowParameter * create(std::string name)
void solverType(SolverType val)
int m_SegmentationThreshold
RLOF parameter factory A factory to facilitate the serialization of the local optical flow parameter ...
RLOF parameter class The Robust Local Optical Flow parameter class contains additional parameters use...
bool usePreComputedCross() const
CLocalFlowParameter::SolverType solverType() const
Pyramidal Lucas Kanade parameter class The Pyramidal Lucas Kanade parameter class. Please use a instance of this class to run the PLK version. The parameter class is associated to PLK.
Cross based PLK/RLOF parameter base class The cross based parameter base class for the Pyramidal Luca...
std::vector< float > m_ParamNorm
WindowType windowType() const
static std::string name(const FeatureTrackerContext *parameter)
const int smallWinSize() const
std::vector< float > m_Param
PLK/RLOF parameter base class The parameter base class provides basic interfaces to set up the algori...
const int verbosity() const
Cross based Pyramidal Lucas Kanade parameter class The cross based Pyramidal Lucas Kanade parameter c...
const int iteration() const
bool m_UsePreComputedCross
Cross based RLOF parameter class The cross based Robust Local Optical Flow parameter class contains i...