ViSP  2.9.0
vpTemplateTrackerWarp.h
1 /****************************************************************************
2  *
3  * $Id: vpTemplateTrackerWarp.h 4632 2014-02-03 17:06:40Z fspindle $
4  *
5  * This file is part of the ViSP software.
6  * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
7  *
8  * This software is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * ("GPL") version 2 as published by the Free Software Foundation.
11  * See the file LICENSE.txt at the root directory of this source
12  * distribution for additional information about the GNU GPL.
13  *
14  * For using ViSP with software that can not be combined with the GNU
15  * GPL, please contact INRIA about acquiring a ViSP Professional
16  * Edition License.
17  *
18  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
19  *
20  * This software was developed at:
21  * INRIA Rennes - Bretagne Atlantique
22  * Campus Universitaire de Beaulieu
23  * 35042 Rennes Cedex
24  * France
25  * http://www.irisa.fr/lagadic
26  *
27  * If you have questions regarding the use of this file, please contact
28  * INRIA at visp@inria.fr
29  *
30  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
31  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
32  *
33  * Description:
34  * Template tracker.
35  *
36  * Authors:
37  * Amaury Dame
38  * Aurelien Yol
39  * Fabien Spindler
40  *
41  *****************************************************************************/
48 #ifndef vpTemplateTrackerWarp_hh
49 #define vpTemplateTrackerWarp_hh
50 
51 #include <visp/vpDisplay.h>
52 #include <visp/vpTemplateTrackerHeader.h>
53 #include <visp/vpTemplateTrackerTriangle.h>
54 #include <visp/vpTemplateTrackerZone.h>
55 #include <visp/vpTrackingException.h>
56 
57 class VISP_EXPORT vpTemplateTrackerWarp
58 {
59  protected:
60  double denom;
62  unsigned int nbParam ;
63 
64  public:
65  //constructor;
66  vpTemplateTrackerWarp() : denom(1.), dW(), nbParam(0) {}
68 
69  #ifndef DOXYGEN_SHOULD_SKIP_THIS
70  virtual void computeCoeff(const vpColVector &p)=0;
71  virtual void computeDenom(vpColVector &vX, const vpColVector &ParamM)=0;
72  #endif
73 
82  virtual void dWarp(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,vpMatrix &dW) = 0;
83 
93  virtual void dWarpCompo(const vpColVector &X1,const vpColVector &X2,const vpColVector &ParamM,const double *dwdp0,vpMatrix &dW) = 0;
94 
95  #ifndef DOXYGEN_SHOULD_SKIP_THIS
96  void findWarp(const double *ut0,const double *vt0,const double *u,const double *v,int nb_pt,vpColVector& p);
97  #endif
98 
108  virtual void getdW0(const int &i,const int &j,const double &dy,const double &dx,double *dIdW) = 0;
109 
117  virtual void getdWdp0(const int &i,const int &j,double *dIdW) = 0;
118 
125  double getDistanceBetweenZoneAndWarpedZone(const vpTemplateTrackerZone &Z,const vpColVector &p);
126 
132  unsigned int getNbParam() const {return nbParam;}
133 
140  virtual void getParamInverse(const vpColVector &ParamM,vpColVector &ParamMinv) const = 0;
141 
148  virtual void getParamPyramidDown(const vpColVector &p,vpColVector &pdown) =0;
149 
156  virtual void getParamPyramidUp(const vpColVector &p,vpColVector &pup) =0;
157 
163  virtual bool isESMcompatible() const =0;
164 
172  virtual void pRondp(const vpColVector &p1, const vpColVector &p2,vpColVector &pres) const = 0;
173 
179  void setNbParam(unsigned int nb){nbParam=nb;dW.resize(2,nbParam);}
180 
191  void warp(const double *ut0,const double *vt0,int nb_pt,const vpColVector& p,double *u,double *v);
192 
202  virtual void warpX(const int &i, const int &j,double &i2,double &j2, const vpColVector &ParamM) = 0;
203 
211  virtual void warpX(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM) = 0;
212 
220  virtual void warpXInv(const vpColVector &vX,vpColVector &vXres,const vpColVector &ParamM) = 0;
221 
230  void warpTriangle(const vpTemplateTrackerTriangle &in,const vpColVector &p, vpTemplateTrackerTriangle &out);
231 
240  void warpZone(const vpTemplateTrackerZone &in,const vpColVector &p, vpTemplateTrackerZone &out);
241 
242 };
243 
244 #endif
245 
Definition of the vpMatrix class.
Definition: vpMatrix.h:98
void resize(const unsigned int nrows, const unsigned int ncols, const bool nullify=true)
Definition: vpMatrix.cpp:183
void setNbParam(unsigned int nb)
unsigned int getNbParam() const
Class that provides a data structure for the column vectors as well as a set of operations on these v...
Definition: vpColVector.h:72