/vol/vipdata/irtk/packages/registration/include/irtkImageFluidRegistration.h

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkImageFluidRegistration.h 2 2008-12-23 12:40:14Z dr $
00005   Copyright : Imperial College, Department of Computing
00006               Visual Information Processing (VIP), 2008 onwards
00007   Date      : $Date: 2008-12-23 12:40:14 +0000 (Tue, 23 Dec 2008) $
00008   Version   : $Revision: 2 $
00009   Changes   : $Author: dr $
00010 
00011 =========================================================================*/
00012 
00013 #ifndef _IRTKIMAGEFLUIDREGISTRATION_H
00014 
00015 #define _IRTKIMAGEFLUIDREGISTRATION_H
00016 
00023 class irtkImageFluidRegistration : public irtkImageRegistration
00024 {
00025 
00027   friend float irtkFluidRegistration_Ptr2NRfunc (float *x);
00028 
00030   friend void  irtkFluidRegistration_Ptr2NRdfunc(float *x, float *dx);
00031 
00032 protected:
00033 
00035   irtkBSplineFreeFormTransformation *_affd;
00036 
00038   irtkFluidFreeFormTransformation *_mffd;
00039 
00041   double _DX;
00042 
00044   double _DY;
00045 
00047   double _DZ;
00048 
00050   int _NumberOfTimeSteps;
00051 
00053   double _SpeedupFactor;
00054 
00056   virtual void Initialize();
00057 
00059   virtual void Initialize(int);
00060 
00062   virtual void Finalize();
00063 
00065   virtual void Finalize(int);
00066 
00072   virtual double Evaluate();
00073 
00081   virtual double EvaluateDerivative(int, double);
00082 
00092   virtual double EvaluateGradient(float, float *);
00093 
00094   virtual void UpdateLUT();
00095 
00096 public:
00097 
00099   irtkImageFluidRegistration();
00100 
00102   virtual void SetOutput(irtkTransformation *);
00103 
00105   virtual void Run();
00106 
00108   virtual const char *NameOfClass();
00109 
00111   virtual void Print();
00112 
00114   virtual void GuessParameter();
00115 
00117   virtual Bool Read(char *, char *, int &);
00118 
00120   virtual void Write(ostream &);
00121 
00122 };
00123 
00124 inline void irtkImageFluidRegistration::SetOutput(irtkTransformation *transformation)
00125 {
00126   // Print debugging information
00127   this->Debug("irtkImageFluidRegistration::SetOutput");
00128 
00129   if (strcmp(transformation->NameOfClass(),
00130              "irtkFluidFreeFormTransformation") != 0) {
00131     cerr << "irtkImageFluidRegistration::SetOutput: Transformation must be "
00132          << "irtkFluidFreeFormTransformation" << endl;
00133     exit(0);
00134   }
00135   _transformation = transformation;
00136 }
00137 
00138 inline const char *irtkImageFluidRegistration::NameOfClass()
00139 {
00140   return "irtkImageFluidRegistration";
00141 }
00142 
00143 inline void irtkImageFluidRegistration::Print()
00144 {
00145 }
00146 
00147 #endif