MTF
Similitude.h
1 #ifndef MTF_SIMILITUDE_H
2 #define MTF_SIMILITUDE_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  bool geom_sampling;
13  int pt_based_sampling;
14  int n_model_pts;
15  bool debug_mode;
16  SimilitudeParams(const SSMParams *ssm_params,
17  bool _normalized_init, bool _geom_sampling,
18  int pt_based_sampling, int _n_model_pts,
19  bool _debug_mode);
20  SimilitudeParams(const SimilitudeParams *params = nullptr);
21 };
22 
24 public:
25  SimilitudeEstimator(int modelPoints, bool _use_boost_rng);
26 
27  int runKernel(const CvMat* m1, const CvMat* m2, CvMat* model) override;
28  bool refine(const CvMat* m1, const CvMat* m2,
29  CvMat* model, int maxIters) override;
30 protected:
31  void computeReprojError(const CvMat* m1, const CvMat* m2,
32  const CvMat* model, CvMat* error) override;
33 };
34 
35 class Similitude : public ProjectiveBase{
36 public:
38  Similitude( const ParamType *params_in = nullptr);
39  void setCorners(const CornersT& corners) override;
40  using ProjectiveBase::setCorners;
41 
42  void setState(const VectorXd &ssm_state) override;
43  void compositionalUpdate(const VectorXd& state_update) override;
44 
45  void getInitPixGrad(Matrix2Xd &ssm_grad, int pix_id) override;
46  // Gradient is independent of the current values of the warp parameters
47  void getCurrPixGrad(Matrix2Xd &ssm_grad, int pix_id) override {
48  getInitPixGrad(ssm_grad, pix_id);
49  }
50  void cmptInitPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override;
51  // Jacobian is independent of the current values of the warp parameters
52  void cmptPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override{
53  cmptInitPixJacobian(jacobian_prod, am_jacobian);
54  }
55  void cmptApproxPixJacobian(MatrixXd &jacobian_prod, const PixGradT &pix_jacobian) override;
56  void cmptWarpedPixJacobian(MatrixXd &jacobian_prod,
57  const PixGradT &pix_grad) override;
58 
59  void cmptInitPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
60  const PixGradT &pix_grad) override;
61  // Hessian is independent of the current values of the warp parameters
62  void cmptPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
63  const PixGradT &pix_grad) override {
64  cmptInitPixHessian(pix_hess_ssm, pix_hess_coord, pix_grad);
65  }
66  void cmptWarpedPixHessian(MatrixXd &d2I_dp2, const PixHessT &d2I_dw2,
67  const PixGradT &dI_dw) override;
68 
69  void estimateWarpFromCorners(VectorXd &state_update, const Matrix24d &in_corners,
70  const Matrix24d &out_corners) override;
71  void estimateWarpFromPts(VectorXd &state_update, vector<uchar> &mask,
72  const vector<cv::Point2f> &in_pts, const vector<cv::Point2f> &out_pts,
73  const EstimatorParams &est_params) override;
74  void updateGradPts(double grad_eps) override;
75  void updateHessPts(double hess_eps) override;
76 
77  void applyWarpToCorners(Matrix24d &warped_corners, const Matrix24d &orig_corners,
78  const VectorXd &state_update) override;
79  void applyWarpToPts(Matrix2Xd &warped_pts, const Matrix2Xd &orig_pts,
80  const VectorXd &state_update) override;
81 
82  void generatePerturbation(VectorXd &perturbation) override;
83  // use Random Walk model to generate perturbed sample
84  void additiveRandomWalk(VectorXd &perturbed_state,
85  const VectorXd &base_state) override;
86  // use first order Auto Regressive model to generate perturbed sample
87  void additiveAutoRegression1(VectorXd &perturbed_state, VectorXd &perturbed_ar,
88  const VectorXd &base_state, const VectorXd &base_ar, double a = 0.5) override;
89  void compositionalRandomWalk(VectorXd &perturbed_state,
90  const VectorXd &base_state) override;
91 
92  void getWarpFromState(Matrix3d &warp_mat, const VectorXd& ssm_state) override;
93  void getStateFromWarp(VectorXd &state_vec, const Matrix3d& warp_mat) override;
94 
95 #ifndef DISABLE_SPI
96  bool supportsSPI() override{ return true; }
97 #endif
98 
99 private:
100  ParamType params;
101 
102  Vector4d geomToState(const Vector4d &geom);
103  Vector4d stateToGeom(const Vector4d &est);
104 
105  cv::Mat estimateSimilitude(cv::InputArray _points1, cv::InputArray _points2,
106  cv::OutputArray _mask, const SSMEstimatorParams &est_params);
107  int estimateSimilitude(const CvMat* in_pts, const CvMat* out_pts,
108  CvMat* __H, CvMat* mask, const SSMEstimatorParams &est_params);
109 
110 };
111 
112 
113 
114 _MTF_END_NAMESPACE
115 
116 #endif
Definition: StateSpaceModel.h:35
Definition: Similitude.h:23
Definition: Similitude.h:35
Definition: SSMEstimatorParams.h:9
Base class for robust estimators for different SSMs adapted from CvModelEstimator2 defined in _modelt...
Definition: SSMEstimator.h:14
Definition: Similitude.h:10
base class for all SSMs that can be expressed by homogeneous multiplication with a 3x3 projective tra...
Definition: ProjectiveBase.h:14