43 #include <visp3/core/vpImageTools.h> 44 #include <visp3/tt/vpTemplateTrackerSSDForwardAdditional.h> 62 double IW, dIWx, dIWy;
64 unsigned int iteration = 0;
71 double evolRMS_init = 0;
72 double evolRMS_prec = 0;
74 double *tempt =
new double[
nbParam];
77 unsigned int Nbpoint = 0;
81 Warp->computeCoeff(
p);
82 for (
unsigned int point = 0; point <
templateSize; point++) {
93 if ((i2 >= 0) && (j2 >= 0) && (i2 < I.
getHeight() - 1) && (j2 < I.
getWidth() - 1)) {
106 for (
unsigned int it = 0; it <
nbParam; it++)
107 tempt[it] =
dW[0][it] * dIWx +
dW[1][it] * dIWy;
109 for (
unsigned int it = 0; it <
nbParam; it++)
110 for (
unsigned int jt = 0; jt <
nbParam; jt++)
111 H[it][jt] += tempt[it] * tempt[jt];
113 double er = (Tij - IW);
114 for (
unsigned int it = 0; it <
nbParam; it++)
115 G[it] += er * tempt[it];
133 switch (minimizationMethod) {
138 double erreur_LMA = -
getCost(I, p_test_LMA);
139 if (erreur_LMA < erreur) {
141 lambda = (lambda / 10. < 1e-6) ? lambda / 10. : 1e-6;
143 lambda = (lambda * 10. < 1e6) ? 1e6 : lambda * 10.;
161 double s_scal_y = s_quasi.
t() * y_quasi;
162 if (std::fabs(s_scal_y) > std::numeric_limits<double>::epsilon())
163 KQuasiNewton = KQuasiNewton + 0.001 * (s_quasi * s_quasi.
t() / s_scal_y -
164 KQuasiNewton * y_quasi * y_quasi.
t() * KQuasiNewton /
165 (y_quasi.
t() * KQuasiNewton * y_quasi));
167 dp = -KQuasiNewton *
G;
188 if (iteration == 0) {
195 evolRMS_delta = std::fabs(
evolRMS - evolRMS_prec);
virtual void warpX(const int &v1, const int &u1, double &v2, double &u2, const vpColVector &p)=0
unsigned int getWidth() const
vpTemplateTrackerPoint * ptTemplate
void computeOptimalBrentGain(const vpImage< unsigned char > &I, vpColVector &tp, double tMI, vpColVector &direction, double &alpha)
error that can be emited by ViSP classes.
void initPosEvalRMS(const vpColVector &p)
static void getGradYGauss2D(const vpImage< unsigned char > &I, vpImage< double > &dIy, const double *gaussianKernel, const double *gaussianDerivativeKernel, unsigned int size)
void computeEvalRMS(const vpColVector &p)
static void getGradXGauss2D(const vpImage< unsigned char > &I, vpImage< double > &dIx, const double *gaussianKernel, const double *gaussianDerivativeKernel, unsigned int size)
unsigned int templateSize
unsigned int iterationMax
Type getValue(unsigned int i, unsigned int j) const
Error that can be emited by the vpTracker class and its derivates.
unsigned int iterationGlobale
static void filter(const vpImage< double > &I, vpImage< double > &Iu, vpImage< double > &Iv, const vpMatrix &M, bool convolve=false)
Implementation of column vector and the associated operations.
vpMatrix inverseByLU() const
unsigned int getHeight() const
virtual void dWarp(const vpColVector &X1, const vpColVector &X2, const vpColVector &p, vpMatrix &dM)=0
vpTemplateTrackerWarp * Warp
static void computeHLM(const vpMatrix &H, const double &alpha, vpMatrix &HLM)