MTF
SL3.h
1 #ifndef MTF_SL3_H
2 #define MTF_SL3_H
3 
4 #include "ProjectiveBase.h"
5 
6 _MTF_BEGIN_NAMESPACE
7 
9  bool normalized_init;
10  bool iterative_sample_mean;
11  int sample_mean_max_iters;
12  double sample_mean_eps;
13  bool debug_mode;
15  SL3Params(const SSMParams *ssm_params,
16  bool _normalized_init, bool _iterative_sample_mean,
17  int _sample_mean_max_iters, double _sample_mean_eps,
18  bool _debug_mode);
20  SL3Params(const SL3Params *params = nullptr);
21 };
22 
23 class SL3 : public ProjectiveBase{
24 public:
25 
26  typedef SL3Params ParamType;
27 
28  SL3( const ParamType *params_in = nullptr);
29 
30  void setState(const VectorXd &ssm_state) override;
31  void setCorners(const Matrix24d &corners) override;
32  using StateSpaceModel::setCorners;
33  void compositionalUpdate(const VectorXd& state_update) override;
34  void getInitPixGrad(Matrix2Xd &ssm_grad, int pix_id) override;
35  void getCurrPixGrad(Matrix2Xd &ssm_grad, int pix_id) override;
36 
37  void cmptInitPixJacobian(MatrixXd &jacobian_prod, const PixGradT &pix_jacobian) override;
38  void cmptWarpedPixJacobian(MatrixXd &dI_dp, const PixGradT &dI_dw) override;
39  void cmptPixJacobian(MatrixXd &jacobian_prod, const PixGradT &pix_jacobian) override;
40  void cmptApproxPixJacobian(MatrixXd &jacobian_prod,
41  const PixGradT &pix_jacobian) override;
42 
43  void estimateWarpFromCorners(VectorXd &state_update, const Matrix24d &in_corners,
44  const Matrix24d &out_corners) override;
45 
46  void estimateWarpFromPts(VectorXd &state_update, vector<uchar> &mask,
47  const vector<cv::Point2f> &in_pts, const vector<cv::Point2f> &out_pts,
48  const EstimatorParams &est_params) override;
49 
50  void invertState(VectorXd& inv_state, const VectorXd& state) override{
51  inv_state = -state;
52  }
53  void initializeSampler(const VectorXd &state_sigma,
54  const VectorXd &state_mean) override;
55  void setSampler(const VectorXd &state_sigma,
56  const VectorXd &state_mean) override;
57  using ProjectiveBase::initializeSampler;
58  VectorXd getSamplerSigma() override;
59  void generatePerturbation(VectorXd &perturbation) override;
60 
61  void compositionalRandomWalk(VectorXd &perturbed_state,
62  const VectorXd &base_state) override;
63  void compositionalAutoRegression1(VectorXd &perturbed_state, VectorXd &perturbed_ar,
64  const VectorXd &base_state, const VectorXd &base_ar, double a = 0.5) override;
65  void estimateMeanOfSamples(VectorXd &sample_mean,
66  const std::vector<VectorXd> &samples, int n_samples) override;
67 private:
68 
69  ParamType params;
70 
71  Matrix3d lieAlgBasis[8];
72  Matrix3d lie_alg_mat;
73  ProjWarpT lie_group_perturbation;
74 
75  Matrix8d covariance_mat;
76 
77  char *log_fname;
78 
79  void getWarpFromState(Matrix3d &warp_mat, const VectorXd& ssm_state) override;
80  void getStateFromWarp(VectorXd &state_vec, const Matrix3d& warp_mat) override;
81  void getLieAlgMatFromState(Matrix3d& lie_alg_mat, const VectorXd& ssm_state);
82  void getStateFromLieAlgMat(VectorXd &state_vec,
83  const Matrix3d& lie_alg_mat);
84 };
85 
86 _MTF_END_NAMESPACE
87 
88 #endif
Definition: StateSpaceModel.h:35
Definition: SSMEstimatorParams.h:9
SL3Params(const SSMParams *ssm_params, bool _normalized_init, bool _iterative_sample_mean, int _sample_mean_max_iters, double _sample_mean_eps, bool _debug_mode)
value constructor
Definition: SL3.h:23
Definition: SL3.h:8
base class for all SSMs that can be expressed by homogeneous multiplication with a 3x3 projective tra...
Definition: ProjectiveBase.h:14