Visual Servoing Platform  version 3.3.0
vpTemplateTrackerMI.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Example of template tracking.
33  *
34  * Authors:
35  * Amaury Dame
36  * Aurelien Yol
37  * Fabien Spindler
38  *
39  *****************************************************************************/
40 #ifndef vpTemplateTrackerMI_hh
41 #define vpTemplateTrackerMI_hh
42 
43 #include <visp3/core/vpConfig.h>
44 
45 #include <visp3/core/vpImageFilter.h>
46 #include <visp3/tt/vpTemplateTracker.h>
47 #include <visp3/tt/vpTemplateTrackerHeader.h>
48 
53 class VISP_EXPORT vpTemplateTrackerMI : public vpTemplateTracker
54 {
55 public:
57  typedef enum {
58  HESSIAN_NONSECOND = -1,
63  HESSIAN_NEW
64  } vpHessienApproximationType;
65 
67  typedef enum { USE_HESSIEN_NORMAL, USE_HESSIEN_DESIRE, USE_HESSIEN_BEST_COND } vpHessienType;
68 
70  typedef enum { BSPLINE_THIRD_ORDER = 3, BSPLINE_FOURTH_ORDER = 4 } vpBsplineType;
71 
72 protected:
75  double lambda;
76 
77  double *temp;
78  double *Prt;
79  double *dPrt;
80  double *Pt;
81  double *Pr;
82  double *d2Prt;
83  double *PrtTout;
84  double *dprtemp;
85 
86  double *PrtD;
87  double *dPrtD;
89 
90  int bspline;
91  // Nombre de couleur concidere dans l'histogramme
92  int Nc;
93  int Ncb;
94 
98 
101 
104 
107 
108  // Internal vars for computeHessienNormalized()
109  std::vector<double> m_du;
110  std::vector<double> m_dv;
111  std::vector<double> m_A;
112  std::vector<double> m_dB;
113  std::vector< std::vector<double> > m_d2u;
114  std::vector< std::vector<double> > m_d2v;
115  std::vector< std::vector<double> > m_dA;
116 
117 protected:
118  void computeGradient();
119  void computeHessien(vpMatrix &H);
120  void computeHessienNormalized(vpMatrix &H);
121  void computeMI(double &MI);
122  void computeProba(int &nbpoint);
123 
124  double getCost(const vpImage<unsigned char> &I, const vpColVector &tp);
125  double getCost(const vpImage<unsigned char> &I) { return getCost(I, p); }
126  double getNormalizedCost(const vpImage<unsigned char> &I, const vpColVector &tp);
127  double getNormalizedCost(const vpImage<unsigned char> &I) { return getNormalizedCost(I, p); }
128  virtual void initHessienDesired(const vpImage<unsigned char> &I) = 0;
129  virtual void trackNoPyr(const vpImage<unsigned char> &I) = 0;
130  void zeroProbabilities();
131 
132  // private:
133  //#ifndef DOXYGEN_SHOULD_SKIP_THIS
134  // vpTemplateTrackerMI(const vpTemplateTrackerMI &)
135  // : vpTemplateTracker(), hessianComputation(USE_HESSIEN_NORMAL),
136  // ApproxHessian(HESSIAN_0), lambda(0),
137  // temp(NULL), Prt(NULL), dPrt(NULL), Pt(NULL), Pr(NULL), d2Prt(NULL),
138  // PrtTout(NULL), dprtemp(NULL), PrtD(NULL), dPrtD(NULL),
139  // influBspline(0), bspline(0), Nc(0), Ncb(0), d2Ix(), d2Iy(), d2Ixy(),
140  // MI_preEstimation(0), MI_postEstimation(0), NMI_preEstimation(0),
141  // NMI_postEstimation(0), covarianceMatrix(), computeCovariance(false)
142  // {
143  // throw vpException(vpException::functionNotImplementedError, "Not
144  // implemented!");
145  // }
146  // vpTemplateTrackerMI &operator=(const vpTemplateTrackerMI &){
147  // throw vpException(vpException::functionNotImplementedError, "Not
148  // implemented!"); return *this;
149  // }
150  //#endif
151 
152 public:
153  // constructeur
156  : vpTemplateTracker(), hessianComputation(USE_HESSIEN_NORMAL), ApproxHessian(HESSIAN_0), lambda(0), temp(NULL),
157  Prt(NULL), dPrt(NULL), Pt(NULL), Pr(NULL), d2Prt(NULL), PrtTout(NULL), dprtemp(NULL), PrtD(NULL), dPrtD(NULL),
158  influBspline(0), bspline(0), Nc(0), Ncb(0), d2Ix(), d2Iy(), d2Ixy(), MI_preEstimation(0), MI_postEstimation(0),
159  NMI_preEstimation(0), NMI_postEstimation(0), covarianceMatrix(), computeCovariance(false),
160  m_du(), m_dv(), m_A(), m_dB(), m_d2u(), m_d2v(), m_dA()
161  {
162  }
164  virtual ~vpTemplateTrackerMI();
165  vpMatrix getCovarianceMatrix() const { return covarianceMatrix; }
166  double getMI() const { return MI_postEstimation; }
167  double getMI(const vpImage<unsigned char> &I, int &nc, const int &bspline, vpColVector &tp);
168  double getMI256(const vpImage<unsigned char> &I, const vpColVector &tp);
169  double getNMI() const { return NMI_postEstimation; }
170  // initialisation du Hessien en position desiree
171  void setApprocHessian(vpHessienApproximationType approx) { ApproxHessian = approx; }
172  void setCovarianceComputation(const bool &flag) { computeCovariance = flag; }
173  void setHessianComputation(vpHessienType type) { hessianComputation = type; }
174  void setBspline(const vpBsplineType &newbs);
175  void setLambda(double _l) { lambda = _l; }
176  void setNc(int newNc);
177 };
178 
179 #endif
vpTemplateTrackerMI::HESSIAN_YOUCEF
@ HESSIAN_YOUCEF
Definition: vpTemplateTrackerMI.h:61
vpTemplateTrackerMI::m_du
std::vector< double > m_du
Definition: vpTemplateTrackerMI.h:109
vpTemplateTrackerWarp
Definition: vpTemplateTrackerWarp.h:58
vpTemplateTrackerMI::computeCovariance
bool computeCovariance
Definition: vpTemplateTrackerMI.h:106
vpTemplateTrackerMI::influBspline
int influBspline
Definition: vpTemplateTrackerMI.h:88
vpTemplateTrackerMI::vpHessienType
vpHessienType
Definition: vpTemplateTrackerMI.h:67
vpTemplateTrackerMI::getNMI
double getNMI() const
Definition: vpTemplateTrackerMI.h:169
vpTemplateTrackerMI::setLambda
void setLambda(double _l)
Definition: vpTemplateTrackerMI.h:175
vpTemplateTrackerMI::HESSIAN_EXACT
@ HESSIAN_EXACT
Definition: vpTemplateTrackerMI.h:62
vpTemplateTrackerMI::m_dA
std::vector< std::vector< double > > m_dA
Definition: vpTemplateTrackerMI.h:115
vpTemplateTrackerMI
Definition: vpTemplateTrackerMI.h:53
vpTemplateTrackerMI::HESSIAN_0
@ HESSIAN_0
Definition: vpTemplateTrackerMI.h:59
vpTemplateTrackerMI::MI_postEstimation
double MI_postEstimation
Definition: vpTemplateTrackerMI.h:100
vpTemplateTrackerMI::NMI_postEstimation
double NMI_postEstimation
Definition: vpTemplateTrackerMI.h:103
vpTemplateTrackerMI::d2Prt
double * d2Prt
Definition: vpTemplateTrackerMI.h:82
vpTemplateTrackerMI::HESSIAN_d2I
@ HESSIAN_d2I
Definition: vpTemplateTrackerMI.h:60
vpTemplateTrackerMI::d2Ix
vpImage< double > d2Ix
Definition: vpTemplateTrackerMI.h:95
vpColVector
Implementation of column vector and the associated operations.
Definition: vpColVector.h:130
vpTemplateTrackerMI::PrtD
double * PrtD
Definition: vpTemplateTrackerMI.h:86
vpTemplateTrackerMI::setCovarianceComputation
void setCovarianceComputation(const bool &flag)
Definition: vpTemplateTrackerMI.h:172
vpTemplateTrackerMI::getNormalizedCost
double getNormalizedCost(const vpImage< unsigned char > &I)
Definition: vpTemplateTrackerMI.h:127
vpTemplateTrackerMI::MI_preEstimation
double MI_preEstimation
Definition: vpTemplateTrackerMI.h:99
vpTemplateTrackerMI::temp
double * temp
Definition: vpTemplateTrackerMI.h:77
vpMatrix
Implementation of a matrix and operations on matrices.
Definition: vpMatrix.h:164
vpTemplateTrackerMI::vpTemplateTrackerMI
vpTemplateTrackerMI()
Default constructor.
Definition: vpTemplateTrackerMI.h:155
vpTemplateTracker::initHessienDesired
virtual void initHessienDesired(const vpImage< unsigned char > &I)=0
vpTemplateTrackerMI::setApprocHessian
void setApprocHessian(vpHessienApproximationType approx)
Definition: vpTemplateTrackerMI.h:171
vpTemplateTrackerMI::PrtTout
double * PrtTout
Definition: vpTemplateTrackerMI.h:83
vpTemplateTracker::getCost
virtual double getCost(const vpImage< unsigned char > &I, const vpColVector &tp)=0
vpTemplateTrackerMI::dPrt
double * dPrt
Definition: vpTemplateTrackerMI.h:79
vpTemplateTrackerMI::Prt
double * Prt
Definition: vpTemplateTrackerMI.h:78
vpTemplateTrackerMI::ApproxHessian
vpHessienApproximationType ApproxHessian
Definition: vpTemplateTrackerMI.h:74
vpTemplateTrackerMI::m_A
std::vector< double > m_A
Definition: vpTemplateTrackerMI.h:111
vpTemplateTrackerMI::NMI_preEstimation
double NMI_preEstimation
Definition: vpTemplateTrackerMI.h:102
vpTemplateTrackerMI::getMI
double getMI() const
Definition: vpTemplateTrackerMI.h:166
vpTemplateTrackerMI::bspline
int bspline
Definition: vpTemplateTrackerMI.h:90
vpTemplateTrackerMI::m_d2v
std::vector< std::vector< double > > m_d2v
Definition: vpTemplateTrackerMI.h:114
vpTemplateTrackerMI::d2Iy
vpImage< double > d2Iy
Definition: vpTemplateTrackerMI.h:96
vpTemplateTrackerMI::m_dv
std::vector< double > m_dv
Definition: vpTemplateTrackerMI.h:110
vpTemplateTrackerMI::setHessianComputation
void setHessianComputation(vpHessienType type)
Definition: vpTemplateTrackerMI.h:173
vpTemplateTrackerMI::Pt
double * Pt
Definition: vpTemplateTrackerMI.h:80
vpTemplateTrackerMI::m_d2u
std::vector< std::vector< double > > m_d2u
Definition: vpTemplateTrackerMI.h:113
vpTemplateTrackerMI::covarianceMatrix
vpMatrix covarianceMatrix
Definition: vpTemplateTrackerMI.h:105
vpTemplateTrackerMI::hessianComputation
vpHessienType hessianComputation
Definition: vpTemplateTrackerMI.h:73
vpTemplateTrackerMI::Ncb
int Ncb
Definition: vpTemplateTrackerMI.h:93
vpTemplateTracker::trackNoPyr
virtual void trackNoPyr(const vpImage< unsigned char > &I)=0
vpTemplateTrackerMI::Nc
int Nc
Definition: vpTemplateTrackerMI.h:92
vpTemplateTrackerMI::getCost
double getCost(const vpImage< unsigned char > &I)
Definition: vpTemplateTrackerMI.h:125
vpImage< double >
vpTemplateTrackerMI::vpHessienApproximationType
vpHessienApproximationType
Definition: vpTemplateTrackerMI.h:57
vpTemplateTrackerMI::getCovarianceMatrix
vpMatrix getCovarianceMatrix() const
Definition: vpTemplateTrackerMI.h:165
vpTemplateTrackerMI::dprtemp
double * dprtemp
Definition: vpTemplateTrackerMI.h:84
vpTemplateTrackerMI::Pr
double * Pr
Definition: vpTemplateTrackerMI.h:81
vpTemplateTrackerMI::d2Ixy
vpImage< double > d2Ixy
Definition: vpTemplateTrackerMI.h:97
vpTemplateTracker
Definition: vpTemplateTracker.h:62
vpTemplateTrackerMI::USE_HESSIEN_NORMAL
@ USE_HESSIEN_NORMAL
Definition: vpTemplateTrackerMI.h:67
vpTemplateTrackerMI::lambda
double lambda
Definition: vpTemplateTrackerMI.h:75
vpTemplateTrackerMI::dPrtD
double * dPrtD
Definition: vpTemplateTrackerMI.h:87
vpTemplateTrackerMI::m_dB
std::vector< double > m_dB
Definition: vpTemplateTrackerMI.h:112