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

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkSymmetricImageRegistration.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 _IRTKSYMMETRICIMAGEREGISTRATION_H
00014 
00015 #define _IRTKSYMMETRICIMAGEREGISTRATION_H
00016 
00017 #include <irtkSymmetricOptimizer.h>
00018 
00032 class irtkSymmetricImageRegistration : public irtkRegistration
00033 {
00034 
00036   friend istream& operator>> (istream&, irtkSymmetricImageRegistration*);
00037 
00039   friend ostream& operator<< (ostream&, const irtkSymmetricImageRegistration*);
00040 
00041 protected:
00042 
00046   irtkGreyImage *_target;
00047 
00052   irtkGreyImage *_source;
00053 
00055   irtkTransformation *_transformation1;
00056   irtkTransformation *_transformation2;
00057 
00059   irtkSimilarityMetric *_metric1;
00060   irtkSimilarityMetric *_metric2;
00061 
00063   irtkInterpolateImageFunction *_interpolator1;
00064   irtkInterpolateImageFunction *_interpolator2;
00065 
00067   irtkSymmetricOptimizer *_optimizer;
00068 
00070   double _TargetBlurring[MAX_NO_RESOLUTIONS];
00071 
00073   double _TargetResolution[MAX_NO_RESOLUTIONS][3];
00074 
00076   double _SourceBlurring[MAX_NO_RESOLUTIONS];
00077 
00079   double _SourceResolution[MAX_NO_RESOLUTIONS][3];
00080 
00082   int    _NumberOfSteps[MAX_NO_RESOLUTIONS];
00083 
00085   double _LengthOfSteps[MAX_NO_RESOLUTIONS];
00086 
00088   int    _NumberOfIterations[MAX_NO_RESOLUTIONS];
00089 
00091   short  _Padding;
00092 
00094   int    _NumberOfLevels;
00095 
00097   int    _NumberOfBins;
00098 
00100   irtkSimilarityMeasure  _SimilarityMeasure;
00101 
00103   irtkOptimizationMethod _OptimizationMethod;
00104 
00106   irtkInterpolationMode _InterpolationMode;
00107 
00109   double _Epsilon;
00110 
00112   double _Delta;
00113 
00115   int    _DebugFlag;
00116 
00118   double _source_x1, _source_y1, _source_z1;
00119   double _source_x2, _source_y2, _source_z2;
00120 
00122   double _target_x1, _target_y1, _target_z1;
00123   double _target_x2, _target_y2, _target_z2;
00124 
00126   virtual void Initialize();
00127 
00129   virtual void Finalize();
00130 
00132   virtual void Initialize(int);
00133 
00135   virtual void Finalize(int);
00136 
00137 public:
00138 
00140   irtkEMClassification *classification;
00141 
00143   irtkSymmetricImageRegistration();
00144 
00146   virtual ~irtkSymmetricImageRegistration();
00147 
00149   virtual void SetInput (irtkGreyImage *, irtkGreyImage *);
00150 
00152   virtual void SetOutput(irtkTransformation *, irtkTransformation *) = 0;
00153 
00155   virtual void Run();
00156 
00163   virtual double Evaluate() = 0;
00164 
00174   virtual double EvaluateGradient(float, float *);
00175 
00177   virtual const char *NameOfClass() = 0;
00178 
00180   virtual void Debug(string);
00181 
00183   virtual void Print() = 0;
00184 
00186   virtual void GuessParameter() = 0;
00187 
00189   virtual void Read (char *);
00190 
00192   virtual Bool Read(char *, char *, int &);
00193 
00195   virtual void Write(char *);
00196 
00198   virtual void Write(ostream &);
00199 
00200   // Access parameters
00201   virtual SetMacro(DebugFlag, int);
00202   virtual GetMacro(DebugFlag, int);
00203   virtual SetMacro(Padding, int);
00204   virtual GetMacro(Padding, int);
00205   virtual SetMacro(OptimizationMethod, irtkOptimizationMethod);
00206   virtual GetMacro(OptimizationMethod, irtkOptimizationMethod);
00207 
00208 };
00209 
00210 inline void irtkSymmetricImageRegistration::SetInput(irtkGreyImage *target, irtkGreyImage *source)
00211 {
00212   _target = target;
00213   _source = source;
00214 }
00215 
00216 inline void irtkSymmetricImageRegistration::Debug(string message)
00217 {
00218   if (_DebugFlag == True) cout << message << endl;
00219 }
00220 
00221 #include <irtkSymmetricImageFreeFormRegistration.h>
00222 
00223 #endif