MTF
SumOfAMs.h
1 #ifndef MTF_SUM_OF_AMS_H
2 #define MTF_SUM_OF_AMS_H
3 
4 #include "AppearanceModel.h"
5 
6 _MTF_BEGIN_NAMESPACE
7 
9  SumOfAMsDist(const string &_name, const AMDist *_am1,
10  const AMDist *_am2, double _am1_norm_factor, double _am2_norm_factor,
11  unsigned int _am1_dist_feat_size, unsigned int _am2_dist_feat_size);
12  double operator()(const double* a, const double* b,
13  size_t size, double worst_dist = -1) const override;
14 private:
15  const AMDist *am1, *am2;
16  double am1_norm_factor, am2_norm_factor;
17  unsigned int am1_dist_feat_size, am2_dist_feat_size;
18 };
19 
20 // Sum of AMs
21 class SumOfAMs : public AppearanceModel{
22 public:
23  typedef AMParams ParamType;
24  typedef SumOfAMsDist DistType;
25 
27  const ParamType *_params = nullptr, const int _n_channels = 1);
28  int inputType() const override{
29  return am1->inputType() == am2->inputType() ? am1->inputType() : HETEROGENEOUS_INPUT;
30  }
31  void setCurrImg(const cv::Mat &cv_img) override;
32 
33  double getLikelihood() const override{
34  return am1->getLikelihood()*am1_norm_factor +
35  am2->getLikelihood()*am2_norm_factor;
36  }
37 
38  //-------------------------------initialize functions------------------------------------//
39 
40  void initializePixVals(const PtsT& init_pts) override;
41  void initializePixGrad(const GradPtsT &warped_offset_pts) override;
42  void initializePixGrad(const PtsT &init_pts) override;
43  void initializePixHess(const PtsT& init_pts, const HessPtsT &warped_offset_pts) override;
44  void initializePixHess(const PtsT &init_pts) override;
45 
46  void initializeSimilarity() override;
47  void initializeGrad() override;
48  void initializeHess() override;
49 
50  //-----------------------------------------------------------------------------------//
51  //-------------------------------update functions------------------------------------//
52  //-----------------------------------------------------------------------------------//
53 
54  void updatePixVals(const PtsT& curr_pts) override;
55 
56  void updatePixGrad(const GradPtsT &warped_offset_pts) override;
57  void updatePixGrad(const PtsT &curr_pts) override;
58 
59  void updatePixHess(const PtsT &curr_pts) override;
60  void updatePixHess(const PtsT& curr_pts, const HessPtsT &warped_offset_pts) override;
61 
62  void updateSimilarity(bool prereq_only = true) override;
63  void updateInitGrad() override;
64  // nothing is done here since curr_grad is same as and shares memory with curr_pix_diff
65  void updateCurrGrad() override;
66 
67  void cmptInitHessian(MatrixXd &init_hessian, const MatrixXd &init_pix_jacobian) override;
68  void cmptCurrHessian(MatrixXd &curr_hessian, const MatrixXd &curr_pix_jacobian) override;
69 
70  void cmptInitHessian(MatrixXd &init_hessian, const MatrixXd &init_pix_jacobian,
71  const MatrixXd &init_pix_hessian) override;
72  void cmptCurrHessian(MatrixXd &curr_hessian, const MatrixXd &curr_pix_jacobian,
73  const MatrixXd &curr_pix_hessian) override;
74 
75  void cmptSelfHessian(MatrixXd &self_hessian, const MatrixXd &curr_pix_jacobian) override;
76  void cmptSelfHessian(MatrixXd &self_hessian, const MatrixXd &curr_pix_jacobian,
77  const MatrixXd &curr_pix_hessian) override;
78 
79  /*Support for FLANN library*/
80  VectorXd curr_feat_vec;
81  const DistType* getDistFunc() override{
82  return new DistType(name, am1->getDistFunc(),
83  am2->getDistFunc(), am1_norm_factor, am2_norm_factor,
84  am1_dist_feat_size, am2_dist_feat_size);
85  }
86  void updateDistFeat(double* feat_addr) override;
87  void initializeDistFeat() override;
88  void updateDistFeat() override;
89  const double* getDistFeat() override{ return curr_feat_vec.data(); }
90  unsigned int getDistFeatSize() override;
91 
92 protected:
93  AppearanceModel *am1, *am2;
94  double am1_norm_factor, am2_norm_factor;
95  unsigned int am1_dist_feat_size, am2_dist_feat_size;
96 };
97 
98 _MTF_END_NAMESPACE
99 
100 #endif
Definition: AMParams.h:12
double operator()(const double *a, const double *b, size_t size, double worst_dist=-1) const override
computes the distance / dissimilarity between two patches where each is codified or represented by a ...
Distance functor for FLANN.
Definition: AppearanceModel.h:40
Definition: SumOfAMs.h:21
double getLikelihood() const override
returns a normalized version of the similarity that lies between 0 and 1 and can be interpreted as th...
Definition: SumOfAMs.h:33
Definition: SumOfAMs.h:8
Similarity function that indicates how well a candidate warped patch matches the template.
Definition: AppearanceModel.h:63
int inputType() const override
return the type of OpenCV Mat image the AM requires as input; typically either CV_32FC3 or CV_32FC1 ...
Definition: SumOfAMs.h:28