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

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkImageRegistration.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 _IRTKIMAGEREGISTRATION_H
00014 
00015 #define _IRTKIMAGEREGISTRATION_H
00016 
00017 class irtkEMClassification;
00018 
00019 #ifdef HAS_TBB
00020 
00021 class irtkMultiThreadedImageRigidRegistrationEvaluate;
00022 class irtkMultiThreadedImageRigidRegistrationEvaluate2D;
00023 
00024 #endif
00025 
00038 class irtkImageRegistration : public irtkRegistration
00039 {
00040 
00041 #ifdef HAS_TBB
00042 
00043   friend class irtkMultiThreadedImageRigidRegistrationEvaluate;
00044   friend class irtkMultiThreadedImageRigidRegistrationEvaluate2D;
00045 
00046 #endif
00047 
00049   friend istream& operator>> (istream&, irtkImageRegistration*);
00050 
00052   friend ostream& operator<< (ostream&, const irtkImageRegistration*);
00053 
00054 protected:
00055 
00059   irtkGreyImage *_target;
00060 
00065   irtkGreyImage *_source;
00066 
00068   irtkTransformation *_transformation;
00069 
00071   irtkSimilarityMetric *_metric;
00072 
00074   irtkInterpolateImageFunction *_interpolator;
00075 
00077   irtkOptimizer *_optimizer;
00078 
00080   double _TargetBlurring[MAX_NO_RESOLUTIONS];
00081 
00083   double _TargetResolution[MAX_NO_RESOLUTIONS][3];
00084 
00086   double _SourceBlurring[MAX_NO_RESOLUTIONS];
00087 
00089   double _SourceResolution[MAX_NO_RESOLUTIONS][3];
00090 
00092   int    _NumberOfSteps[MAX_NO_RESOLUTIONS];
00093 
00095   double _LengthOfSteps[MAX_NO_RESOLUTIONS];
00096 
00098   int    _NumberOfIterations[MAX_NO_RESOLUTIONS];
00099 
00101   short  _TargetPadding;
00102 
00104   int    _NumberOfLevels;
00105 
00107   int    _NumberOfBins;
00108 
00110   irtkSimilarityMeasure  _SimilarityMeasure;
00111 
00113   irtkOptimizationMethod _OptimizationMethod;
00114 
00116   irtkInterpolationMode _InterpolationMode;
00117 
00119   double _Epsilon;
00120 
00122   double _Delta[MAX_NO_RESOLUTIONS];
00123 
00125   int    _DebugFlag;
00126 
00128   double _source_x1, _source_y1, _source_z1;
00129   double _source_x2, _source_y2, _source_z2;
00130 
00132   virtual void Initialize();
00133 
00135   virtual void Finalize();
00136 
00138   virtual void Initialize(int);
00139 
00141   virtual void Finalize(int);
00142 
00143 public:
00144 
00146   irtkEMClassification *classification;
00147 
00149   irtkImageRegistration();
00150 
00152   virtual ~irtkImageRegistration();
00153 
00155   virtual void SetInput (irtkGreyImage *, irtkGreyImage *);
00156 
00158   virtual void SetOutput(irtkTransformation *) = 0;
00159 
00161   virtual void Run();
00162 
00169   virtual double Evaluate() = 0;
00170 
00180   virtual double EvaluateGradient(float, float *);
00181 
00183   virtual const char *NameOfClass() = 0;
00184 
00186   virtual void Debug(string);
00187 
00189   virtual void Print() = 0;
00190 
00192   virtual void GuessParameter() = 0;
00193 
00195   virtual void Read (char *);
00196 
00198   virtual Bool Read(char *, char *, int &);
00199 
00201   virtual void Write(char *);
00202 
00204   virtual void Write(ostream &);
00205 
00206   // Access parameters
00207   virtual SetMacro(DebugFlag, int);
00208   virtual GetMacro(DebugFlag, int);
00209   virtual SetMacro(TargetPadding, int);
00210   virtual GetMacro(TargetPadding, int);
00211   virtual SetMacro(OptimizationMethod, irtkOptimizationMethod);
00212   virtual GetMacro(OptimizationMethod, irtkOptimizationMethod);
00213 
00214 };
00215 
00216 inline void irtkImageRegistration::SetInput(irtkGreyImage *target, irtkGreyImage *source)
00217 {
00218   _target = target;
00219   _source = source;
00220 }
00221 
00222 inline void irtkImageRegistration::Debug(string message)
00223 {
00224   if (_DebugFlag == True) cout << message << endl;
00225 }
00226 
00227 #include <irtkImageRigidRegistration.h>
00228 #include <irtkImageAffineRegistration.h>
00229 #include <irtkImageFreeFormRegistration.h>
00230 #include <irtkImageFluidRegistration.h>
00231 #include <irtkImageEigenFreeFormRegistration.h>
00232 
00233 #include <irtkImageRigidRegistration2D.h>
00234 #include <irtkImageAffineRegistration2D.h>
00235 #include <irtkImageFreeFormRegistration2D.h>
00236 #include <irtkImageFluidRegistration2D.h>
00237 #include <irtkImageEigenFreeFormRegistration2D.h>
00238 
00239 #include <irtkMultipleImageRegistration.h>
00240 #include <irtkMultipleImageFreeFormRegistration.h>
00241 
00242 #endif