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

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