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