MTF
Homography.h
1 #ifndef MTF_HOMOGRAPHY_H
2 #define MTF_HOMOGRAPHY_H
3 
4 #include "ProjectiveBase.h"
5 
6 _MTF_BEGIN_NAMESPACE
7 
9  // use normalized unit square points/corners as the initial points/corners
10  bool normalized_init;
11  // generate samples by ading perturbations directly to the corners
12  // and using DLT method to estimate the corresponding warp
13  bool corner_based_sampling;
14  bool debug_mode;
15 
16  HomographyParams(const SSMParams *ssm_params,
17  bool _normalized_init,
18  bool _corner_based_sampling, bool _debug_mode);
19  HomographyParams(const HomographyParams *params = nullptr);
20 };
21 
22 class Homography : public ProjectiveBase{
23 public:
24 
26  using ProjectiveBase::setCorners;
27 
28  Homography( const ParamType *params_in = nullptr);
29  void compositionalUpdate(const VectorXd& state_update) override;
30 
31  void cmptInitPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override;
32  void cmptPixJacobian(MatrixXd &jacobian_prod, const PixGradT &am_jacobian) override;
33  void cmptWarpedPixJacobian(MatrixXd &jacobian_prod,
34  const PixGradT &pix_jacobian) override;
35 
36  void cmptApproxPixJacobian(MatrixXd &jacobian_prod,
37  const PixGradT &pix_jacobian) override;
38  void estimateWarpFromCorners(VectorXd &state_update, const CornersT &in_corners,
39  const CornersT &out_corners) override;
40  void cmptInitPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
41  const PixGradT &pix_grad) override;
42 
43  void cmptWarpedPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
44  const PixGradT &pix_grad) override;
45  void cmptWarpedPixHessian2(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
46  const PixGradT &pix_grad);
47  void cmptApproxPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
48  const PixGradT &pix_grad) override;
49  void cmptPixHessian(MatrixXd &pix_hess_ssm, const PixHessT &pix_hess_coord,
50  const PixGradT &pix_grad) override;
51 
52  void setCorners(const CornersT& corners) override;
53  void estimateWarpFromPts(VectorXd &state_update, vector<uchar> &mask,
54  const vector<cv::Point2f> &in_pts, const vector<cv::Point2f> &out_pts,
55  const EstimatorParams &est_params) override;
56 
57  void invertState(VectorXd& inv_state, const VectorXd& state) override;
58 
59  void updateGradPts(double grad_eps) override;
60  void updateHessPts(double hess_eps) override;
61 
62  void getInitPixGrad(Matrix2Xd &jacobian_prod, int pix_id) override;
63  void getCurrPixGrad(Matrix2Xd &jacobian_prod, int pix_id) override;
64 
65  void generatePerturbation(VectorXd &state_update) override;
66  void compositionalRandomWalk(VectorXd &perturbed_state,
67  const VectorXd &base_state) override;
68  void compositionalAutoRegression1(VectorXd &perturbed_state, VectorXd &perturbed_ar,
69  const VectorXd &base_state, const VectorXd &base_ar, double a = 0.5) 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 #ifndef DISABLE_SPI
75  bool supportsSPI() override{ return true; }
76 #endif
77 
78 private:
79  ParamType params;
80 
81  CornersT rand_d;
82  Vector2d rand_t;
83  CornersT disturbed_corners;
84 };
85 
86 _MTF_END_NAMESPACE
87 
88 #endif
Definition: Homography.h:22
Definition: StateSpaceModel.h:35
Definition: Homography.h:8
Definition: SSMEstimatorParams.h:9
base class for all SSMs that can be expressed by homogeneous multiplication with a 3x3 projective tra...
Definition: ProjectiveBase.h:14