41 #include <visp3/tt/vpTemplateTrackerZNCCInverseCompositional.h>
42 #include <visp3/core/vpImageFilter.h>
46 evolRMS(0), x_pos(), y_pos(), threshold_RMS(1e-8), moydIrefdp()
96 Warp->computeCoeff(
p);
97 double Ic,dIcx=0.,dIcy=0.;
133 for(
unsigned int it=0;it<
nbParam;it++)
138 double *tempt=
new double[
nbParam];
139 for(
unsigned int it=0;it<
nbParam;it++)
140 tempt[it]=
dW[0][it]*dIcx+
dW[1][it]*dIcy;
145 for(
unsigned int it=0;it<
nbParam;it++)
146 for(
unsigned int jt=0;jt<
nbParam;jt++)
148 moyd2Iref[it][jt] +=(
dW[0][it]*(
dW[0][jt]*d_Ixx+
dW[1][jt]*d_Ixy)
149 +
dW[1][it]*(
dW[0][jt]*d_Ixy+
dW[1][jt]*d_Iyy));
158 moyIref=moyIref/Nbpoint;
160 moyd2Iref=moyd2Iref/Nbpoint;
163 double covarIref=0,covarIc=0;
193 double *tempt=
new double[
nbParam];
194 for(
unsigned int it=0;it<
nbParam;it++)
195 tempt[it]=
dW[0][it]*dIcx+
dW[1][it]*dIcy;
197 double prodIc=(Ic-moyIc);
203 for(
unsigned int it=0;it<
nbParam;it++)
204 for(
unsigned int jt=0;jt<
nbParam;jt++)
206 sIcd2Iref[it][jt] +=prodIc*(
dW[0][it]*(
dW[0][jt]*d_Ixx+
dW[1][jt]*d_Ixy)
207 +
dW[1][it]*(
dW[0][jt]*d_Ixy+
dW[1][jt]*d_Iyy)-moyd2Iref[it][jt]);
214 for(
unsigned int it=0;it<
nbParam;it++)
217 covarIref+=(Iref-moyIref)*(Iref-moyIref);
218 covarIc+=(Ic-moyIc)*(Ic-moyIc);
219 sIcIref+=(Iref-moyIref)*(Ic-moyIc);
224 covarIref=sqrt(covarIref);
225 covarIc=sqrt(covarIc);
227 denom=covarIref*covarIc;
229 double NCC=sIcIref/denom;
235 d2covarIref=-(sIcd2Iref-sdIrefdIref+dcovarIref*dcovarIref.
t())/covarIref;
239 Hdesire=(sIcd2Iref-sdIrefdIref+dcovarIref*dcovarIref.
t())/denom;
252 unsigned int Nbpoint=0;
256 unsigned int iteration=0;
265 Warp->computeCoeff(
p);
297 moyIref=moyIref/Nbpoint;
300 double covarIref=0,covarIc=0;
325 double prod=(Ic-moyIc);
326 for(
unsigned int it=0;it<
nbParam;it++)
328 for(
unsigned int it=0;it<
nbParam;it++)
334 covarIref+=(Iref-moyIref)*(Iref-moyIref);
335 covarIc+=(Ic-moyIc)*(Ic-moyIc);
336 sIcIref+=(Iref-moyIref)*(Ic-moyIc);
341 covarIref=sqrt(covarIref);
342 covarIc=sqrt(covarIc);
343 denom=covarIref*covarIc;
346 if (std::fabs(denom) <= std::numeric_limits<double>::epsilon())
352 double NCC=sIcIref/denom;
354 G=1.*(sIcdIref/denom-NCC*dcovarIref/covarIref);
363 std::cout<<
"probleme inversion"<<std::endl;
389 x_pos.resize(nb_corners);
390 y_pos.resize(nb_corners);
392 Warp->computeCoeff(
p);
398 for (
unsigned int j=0; j<3; j++) {
401 Warp->computeDenom(
X1,p_);
413 Warp->computeCoeff(p_);
420 for (
unsigned int j=0; j<3; j++) {
423 Warp->computeDenom(
X1,p_);
Implementation of a matrix and operations on matrices.
void initPosEvalRMS(const vpColVector &p)
void getTriangle(unsigned int i, vpTemplateTrackerTriangle &T) const
void initCompInverse(const vpImage< unsigned char > &I)
unsigned int getWidth() const
static void getGradX(const vpImage< unsigned char > &I, vpImage< double > &dIx)
vpTemplateTrackerPoint * ptTemplate
static void getGradY(const vpImage< unsigned char > &I, vpImage< double > &dIy)
virtual void warpX(const int &i, const int &j, double &i2, double &j2, const vpColVector &ParamM)=0
void initHessienDesired(const vpImage< unsigned char > &I)
std::vector< double > x_pos
Type getValue(double i, double j) const
vpColVector getCorner(unsigned int i) const
static void getGradYGauss2D(const vpImage< unsigned char > &I, vpImage< double > &dIy, const double *gaussianKernel, const double *gaussianDerivativeKernel, unsigned int size)
static void getGradXGauss2D(const vpImage< unsigned char > &I, vpImage< double > &dIx, const double *gaussianKernel, const double *gaussianDerivativeKernel, unsigned int size)
virtual void getParamInverse(const vpColVector &ParamM, vpColVector &ParamMinv) const =0
unsigned int templateSize
unsigned int iterationMax
void trackNoPyr(const vpImage< unsigned char > &I)
virtual void pRondp(const vpColVector &p1, const vpColVector &p2, vpColVector &pres) const =0
vpTemplateTrackerZNCCInverseCompositional(vpTemplateTrackerWarp *warp)
unsigned int getNbTriangle() const
static void filter(const vpImage< double > &I, vpImage< double > &Iu, vpImage< double > &Iv, const vpMatrix &M)
virtual void getdW0(const int &i, const int &j, const double &dy, const double &dx, double *dIdW)=0
vpMatrix HLMdesireInverse
std::vector< double > y_pos
Implementation of column vector and the associated operations.
vpMatrix inverseByLU() const
vpTemplateTrackerZone * zoneTracked
unsigned int getHeight() const
void computeEvalRMS(const vpColVector &p)
vpTemplateTrackerWarp * Warp
static void computeHLM(const vpMatrix &H, const double &alpha, vpMatrix &HLM)
virtual void dWarp(const vpColVector &X1, const vpColVector &X2, const vpColVector &ParamM, vpMatrix &dW)=0
void resize(const unsigned int i, const bool flagNullify=true)