Visual Servoing Platform  version 3.0.1
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
vpTemplateTrackerBSpline.cpp
1 /****************************************************************************
2  *
3  * This file is part of the ViSP software.
4  * Copyright (C) 2005 - 2017 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  for(int ir=-1;ir<=2;ir++)
53  {
54  int tr=ir+cr;
55  for(int it=-1;it<=2;it++)
56  {
57  int tt=it+ct;
58  if(tr>=0 && tr <height && tt>=0 && tt <width)
59  res+=Bspline4((double)ir-er)*Bspline4((double)it-et)*I[tr][tt];
60  }
61  }
62  return res;
63 }
64 
65 double vpTemplateTrackerBSpline::Bspline4(double diff)
66 {
67  //double result;
68  double aDiff=vpMath::abs(diff);
69  if(aDiff<1.)
70  return (aDiff*aDiff*aDiff/2.-aDiff*aDiff+4./6.);
71  //return (0.5*(1.-aDiff)*(1.-aDiff)*(1.-aDiff)+0.5*(1.-aDiff)*(1.-aDiff)-0.5*(1.-aDiff)+1./6.);
72  else if(aDiff<2.)
73  return ((2.-aDiff)*(2.-aDiff)*(2.-aDiff)/6.);
74  else
75  return 0;
76 }
77 
78 #endif
unsigned int getWidth() const
Definition: vpImage.h:226
static Type abs(const Type &x)
Definition: vpMath.h:161
unsigned int getHeight() const
Definition: vpImage.h:175