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