/vol/vipdata/irtk/packages/registration/include/irtkImageRegistration.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
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
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