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

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkMotionTracking.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 _IRTKMOTIONTRACKING_H
00014 
00015 #define _IRTKMOTIONTRACKING_H
00016 
00026 class irtkMotionTracking : public irtkRegistration
00027 {
00028 
00030   friend istream& operator>> (istream&, irtkMotionTracking*);
00031 
00033   friend ostream& operator<< (ostream&, const irtkMotionTracking*);
00034 
00035 protected:
00036 
00038   irtkGreyImage *_image;
00039 
00041   irtkGreyImage *_mask;
00042 
00044   irtkTransformation *_transformation;
00045 
00047   irtkBSplineFreeFormTransformation4D *_affd;
00048 
00050   irtkSimilarityMetric *_metric;
00051 
00053   irtkInterpolateImageFunction *_interpolator;
00054 
00056   irtkOptimizer *_optimizer;
00057 
00059   double _Blurring[MAX_NO_RESOLUTIONS];
00060 
00062   double _Resolution[MAX_NO_RESOLUTIONS][3];
00063 
00065   int    _NumberOfSteps[MAX_NO_RESOLUTIONS];
00066 
00068   double _LengthOfSteps[MAX_NO_RESOLUTIONS];
00069 
00071   int    _NumberOfIterations[MAX_NO_RESOLUTIONS];
00072 
00074   short  _TargetPadding;
00075 
00077   int    _NumberOfLevels;
00078 
00080   int    _NumberOfBins;
00081 
00083   irtkSimilarityMeasure  _SimilarityMeasure;
00084 
00086   irtkOptimizationMethod _OptimizationMethod;
00087 
00089   irtkInterpolationMode _InterpolationMode;
00090 
00092   double _DX;
00093 
00095   double _DY;
00096 
00098   double _DZ;
00099 
00101   double _Epsilon;
00102 
00104   double _Delta[MAX_NO_RESOLUTIONS];
00105 
00107   double _SpeedupFactor;
00108 
00110   int    _DebugFlag;
00111 
00113   double _x1, _y1, _z1, _x2, _y2, _z2;
00114 
00116   irtkSimilarityMetric *_tmpMetricA, *_tmpMetricB;
00117 
00121   float *_mffdLookupTable;
00122 
00126   float *_affdLookupTable;
00127 
00130   float *_localLookupTable;
00131 
00133   virtual void Initialize();
00134 
00136   virtual void Finalize();
00137 
00139   virtual void Initialize(int);
00140 
00142   virtual void Finalize(int);
00143 
00145   virtual void UpdateLUT();
00146 
00147 public:
00148 
00150   irtkMotionTracking();
00151 
00153   virtual ~irtkMotionTracking();
00154 
00156   virtual void SetInput (irtkGreyImage *, irtkGreyImage *);
00157 
00159   virtual void SetOutput(irtkTransformation *) = 0;
00160 
00162   virtual void Run();
00163 
00170   virtual double Evaluate() = 0;
00171 
00179   virtual double EvaluateDerivative(int, double);
00180 
00190   virtual double EvaluateGradient(float, float *);
00191 
00193   virtual const char *NameOfClass() = 0;
00194 
00196   virtual void Debug(string);
00197 
00199   virtual void Print() = 0;
00200 
00202   virtual void GuessParameter() = 0;
00203 
00205   virtual void Read (char *);
00206 
00208   virtual Bool Read(char *, char *, int &);
00209 
00211   virtual void Write(char *);
00212 
00214   virtual void Write(ostream &);
00215 
00216   // Access parameters
00217   virtual SetMacro(DebugFlag, int);
00218   virtual GetMacro(DebugFlag, int);
00219   virtual SetMacro(OptimizationMethod, irtkOptimizationMethod);
00220   virtual GetMacro(OptimizationMethod, irtkOptimizationMethod);
00221 
00222 };
00223 
00224 inline void irtkMotionTracking::SetInput(irtkGreyImage *image, irtkGreyImage *mask)
00225 {
00226   _image = image;
00227   _mask  = mask;
00228 }
00229 
00230 inline void irtkMotionTracking::Debug(string message)
00231 {
00232   if (_DebugFlag == True) cout << message << endl;
00233 }
00234 
00235 #endif
00236