MTF
RBF.h
1 #ifndef MTF_RBF_H
2 #define MTF_RBF_H
3 
4 #define RBF_ADDITIVE_UPDATE 0
5 #define RBF_N_CTRL_PTS 3
6 
7 #include "IlluminationModel.h"
8 
9 _MTF_BEGIN_NAMESPACE
11  bool additive_update;
13  int n_ctrl_pts_x, n_ctrl_pts_y;
15  RBFParams(ILMParams *ilm_params, bool _additive_update,
16  int _n_ctrl_pts_x, int _n_ctrl_pts_y);
18  RBFParams(const RBFParams *params = nullptr);
19 };
21 class RBF : public IlluminationModel{
22 public:
23  typedef RBFParams ParamType;
24  RBF(const ParamType *_pgb_params = nullptr);
25  virtual ~RBF(){}
26  void initialize(double *p) override{
27  Map<VectorXd>(p, state_size).fill(0);
28  }
29  int getStateSize() const override{ return state_size; };
30  void apply(double *g, const double *I, const double *p) override;
31  void invert(double *inv_p, const double *p) override;
32  void update(double *new_p, const double *old_p, const double *dp) override;
33 
34  void cmptParamJacobian(double *df_dp, const double *df_dg,
35  const double *I, const double *p) override;
36  void cmptPixJacobian(double *df_dI, const double *df_dg,
37  const double *I, const double *p) override;
38 
39  void cmptParamHessian(double *d2f_dp2, const double *d2f_dg2,
40  const double *I, const double *p) override;
41  void cmptPixHessian(double *d2f_dI2, const double *d2f_dg2,
42  const double *I, const double *p) override;
43  void cmptCrossHessian(double *d2f_dp_dI, const double *d2f_dg2,
44  const double *I, const double *p) override;
45 
46  void cmptParamHessian(double *d2f_dp2, const double *d2f_dg2,
47  const double *df_dg, const double *I, const double *p) override{
48  cmptParamHessian(d2f_dp2, d2f_dg2, I, p);
49  }
50  void cmptPixHessian(double *d2f_dI2, const double *d2f_dg2,
51  const double *df_dg, const double *I, const double *p) override{
52  cmptPixHessian(d2f_dI2, d2f_dg2, I, p);
53  }
54  void cmptCrossHessian(double *d2f_dp_dI, const double *d2f_dg2,
55  const double *df_dg, const double *I, const double *p) override;
56 
57  PixHessType getPixHessType() override;
58  void parseSamplerSigma(VectorXd &out_sigma, const VectorXd &in_sigma) override;
59  void parseSamplerMean(VectorXd &out_mean, const VectorXd &in_mean) override;
60 private:
61  ParamType params;
62  int state_size;
63  int n_ctrl_pts;
64  int region_size_x, region_size_y;
65  int bias_id;
66  MatrixX2i region_bounds_x, region_bounds_y;
67  MatrixXi ctrl_pts_idx;//used for indexing the sub region locations
68  MatrixX2d ctrl_pts;
69  MatrixXd pix_wts;
70 };
71 
72 _MTF_END_NAMESPACE
73 
74 #endif
75 
76 
77 
int n_ctrl_pts_x
no. of sub regions in horizontal and vertical directions
Definition: RBF.h:13
Definition: IlluminationModel.h:12
Illumination Model is a parametric function that transforms pixel values extracted from a patch to ac...
Definition: IlluminationModel.h:30
RBFParams(ILMParams *ilm_params, bool _additive_update, int _n_ctrl_pts_x, int _n_ctrl_pts_y)
value constructor
Definition: RBF.h:10
Radial Basis Function illumination model.
Definition: RBF.h:21
void cmptPixHessian(double *d2f_dI2, const double *d2f_dg2, const double *df_dg, const double *I, const double *p) override
d2f_dI2 = dg_dI^T*d2f_dg2*dg_dI + df_dg*d2g_dI2
Definition: RBF.h:50
void cmptParamHessian(double *d2f_dp2, const double *d2f_dg2, const double *df_dg, const double *I, const double *p) override
NULL/nullptr for d2f_dg2 implies that the corresponding matrix is identity; conversely a non negative...
Definition: RBF.h:46