MTF
HESM.h
1 #ifndef MTF_HESM_H
2 #define MTF_HESM_H
3 
4 #include "SearchMethod.h"
5 
6 #define _MAX_ITERS 10
7 #define _EPSILON 0.01
8 #define _REC_INIT_ERR_GRAD false
9 #define _DEBUG_MODE false
10 
11 _MTF_BEGIN_NAMESPACE
12 
13 struct HESMParams{
14  int max_iters;
15  double epsilon;
17  bool debug_mode;
19 
21  HESMParams(int _max_iters, double _epsilon,
22  bool _rec_init_err_grad, bool _debug_mode){
23  max_iters = _max_iters;
24  epsilon = _epsilon;
25  rec_init_err_grad = _rec_init_err_grad;
26  debug_mode = _debug_mode;
27  }
28  HESMParams(HESMParams *params = nullptr) :
29  max_iters(_MAX_ITERS),
30  epsilon(_EPSILON),
31  rec_init_err_grad(_REC_INIT_ERR_GRAD),
32  debug_mode(_DEBUG_MODE){
33  if(params){
34  max_iters = params->max_iters;
35  epsilon = params->epsilon;
36  rec_init_err_grad = params->rec_init_err_grad;
37  debug_mode = params->debug_mode;
38  }
39  }
40 };
41 
42 struct SSMData{
43  MatrixXd init_pix_jacobian, curr_pix_jacobian, mean_pix_jacobian;
44  RowVectorXd similarity_jacobian;
45  VectorXd ssm_update;
46  MatrixXd hessian;
47  SSMData(){}
48  SSMData(int n_pix, int state_vec_size){
49  resize(n_pix, state_vec_size);
50  }
51  void resize(int n_pix, int state_vec_size){
52  ssm_update.resize(state_vec_size);
53  init_pix_jacobian.resize(n_pix, state_vec_size);
54  curr_pix_jacobian.resize(n_pix, state_vec_size);
55  mean_pix_jacobian.resize(n_pix, state_vec_size);
56  similarity_jacobian.resize(state_vec_size);
57  hessian.resize(state_vec_size, state_vec_size);
58  }
59 };
60 
61 template<class AM, class SSM, class SSM2>
62 class HESM : public SearchMethod < AM, SSM > {
63 
64 public:
65  typedef HESMParams ParamType;
66 
67  using SearchMethod<AM, SSM> ::am;
68  using SearchMethod<AM, SSM> ::ssm;
69  using typename SearchMethod<AM, SSM> ::AMParams;
70  using typename SearchMethod<AM, SSM> ::SSMParams;
71  using SearchMethod<AM, SSM> ::resx;
72  using SearchMethod<AM, SSM> ::resy;
73  using SearchMethod<AM, SSM> ::n_pix;
74  using SearchMethod<AM, SSM> ::cv_corners_mat;
75  using SearchMethod<AM, SSM> ::cv_corners;
76  using SearchMethod<AM, SSM> ::name;
77  using SearchMethod<AM, SSM> ::curr_img;
78  using SearchMethod<AM, SSM> ::img_height;
79  using SearchMethod<AM, SSM> ::img_width;
80  using SearchMethod<AM, SSM> ::initialize;
81  using SearchMethod<AM, SSM> ::update;
82 
83  typedef typename SSM2::ParamType SSM2Params;
84 
85 
86  HESM(const ParamType *nesm_params = NULL,
87  const AMParams *am_params = NULL, const SSMParams *ssm_params = NULL,
88  SSM2Params *ssm2_params = NULL);
89 
90  void initialize(const cv::Mat &corners) override;
91  void update() override;
92  template<class _SSM> void updateSSM(_SSM *_ssm, SSMData &_data);
93  //template<class _SSM> void initializeSSM(_SSM *_ssm, SSMData &_data);
94 
95  //double computeSSMUpdate();
96 private:
97  ParamType params;
98 
99  SSM2 *ssm2;
100  SSMData ssm_data, ssm2_data;
101 
102  Matrix24d prev_corners;
103 
106  //MatrixXd init_pix_jacobian, curr_pix_jacobian, mean_pix_jacobian;
107  //MatrixXd init_pix_jacobian2, curr_pix_jacobian2, mean_pix_jacobian2;
108 
109  //VectorXd ssm1_update, ssm2_update;
110 
111  Matrix3d ssm2_warp_update;
112 
114  //RowVectorXd similarity_jacobian, similarity_jacobian2;
116  //MatrixXd hessian, hessian2;
117 
119  //MatrixXd err_vec_jacobian;
120 
121  int frame_id;
122  char *log_fname;
123  char *time_fname;
124 
126  MatrixXd _init_jacobian, _curr_jacobian;
127 };
128 _MTF_END_NAMESPACE
129 
130 #endif
131 
double epsilon
maximum iterations of the HESM algorithm to run for each frame
Definition: HESM.h:15
bool rec_init_err_grad
maximum L1 norm of the state update vector at which to stop the iterations
Definition: HESM.h:16
Definition: StateSpaceModel.h:35
bool debug_mode
decides if the gradient of the error vector w.r.t.
Definition: HESM.h:18
Definition: AMParams.h:12
Definition: HESM.h:62
Definition: SearchMethod.h:10
Definition: HESM.h:42
HESMParams(int _max_iters, double _epsilon, bool _rec_init_err_grad, bool _debug_mode)
decides whether logging data will be printed for debugging purposes;
Definition: HESM.h:21
Definition: HESM.h:13