MTF
ProjectiveBase.h
1 #ifndef MTF_PROJECTIVE_BASE_H
2 #define MTF_PROJECTIVE_BASE_H
3 
4 #include "StateSpaceModel.h"
5 
6 #include <boost/random/mersenne_twister.hpp>
7 #include <boost/random/normal_distribution.hpp>
8 
9 _MTF_BEGIN_NAMESPACE
15 
16 public:
17 
18  ProjectiveBase(const SSMParams *params);
19  virtual ~ProjectiveBase(){}
20 
21  void setCorners(const CornersT& corners) override;
22  // for the overloaded version that takes OpenCV Mat inut
23  using StateSpaceModel::setCorners;
24 
25  void setState(const VectorXd &ssm_state) override;
26  void additiveUpdate(const VectorXd& state_update) override;
27  void invertState(VectorXd& inv_state, const VectorXd& state) override;
28  void updateGradPts(double grad_eps) override;
29  void updateHessPts(double hess_eps) override;
30  void applyWarpToCorners(Matrix24d &warped_corners, const Matrix24d &orig_corners,
31  const VectorXd &state_update) override;
32  void applyWarpToPts(Matrix2Xd &warped_pts, const Matrix2Xd &orig_pts,
33  const VectorXd &state_update) override;
34  void applyWarpToPt(double &warped_x, double &warped_y, double x, double y,
35  const ProjWarpT &warp);
36 
37  void getIdentityWarp(VectorXd &identity_warp) override;
38  void composeWarps(VectorXd &composed_state, const VectorXd &state_1,
39  const VectorXd &state_2) override;
40 
41  // convert the state vector to the 3x3 warp matrix and vice versa
42  virtual void getWarpFromState(Matrix3d &warp_mat, const VectorXd& ssm_state) = 0;
43  virtual void getStateFromWarp(VectorXd &state_vec, const Matrix3d& warp_mat) = 0;
44 
45  // -------------------------------------------------------------------------- //
46  // --------------------------- Stochastic Sampler --------------------------- //
47  // -------------------------------------------------------------------------- //
48 
49  typedef boost::mt11213b SampleGenT;
50  typedef boost::normal_distribution<double> SampleDistT;
51  typedef SampleDistT::param_type DistParamT;
52 
53  std::vector<SampleGenT> rand_gen;
54  std::vector<SampleDistT> rand_dist;
55  VectorXd state_perturbation;
56 
57  void initializeSampler(const VectorXd &state_sigma,
58  const VectorXd &state_mean) override;
59  void setSampler(const VectorXd &state_sigma,
60  const VectorXd &state_mean) override;
61  void setSamplerMean(const VectorXd &mean) override;
62  void setSamplerSigma(const VectorXd &std) override;
63 
64  VectorXd getSamplerSigma() override;
65  VectorXd getSamplerMean() override;
66 
67  void additiveRandomWalk(VectorXd &perturbed_state,
68  const VectorXd &base_state) override;
69  void compositionalRandomWalk(VectorXd &perturbed_state,
70  const VectorXd &base_state) override;
71 
72  void additiveAutoRegression1(VectorXd &perturbed_state, VectorXd &perturbed_ar,
73  const VectorXd &base_state, const VectorXd &base_ar, double a = 0.5) override;
74  void compositionalAutoRegression1(VectorXd &perturbed_state, VectorXd &perturbed_ar,
75  const VectorXd &base_state, const VectorXd &base_ar, double a = 0.5) override;
76 
77  void generatePerturbation(VectorXd &perturbation) override;
78  void generatePerturbedPts(VectorXd &perturbed_pts) override;
79  void estimateMeanOfSamples(VectorXd &sample_mean,
80  const std::vector<VectorXd> &samples, int n_samples) override;
81  void getPerturbedPts(VectorXd &perturbed_pts,
82  const VectorXd &state_perturbation) override;
83  void estimateStateSigma(VectorXd &state_sigma, double pix_sigma) override;
84 
85 protected:
86 
87  ProjWarpT warp_mat, warp_update_mat;
88  ProjWarpT inv_warp_mat;
89 
90  // let N = no. of pixels and S = no. of state space parameters
91  ProjWarpT curr_warp;
92 
93  // both homogeneous versions are stored too for convenience
94  HomPtsT init_pts_hm, curr_pts_hm;
95  HomCornersT init_corners_hm, curr_corners_hm;
96 
97  PtsT norm_pts;
98  HomPtsT norm_pts_hm;
99  CornersT norm_corners;
100  HomCornersT norm_corners_hm;
101 
102  const PtsT& getNormPts() const{ return norm_pts; }
103  const HomPtsT& getHomNormPts() const{ return norm_pts_hm; }
104  const CornersT& getNormCorners() const{ return norm_corners; }
105  const HomCornersT& getHomNormCorners() const{ return norm_corners_hm; }
106 
107  // get uniformly spaced grid points corresponding to the given corners
108  void getPtsFromCorners(ProjWarpT &warp, PtsT &pts, HomPtsT &pts_hm,
109  const CornersT &corners);
110 
111 private:
112 
113  stringstream err_msg;
114 };
115 _MTF_END_NAMESPACE
116 
117 #endif
Definition: StateSpaceModel.h:35
Definition: StateSpaceModel.h:49
HomPtsT init_pts_hm
3 x 3 projective warp matrix
Definition: ProjectiveBase.h:94
base class for all SSMs that can be expressed by homogeneous multiplication with a 3x3 projective tra...
Definition: ProjectiveBase.h:14