MTF
LieIsometry.h
1 #ifndef MTF_LIE_ISOMETRY_H
2 #define MTF_LIE_ISOMETRY_H
3 
4 #define VALIDATE_LIE_ISO_WARP(warp) \
5  assert(warp.determinant() == 1.0);
6 
7 #define LISO_DEBUG_MODE 0
8 #define LISO_INIT_AS_BASIS 0
9 
10 #include "ProjectiveBase.h"
11 
12 _MTF_BEGIN_NAMESPACE
13 
15  bool debug_mode;
16  bool init_as_basis;
17 
19  LieIsometryParams( bool _debug_mode, bool _init_as_basis) : c(_c),
20  debug_mode(_debug_mode), init_as_basis(_init_as_basis){}
22  LieIsometryParams(LieIsometryParams *params = nullptr) :
23  debug_mode(LISO_DEBUG_MODE),
24  init_as_basis(LISO_INIT_AS_BASIS){
25  if(params){
26  c = params->c;
27  debug_mode = params->debug_mode;
28  init_as_basis = params->init_as_basis;
29  }
30  }
31 };
32 
33 class LieIsometry : public ProjectiveBase{
34 public:
36 
37  LieIsometry( LieIsometryParams *params_in = nullptr);
38 
39  void compositionalUpdate(const VectorXd& state_update) override;
40 
41  void cmptInitPixJacobian(MatrixXd &jacobian_prod, const PixGradT &pix_jacobian) override;
42  void cmptPixJacobian(MatrixXd &jacobian_prod, const PixGradT &pix_jacobian) override;
43  void cmptApproxPixJacobian(MatrixXd &jacobian_prod,
44  const PixGradT &pix_jacobian) override;
45 
46  void estimateWarpFromCorners(VectorXd &state_update, const Matrix24d &in_corners,
47  const Matrix24d &out_corners) override;
48 
49  void estimateWarpFromPts(VectorXd &state_update, vector<uchar> &mask,
50  const vector<cv::Point2f> &in_pts, const vector<cv::Point2f> &out_pts,
51  int estimation_method, double ransac_reproj_thresh) override;
52 
53  void invertState(VectorXd& inv_state, const VectorXd& state) override;
54 
55  void updateGradPts(double grad_eps) override;
56  void updateHessPts(double hess_eps) override;
57 
58  void applyWarpToCorners(Matrix24d &warped_corners, const Matrix24d &orig_corners,
59  const VectorXd &state_update) override;
60  void applyWarpToPts(Matrix2Xd &warped_pts, const Matrix2Xd &orig_pts,
61  const VectorXd &state_update) override;
62 
63  void getWarpFromState(Matrix3d &warp_mat, const VectorXd& ssm_state) override;
64  void getStateFromWarp(VectorXd &state_vec, const Matrix3d& warp_mat) override;
65 
66 protected:
67  ParamType params;
68 
69  Matrix3d lieAlgBasis[3];
70  RowVector3d zero_vec;
71  Matrix3d lie_alg_mat;
72 };
73 
74 _MTF_END_NAMESPACE
75 
76 #endif
Definition: LieIsometry.h:33
LieIsometryParams(LieIsometryParams *params=nullptr)
copy constructor
Definition: LieIsometry.h:22
LieIsometryParams(bool _debug_mode, bool _init_as_basis)
value constructor
Definition: LieIsometry.h:19
Definition: LieIsometry.h:14
base class for all SSMs that can be expressed by homogeneous multiplication with a 3x3 projective tra...
Definition: ProjectiveBase.h:14