MTF
TPS.h
1 #ifndef MTF_TPS_H
2 #define MTF_TPS_H
3 
4 #define TPS_DIRECT_SAMPLES 0
5 #define TPS_NORMALIZED_BASIS false
6 #define TPS_N_CONTROL_PTS 2
7 #define TPS_DEBUG_MODE 0
8 
9 #include "StateSpaceModel.h"
10 
11 _MTF_BEGIN_NAMESPACE
12 
14  int control_pts_resx, control_pts_resy;
15  // resolution of control point grid
16  // use normalized unit square points/corners as the initial points/corners
17  bool normalized_init;
18  // generate samples by ading perturbations directly to the corners
19  // and using DLT method to estimate the corresponding warp
20  bool direct_samples;
21  bool debug_mode;
22 
23  TPSParams(const SSMParams *ssm_params, bool _normalized_init,
24  bool _direct_samples, bool _debug_mode);
25  TPSParams(TPSParams *params = nullptr);
26 };
28 class TPS : public StateSpaceModel{
29 public:
30  typedef TPSParams ParamType;
31  ParamType params;
32 
33  TPS(TPSParams *params_in=nullptr);
34  void compositionalUpdate(const VectorXd& state_update) override;
35 
36  void cmptInitPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override;
37  void cmptPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override;
38  void cmptWarpedPixJacobian(MatrixXd &jacobian_prod,
39  const PixGradT &pix_jacobian) override;
40 
41  void cmptApproxPixJacobian(MatrixXd &jacobian_prod,
42  const PixGradT &pix_jacobian) override;
43  void estimateWarpFromCorners(VectorXd &state_update, const CornersT &in_corners,
44  const CornersT &out_corners) override;
45  void cmptInitPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
46  const PixGradT &pix_grad) override;
47 
48  void cmptWarpedPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
49  const PixGradT &pix_grad) override;
50  void cmptApproxPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
51  const PixGradT &pix_grad) override;
52  void cmptPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
53  const PixGradT &pix_grad) override;
54 
55  void setCorners(const CornersT& corners) override;
56  void estimateWarpFromPts(VectorXd &state_update, vector<uchar> &mask,
57  const vector<cv::Point2f> &in_pts, const vector<cv::Point2f> &out_pts,
58  int estimation_method, double ransac_reproj_thresh) override;
59 
60  void invertState(VectorXd& inv_state, const VectorXd& state) override;
61 
62  void updateGradPts(double grad_eps) override;
63  void updateHessPts(double hess_eps) override;
64 
65  bool supportsSPI() override{ return true; }
66 
67  void getInitPixGrad(Matrix2Xd &jacobian_prod, int pix_id) override;
68  void getCurrPixGrad(Matrix2Xd &jacobian_prod, int pix_id) override;
69 
70  void generatePerturbation(VectorXd &state_update) override;
71 
72  void getWarpFromState(Matrix3d &warp_mat, const VectorXd& ssm_state) override;
73  void getStateFromWarp(VectorXd &state_vec, const Matrix3d& warp_mat) override;
74 
75 private:
76  PtsT norm_pts;
77  CornersT norm_corners;
78  PtsT corner_control_pts;
79  MatrixX2dM tps_params;
80  VectorXi ctrl_idx, ctrl_idy;
81 
82  CornersT rand_d;
83  Vector2d rand_t;
84  CornersT disturbed_corners;
85 };
86 
87 _MTF_END_NAMESPACE
88 
89 #endif
Definition: StateSpaceModel.h:35
Thin plate splines.
Definition: TPS.h:28
Definition: StateSpaceModel.h:49
Definition: TPS.h:13