/vol/vipdata/irtk/image++/include/irtkBSplineInterpolateImageFunction2D.h

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkBSplineInterpolateImageFunction2D.h 8 2009-03-02 16:12:58Z dr $
00005   Copyright : Imperial College, Department of Computing
00006               Visual Information Processing (VIP), 2008 onwards
00007   Date      : $Date: 2009-03-02 16:12:58 +0000 (Mon, 02 Mar 2009) $
00008   Version   : $Revision: 8 $
00009   Changes   : $Author: dr $
00010 
00011 =========================================================================*/
00012 
00013 #ifndef _IRTKBSPLINEINTERPOLATEIMAGEFUNCTION2D_H
00014 
00015 #define _IRTKBSPLINEINTERPOLATEIMAGEFUNCTION2D_H
00016 
00029 class irtkBSplineInterpolateImageFunction2D : public irtkInterpolateImageFunction
00030 {
00031 
00032 private:
00033 
00035   int _SplineDegree;
00036 
00038   int _x;
00039 
00041   int _y;
00042 
00044   int _z;
00045 
00047   int _t;
00048 
00050   int _xhalf;
00051 
00053   int _yhalf;
00054 
00056   irtkRealImage _coeff;
00057 
00059   static double InitialAntiCausalCoefficient(double *, int, double z);
00060 
00062   static double InitialCausalCoefficient(double *, int, double, double);
00063 
00065   static void ConvertToInterpolationCoefficients(double *, int, double *, int, double);
00066 
00068   void ComputeCoefficients();
00069 
00070 public:
00071 
00073   irtkBSplineInterpolateImageFunction2D(int = 3);
00074 
00076   ~irtkBSplineInterpolateImageFunction2D();
00077 
00079   virtual const char *NameOfClass();
00080 
00082   virtual void Initialize();
00083 
00085   virtual void PutSplineDegree(int SplineDegree);
00086 
00088   virtual int GetSplineDegree();
00089 
00091   virtual double Evaluate(double, double, double = 0, double = 0);
00092 
00096   virtual double EvaluateInside(double, double, double = 0, double = 0);
00097 
00098 };
00099 
00100 inline void irtkBSplineInterpolateImageFunction2D::PutSplineDegree(int SplineDegree)
00101 {
00102   if ((SplineDegree < 2) || (SplineDegree > 5)) {
00103     cerr << "irtkBSplineInterpolateImageFunction2D::PutSplineDegree: Unsupported spline degree\n";
00104     exit(1);
00105   }
00106   _SplineDegree = SplineDegree;
00107 }
00108 
00109 inline int irtkBSplineInterpolateImageFunction2D::GetSplineDegree()
00110 {
00111   return _SplineDegree;
00112 }
00113 
00114 #endif