/vol/vipdata/irtk/image++/include/irtkBSplineInterpolateImageFunction2D.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
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