MTF
IlluminationModel.h
1 #ifndef MTF_ILLUMINATION_MODEL_H
2 #define MTF_ILLUMINATION_MODEL_H
3 
4 #include "mtf/Macros/common.h"
5 #include "mtf/Utilities/excpUtils.h"
6 
7 #define ilm_not_implemeted(func_name) \
8  throw mtf::utils::FunctonNotImplemented(cv::format("%s :: %s :: Not implemented Yet", name.c_str(), #func_name))
9 
10 _MTF_BEGIN_NAMESPACE
11 
12 struct ILMParams{
14  int resx, resy;
15  ILMParams(int _resx, int _resy) :resx(_resx), resy(_resy){}
16  ILMParams(const ILMParams *ilm_params = nullptr) :
17  resx(MTF_RES), resy(MTF_RES){
18  if(ilm_params){
19  resx = ilm_params->resx;
20  resy = ilm_params->resy;
21  }
22  }
23 };
24 
31 
32 public:
33  enum class PixHessType{ Constant, Diagonal, General };
34  string name;
35  bool apply_on_init;
36  IlluminationModel(const ILMParams *ilm_params):
37  resx(MTF_RES), resy(MTF_RES), d2f_dg2_type(PixHessType::General){
38  if(ilm_params) {
39  if(ilm_params->resx <= 0 || ilm_params->resy <= 0) {
40  throw utils::InvalidArgument("IlluminationModel::Invalid sampling resolution provided");
41  }
42  resx = ilm_params->resx;
43  resy = ilm_params->resy;
44  }
45  n_pix = resx*resy;
46  }
47  virtual ~IlluminationModel(){}
48  virtual int getStateSize() const = 0;
49  virtual void initialize(double *p){}
50  virtual void apply(double *g, const double *I, const double *p) = 0;
51  virtual void invert(double *inv_p, const double *p) = 0;
52  virtual void update(double *new_p, const double *old_p, const double *dp) = 0;
56  virtual void cmptParamJacobian(double *df_dp, const double *df_dg,
57  const double *I, const double *p) = 0;
58  virtual void cmptPixJacobian(double *df_dI, const double *df_dg,
59  const double *I, const double *p) = 0;
68  virtual void cmptParamHessian(double *d2f_dp2, const double *d2f_dg2,
70  const double *df_dg, const double *I, const double *p) = 0;
72  virtual void cmptPixHessian(double *d2f_dI2, const double *d2f_dg2,
73  const double *df_dg, const double *I, const double *p) = 0;
75  virtual void cmptCrossHessian(double *d2f_dp_dI, const double *d2f_dg2,
76  const double *df_dg, const double *I, const double *p) = 0;
80  virtual void cmptParamHessian(double *d2f_dp2, const double *d2f_dg2,
82  const double *I, const double *p) = 0;
84  virtual void cmptPixHessian(double *d2f_dI2, const double *d2f_dg2,
85  const double *I, const double *p) = 0;
87  virtual void cmptCrossHessian(double *d2f_dp_dI, const double *d2f_dg2,
88  const double *I, const double *p) = 0;
89 
90  virtual void setPixHessType(PixHessType _d2f_dg2_type){
91  d2f_dg2_type = _d2f_dg2_type;
92  }
93  virtual PixHessType getPixHessType() = 0;
94  virtual void parseSamplerSigma(VectorXd &out_sigma, const VectorXd &in_sigma) = 0;
95  virtual void parseSamplerMean(VectorXd &out_mean, const VectorXd &in_mean) = 0;
96 
97 protected:
98 
99  int resx, resy, n_pix;
100  PixHessType d2f_dg2_type;
101 };
102 
103 _MTF_END_NAMESPACE
104 
105 #endif
106 
107 
108 
int resx
horizontal and vertical sampling resolutions
Definition: IlluminationModel.h:14
Definition: IlluminationModel.h:12
Illumination Model is a parametric function that transforms pixel values extracted from a patch to ac...
Definition: IlluminationModel.h:30