MTF
Affine.h
1 #ifndef MTF_AFFINE_H
2 #define MTF_AFFINE_H
3 
4 #include "ProjectiveBase.h"
5 
6 _MTF_BEGIN_NAMESPACE
7 
9  bool normalized_init;
10  int pt_based_sampling;
11  bool debug_mode;
12  AffineParams(const SSMParams *ssm_params,
13  bool _normalized_init, int _pt_based_sampling,
14  bool _debug_mode);
15  AffineParams(const AffineParams *params = nullptr);
16 };
17 
18 class Affine : public ProjectiveBase{
19 public:
20 
21  typedef AffineParams ParamType;
22 
23  Affine( const ParamType *params_in = nullptr);
24 
25  using ProjectiveBase::setCorners;
26  void setCorners(const CornersT &corners) override;
27 
28  void getInitPixGrad(Matrix2Xd &ssm_grad, int pix_id) override;
29  // Gradient is independent of the current values of the warp parameters
30  void getCurrPixGrad(Matrix2Xd &ssm_grad, int pix_id) override {
31  getInitPixGrad(ssm_grad, pix_id);
32  }
33  void cmptInitPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override;
34  // Jacobian is independent of the current values of the warp parameters
35  void cmptPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override{
36  cmptInitPixJacobian(jacobian_prod, am_jacobian);
37  }
38  void cmptApproxPixJacobian(MatrixXd &jacobian_prod,
39  const PixGradT &pix_jacobian) override;
40  void cmptWarpedPixJacobian(MatrixXd &jacobian_prod,
41  const PixGradT &pix_jacobian) override;
42 
43  void cmptInitPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
44  const PixGradT &pix_grad) override;
45  // Hessian is independent of the current values of the warp parameters
46  void cmptPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
47  const PixGradT &pix_grad) override {
48  cmptInitPixHessian(pix_hess_ssm, pix_hess_coord, pix_grad);
49  }
50  void cmptWarpedPixHessian(MatrixXd &_d2I_dp2, const PixHessT &_d2I_dw2,
51  const PixGradT &dI_dw) override;
52 
53  void compositionalUpdate(const VectorXd& state_update) override;
54  void estimateWarpFromCorners(VectorXd &state_update, const CornersT &in_corners,
55  const CornersT &out_corners) override;
56 
57  void estimateWarpFromPts(VectorXd &state_update, vector<uchar> &mask,
58  const vector<cv::Point2f> &in_pts, const vector<cv::Point2f> &out_pts,
59  const EstimatorParams &est_params) override;
60 
61  void invertState(VectorXd& inv_state, const VectorXd& state) override;
62  void updateGradPts(double grad_eps) override;
63  void updateHessPts(double hess_eps) override;
64 
65  void setState(const VectorXd &ssm_state) override;
66  void applyWarpToCorners(CornersT &warped_corners, const CornersT &orig_corners,
67  const VectorXd &state_update) override;
68  void applyWarpToPts(Matrix2Xd &warped_pts, const Matrix2Xd &orig_pts,
69  const VectorXd &state_update) override;
70 
71  void getWarpFromState(Matrix3d &warp_mat, const VectorXd& ssm_state) override;
72  void getStateFromWarp(VectorXd &state_vec, const Matrix3d& warp_mat) override;
73 
74  void generatePerturbation(VectorXd &perturbation) override;
75  void compositionalRandomWalk(VectorXd &perturbed_state,
76  const VectorXd &base_state) override;
77  void additiveRandomWalk(VectorXd &perturbed_state,
78  const VectorXd &base_state) override;
79  void additiveAutoRegression1(VectorXd &perturbed_state, VectorXd &perturbed_ar,
80  const VectorXd &base_state, const VectorXd &base_ar, double a = 0.5) override;
81 
82 #ifndef DISABLE_SPI
83  bool supportsSPI() override{ return true; }
84 #endif
85 
86 protected:
87  ParamType params;
88 
89  Vector6d stateToGeom(const Vector6d &state);
90  Vector6d geomToState(const Vector6d &geom);
91 
92 };
93 
94 _MTF_END_NAMESPACE
95 
96 #endif
Definition: StateSpaceModel.h:35
Definition: Affine.h:8
Definition: SSMEstimatorParams.h:9
Definition: Affine.h:18
base class for all SSMs that can be expressed by homogeneous multiplication with a 3x3 projective tra...
Definition: ProjectiveBase.h:14