MTF
ASRT.h
1 #ifndef MTF_ASRT_H
2 #define MTF_ASRT_H
3 
4 #include "ProjectiveBase.h"
5 #include "SSMEstimator.h"
6 #include "SSMEstimatorParams.h"
7 
8 _MTF_BEGIN_NAMESPACE
9 
11  bool normalized_init;
12  int pt_based_sampling;
13  bool debug_mode;
14  ASRTParams(const SSMParams *ssm_params,
15  bool _normalized_init, int pt_based_sampling,
16  bool _debug_mode);
17  ASRTParams(const ASRTParams *params = nullptr);
18 };
19 
20 class ASRTEstimator : public SSMEstimator{
21 public:
22  ASRTEstimator(int modelPoints, bool _use_boost_rng);
23 
24  int runKernel(const CvMat* m1, const CvMat* m2, CvMat* model) override;
25  bool refine(const CvMat* m1, const CvMat* m2,
26  CvMat* model, int maxIters) override;
27 protected:
28  void computeReprojError(const CvMat* m1, const CvMat* m2,
29  const CvMat* model, CvMat* error) override;
30 };
31 
32 
34 class ASRT : public ProjectiveBase{
35 public:
36  typedef ASRTParams ParamType;
37  ASRT( const ParamType *params_in = nullptr);
38  void setCorners(const CornersT& corners) override;
39  using ProjectiveBase::setCorners;
40 
41  void setState(const VectorXd &ssm_state) override;
42  void compositionalUpdate(const VectorXd& state_update) override;
43 
44  void getInitPixGrad(Matrix2Xd &ssm_grad, int pix_id) override;
45  // Gradient is independent of the current values of the warp parameters
46  void getCurrPixGrad(Matrix2Xd &ssm_grad, int pix_id) override {
47  getInitPixGrad(ssm_grad, pix_id);
48  }
49  void cmptInitPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override;
50  // Jacobian is independent of the current values of the warp parameters
51  void cmptPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override{
52  cmptInitPixJacobian(jacobian_prod, am_jacobian);
53  }
54  void cmptApproxPixJacobian(MatrixXd &jacobian_prod, const PixGradT &pix_jacobian) override;
55  void cmptWarpedPixJacobian(MatrixXd &jacobian_prod,
56  const PixGradT &pix_grad) override;
57 
58  void cmptInitPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
59  const PixGradT &pix_grad) override;
60  // Hessian is independent of the current values of the warp parameters
61  void cmptPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
62  const PixGradT &pix_grad) override {
63  cmptInitPixHessian(pix_hess_ssm, pix_hess_coord, pix_grad);
64  }
65  void cmptWarpedPixHessian(MatrixXd &d2I_dp2, const PixHessT &d2I_dw2,
66  const PixGradT &dI_dw) override;
67 
68  void estimateWarpFromCorners(VectorXd &state_update, const Matrix24d &in_corners,
69  const Matrix24d &out_corners) override;
70  void estimateWarpFromPts(VectorXd &state_update, vector<uchar> &mask,
71  const vector<cv::Point2f> &in_pts, const vector<cv::Point2f> &out_pts,
72  const EstimatorParams &est_params) override;
73  void updateGradPts(double grad_eps) override;
74  void updateHessPts(double hess_eps) override;
75 
76  void applyWarpToCorners(Matrix24d &warped_corners, const Matrix24d &orig_corners,
77  const VectorXd &state_update) override;
78  void applyWarpToPts(Matrix2Xd &warped_pts, const Matrix2Xd &orig_pts,
79  const VectorXd &state_update) override;
80 
81  void generatePerturbation(VectorXd &perturbation) override;
82 
83  void getWarpFromState(Matrix3d &warp_mat, const VectorXd& ssm_state) override;
84  void getStateFromWarp(VectorXd &state_vec, const Matrix3d& warp_mat) override;
85 
86 #ifndef DISABLE_SPI
87  bool supportsSPI() override{ return true; }
88 #endif
89 
90 private:
91  ParamType params;
92 
93  cv::Mat estimateASRT(cv::InputArray _points1, cv::InputArray _points2,
94  cv::OutputArray _mask, const SSMEstimatorParams &est_params);
95  int estimateASRT(const CvMat* in_pts, const CvMat* out_pts,
96  CvMat* __H, CvMat* mask, const SSMEstimatorParams &est_params);
97 
98 };
99 
100 
101 
102 _MTF_END_NAMESPACE
103 
104 #endif
Anisotropic Scaling, Rotation and Translation.
Definition: ASRT.h:34
Definition: StateSpaceModel.h:35
Definition: SSMEstimatorParams.h:9
Definition: ASRT.h:10
Base class for robust estimators for different SSMs adapted from CvModelEstimator2 defined in _modelt...
Definition: SSMEstimator.h:14
Definition: ASRT.h:20
base class for all SSMs that can be expressed by homogeneous multiplication with a 3x3 projective tra...
Definition: ProjectiveBase.h:14