MTF
SSIM.h
1 #ifndef MTF_SSIM_H
2 #define MTF_SSIM_H
3 
4 #include "AppearanceModel.h"
5 
6 _MTF_BEGIN_NAMESPACE
7 
9  double k1, k2;
10 
11  SSIMParams(const AMParams *am_params,
12  double _k1, double _k2);
13  SSIMParams(const SSIMParams *params = nullptr);
14 };
15 
16 struct SSIMDist : AMDist{
17  typedef double ElementType;
18  typedef double ResultType;
19  SSIMDist(const string &_name, const double _c1, const double _c2) :
20  AMDist(_name), c1(_c1), c2(_c2){}
21  double operator()(const double* a, const double* b,
22  size_t size, double worst_dist = -1) const override;
23 private:
24  const double c1, c2;
25 };
26 
27 
28 // Structural Similarity
29 class SSIM : public AppearanceModel{
30 public:
31  typedef SSIMParams ParamType;
32  typedef SSIMDist DistType;
33 
34  SSIM(const ParamType *ssim_params = nullptr, const int _n_channels = 1);
35 
36  double getLikelihood() const override;
37 
38  //-------------------------------initialize functions------------------------------------//
39  void initializeSimilarity() override;
40  void initializeGrad() override;
41  void initializeHess() override{ hess.resize(patch_size); }
42 
43  //-----------------------------------------------------------------------------------//
44  //-------------------------------update functions------------------------------------//
45  //-----------------------------------------------------------------------------------//
46  void updateSimilarity(bool prereq_only = true) override;
47  void updateInitGrad() override;
48  // nothing is done here since curr_grad is same as and shares memory with curr_pix_diff
49  void updateCurrGrad() override;
50 
51  void cmptInitHessian(MatrixXd &init_hessian, const MatrixXd &init_pix_jacobian) override;
52  void cmptCurrHessian(MatrixXd &curr_hessian, const MatrixXd &curr_pix_jacobian) override;
53 
54  void cmptInitHessian(MatrixXd &init_hessian, const MatrixXd &init_pix_jacobian,
55  const MatrixXd &init_pix_hessian) override;
56  void cmptCurrHessian(MatrixXd &curr_hessian, const MatrixXd &curr_pix_jacobian,
57  const MatrixXd &curr_pix_hessian) override;
58 
59  void cmptSelfHessian(MatrixXd &self_hessian, const MatrixXd &curr_pix_jacobian) override;
60  void cmptSelfHessian(MatrixXd &self_hessian, const MatrixXd &curr_pix_jacobian,
61  const MatrixXd &curr_pix_hessian) override{
62  cmptSelfHessian(self_hessian, curr_pix_jacobian);
63  }
64 
65  /*Support for FLANN library*/
66  const DistType* getDistFunc() override{
67  return new DistType(name, c1, c2);
68  }
69  void updateDistFeat(double* feat_addr) override;
70  void initializeDistFeat() override;
71  void updateDistFeat() override;
72  const double* getDistFeat() override{ return curr_feat_vec.data(); }
73  unsigned int getDistFeatSize() override;
74 
75 protected:
76  ParamType params;
77 
79  double init_pix_mean, init_pix_var, init_pix_mean2;
81  double curr_pix_mean, curr_pix_var, curr_pix_mean2;
82 
83  double c1, c2;
84  double a, b, c, d;
85  double cross_pix_var;
86  double cd;
87 
88  VectorXd hess;
89  VectorXd init_pix_vals_cntr, curr_pix_vals_cntr;
90 
91  RowVectorXd init_grad_vec, curr_grad_vec;
92  double init_grad_scal, curr_grad_scal;
93 
94  VectorXd curr_feat_vec;
95 };
96 
97 _MTF_END_NAMESPACE
98 
99 #endif
double curr_pix_mean
mean, variance and standard deviation of the current pixel values
Definition: SSIM.h:81
Definition: AMParams.h:12
Definition: SSIM.h:16
void initializeHess() override
even though the Hessian of the error norm w.r.t.
Definition: SSIM.h:41
Distance functor for FLANN.
Definition: AppearanceModel.h:40
Definition: SSIM.h:8
Definition: SSIM.h:29
Similarity function that indicates how well a candidate warped patch matches the template.
Definition: AppearanceModel.h:63
double init_pix_mean
mean, variance and standard deviation of the initial pixel values
Definition: SSIM.h:79