MTF
SearchMethod.h
1 #ifndef MTF_SEARCH_METHOD_H
2 #define MTF_SEARCH_METHOD_H
3 
4 #include "mtf/TrackerBase.h"
5 #include "mtf/Macros/common.h"
6 
7 _MTF_BEGIN_NAMESPACE
8 
9 template<class AM, class SSM>
10 class SearchMethod : public TrackerBase{
11 public:
12 
13  typedef typename AM::ParamType AMParams;
14  typedef typename SSM::ParamType SSMParams;
15 
16  SearchMethod(const AMParams *am_params, const SSMParams *ssm_params) :
17  TrackerBase(), am(am_params), ssm(ssm_params),
18  spi_mask(nullptr){
19  cv_corners_mat.create(2, 4, CV_64FC1);
20  }
21  SearchMethod() : TrackerBase(),
22  spi_mask(nullptr){
23  cv_corners_mat.create(2, 4, CV_64FC1);
24  }
25 
26  virtual ~SearchMethod(){}
27  void setImage(const cv::Mat &img) override{
28  am.setCurrImg(img);
29  }
30  const cv::Mat& getRegion() override{
31  return cv_corners_mat;
32  }
33  // default implementation for SMs where the AM processing in the current frame
34  // does not depend on the results obtained in the last frame
35  void setRegion(const cv::Mat& corners) override{
36  ssm.setCorners(corners);
37  ssm.getCorners(cv_corners_mat);
38  }
39 
40  using TrackerBase::initialize;
41  using TrackerBase::update;
42  using TrackerBase::setRegion;
43 
44  virtual void setSPIMask(const bool *_spi_mask){
45  spi_mask = _spi_mask;
46  am.setSPIMask(_spi_mask);
47  ssm.setSPIMask(_spi_mask);
48  }
49  virtual void clearSPIMask(){
50  spi_mask = nullptr;
51  am.clearSPIMask();
52  ssm.clearSPIMask();
53  }
54  virtual const bool* getSPIMask(){
55  return spi_mask;
56  }
57  virtual void setInitStatus(){
58  am.setInitStatus();
59  ssm.setInitStatus();
60  }
61  virtual void clearInitStatus(){
62  am.clearInitStatus();
63  ssm.clearInitStatus();
64  }
65 
66  virtual bool supportsSPI(){ return am.supportsSPI() && ssm.supportsSPI(); }
67 
68  virtual int inputType() const override{ return am.inputType(); }
69 
71  virtual AM& getAM() { return am; }
72  virtual SSM& getSSM() { return ssm; }
73 
74  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
75 
76 protected:
77  AM am;
78  SSM ssm;
79  const bool *spi_mask;
80 };
81 // partial specialization for a SM with a
82 // composite or implicit appearance model that cannot be expressed as a class
83 template <class SSM>
84 class SearchMethod<void, SSM> : public TrackerBase{
85 public:
86 
87  typedef typename SSM::ParamType SSMParams;
88 
89  SearchMethod(const SSMParams *ssm_params) :
90  TrackerBase(), ssm(ssm_params),
91  spi_mask(nullptr){
92  cv_corners_mat.create(2, 4, CV_64FC1);
93  }
94  virtual ~SearchMethod(){}
95 
96  const cv::Mat& getRegion() override{
97  return cv_corners_mat;
98  }
99  // default implementation for SMS where the AM processing in the current frame
100  // does not depend on the results obtained in the last frame
101  void setRegion(const cv::Mat& corners) override{
102  ssm.setCorners(corners);
103  ssm.getCorners(cv_corners_mat);
104  }
105  virtual void setSPIMask(const bool *_spi_mask){
106  spi_mask = _spi_mask;
107  ssm.setSPIMask(_spi_mask);
108  }
109  virtual void clearSPIMask(){
110  spi_mask = nullptr;
111  ssm.clearSPIMask();
112  }
113  virtual const bool* getSPIMask(){
114  return spi_mask;
115  }
116  virtual bool supportsSPI(){ return ssm.supportsSPI(); }
117  virtual SSM& getSSM() { return ssm; }
118 
119  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
120 
121 protected:
122  SSM ssm;
123  const bool *spi_mask;
124 };
125 
126 _MTF_END_NAMESPACE
127 
128 #endif
Definition: StateSpaceModel.h:35
Definition: AMParams.h:12
virtual AM & getAM()
direct access to the underlying AM and SSM
Definition: SearchMethod.h:71
Definition: SearchMethod.h:10