Visual Servoing Platform  version 3.0.0
vpTemplateTrackerBSpline.cpp
1 /****************************************************************************
2  *
3  * This file is part of the ViSP software.
4  * Copyright (C) 2005 - 2015 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * ("GPL") version 2 as published by the Free Software Foundation.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See http://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Template tracker.
32  *
33  * Authors:
34  * Amaury Dame
35  * Aurelien Yol
36  * Fabien Spindler
37  *
38  *****************************************************************************/
39 #include <visp3/tt/vpTemplateTrackerBSpline.h>
40 
41 #ifndef DOXYGEN_SHOULD_SKIP_THIS
42 
43 double vpTemplateTrackerBSpline::getSubPixBspline4(const vpImage<double> &I, double r, double t)
44 {
45  double res=0;
46  int cr=(int)(r);
47  int ct=(int)(t);
48  double er=(double)r-cr;
49  double et=(double)t-ct;
50  int height=(int)I.getHeight();//r
51  int width=(int)I.getWidth();//t
52  volatile int tr,tt;
53  for(int ir=-1;ir<=2;ir++)
54  {
55  tr=ir+cr;
56  for(int it=-1;it<=2;it++)
57  {
58  tt=it+ct;
59  if(tr>=0 && tr <height && tt>=0 && tt <width)
60  res+=Bspline4((double)ir-er)*Bspline4((double)it-et)*I[tr][tt];
61  }
62  }
63  return res;
64 }
65 
66 double vpTemplateTrackerBSpline::Bspline4(double diff)
67 {
68  //double result;
69  double aDiff=vpMath::abs(diff);
70  if(aDiff<1.)
71  return (aDiff*aDiff*aDiff/2.-aDiff*aDiff+4./6.);
72  //return (0.5*(1.-aDiff)*(1.-aDiff)*(1.-aDiff)+0.5*(1.-aDiff)*(1.-aDiff)-0.5*(1.-aDiff)+1./6.);
73  else if(aDiff<2.)
74  return ((2.-aDiff)*(2.-aDiff)*(2.-aDiff)/6.);
75  else
76  return 0;
77 }
78 
79 #endif
unsigned int getWidth() const
Definition: vpImage.h:161
static Type abs(const Type &x)
Definition: vpMath.h:162
unsigned int getHeight() const
Definition: vpImage.h:152