MTF
PGB.h
1 #ifndef MTF_PGB_H
2 #define MTF_PGB_H
3 
4 #define PGB_ADDITIVE_UPDATE 0
5 #define PGB_N_REGIONS 3
6 
7 #include "IlluminationModel.h"
8 
9 _MTF_BEGIN_NAMESPACE
11  bool additive_update;
13  int n_regions_x, n_regions_y;
15  PGBParams(ILMParams *ilm_params, bool _additive_update,
16  int _n_regions_x, int _n_regions_y);
18  PGBParams(const PGBParams *params = nullptr);
19 };
21 class PGB : public IlluminationModel{
22 public:
23  typedef PGBParams ParamType;
24  PGB(const ParamType *_pgb_params = nullptr);
25  virtual ~PGB(){}
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  cmptCrossHessian(d2f_dp_dI, d2f_dg2, df_dg, I, p);
57  }
58 
59  PixHessType getPixHessType() override;
60  void parseSamplerSigma(VectorXd &out_sigma, const VectorXd &in_sigma) override;
61  void parseSamplerMean(VectorXd &out_mean, const VectorXd &in_mean) override;
62 
63 private:
64  ParamType params;
65  int state_size;
66  int n_regions;
67  int region_size_x, region_size_y;
68  int bias_id;
69  MatrixX2i region_bounds_x, region_bounds_y;
70  MatrixX4i region_bounds;
71  MatrixXi region_idx;//used for indexing the sub region locations
72 
73  void showSubRegions(double *img_data);
74 
75 
76 };
77 
78 _MTF_END_NAMESPACE
79 
80 #endif
81 
82 
83 
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: PGB.h:50
Definition: IlluminationModel.h:12
Illumination Model is a parametric function that transforms pixel values extracted from a patch to ac...
Definition: IlluminationModel.h:30
Piecewise Gain and Bias illumination model.
Definition: PGB.h:21
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: PGB.h:46
Definition: PGB.h:10
PGBParams(ILMParams *ilm_params, bool _additive_update, int _n_regions_x, int _n_regions_y)
value constructor
int n_regions_x
no. of sub regions in horizontal and vertical directions
Definition: PGB.h:13
void cmptCrossHessian(double *d2f_dp_dI, const double *d2f_dg2, const double *df_dg, const double *I, const double *p) override
d2f_dp_dI = dg_dp^T*d2f_dg2*dg_dI + df_dg*d2g_dpdI
Definition: PGB.h:54