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

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkSymmetricOptimizer.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 _IRTKSYMMETRICOPTIMIZER_H
00014 
00015 #define _IRTKSYMMETRICOPTIMIZER_H
00016 
00018 class irtkRegistration;
00019 
00030 class irtkSymmetricOptimizer : public irtkObject
00031 {
00032 
00033 protected:
00034 
00036   irtkTransformation *_Transformation1;
00037 
00039   irtkTransformation *_Transformation2;
00040 
00042   irtkRegistration *_Registration;
00043 
00045   double _StepSize;
00046 
00048   double _Epsilon;
00049 
00051   double *transformationParams;
00052 
00053 public:
00054 
00056   irtkSymmetricOptimizer();
00057 
00059   virtual ~irtkSymmetricOptimizer();
00060 
00062   virtual double Run() = 0;
00063 
00065   virtual void Run(double &, double &);
00066 
00068   virtual const char *NameOfClass() = 0;
00069 
00070   virtual void SetTransformation(irtkTransformation *, irtkTransformation *);
00071 
00072   virtual GetMacro(Transformation1, irtkTransformation *);
00073 
00074   virtual GetMacro(Transformation2, irtkTransformation *);
00075 
00076   virtual SetMacro(Registration, irtkRegistration *)
00077 
00078   virtual GetMacro(Registration, irtkRegistration *);
00079 
00080   virtual SetMacro(StepSize, double);
00081 
00082   virtual GetMacro(StepSize, double);
00083 
00084   virtual SetMacro(Epsilon, double);
00085 
00086   virtual GetMacro(Epsilon, double);
00087 
00088 };
00089 
00090 inline void irtkSymmetricOptimizer::SetTransformation(irtkTransformation *transformation1, irtkTransformation *transformation2)
00091 {
00092   int n;
00093 
00094   _Transformation1 = transformation1;
00095   n  = _Transformation1->NumberOfDOFs();
00096 
00097   _Transformation2 = transformation2;
00098   n += _Transformation2->NumberOfDOFs();
00099 
00100   transformationParams = new double[n];
00101 }
00102 
00103 #include <irtkGradientDescentSymmetricOptimizer.h>
00104 
00105 #endif