/vol/vipdata/irtk/packages/registration/include/irtkMotionTracking.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _IRTKMOTIONTRACKING_H
00014
00015 #define _IRTKMOTIONTRACKING_H
00016
00026 class irtkMotionTracking : public irtkRegistration
00027 {
00028
00030 friend istream& operator>> (istream&, irtkMotionTracking*);
00031
00033 friend ostream& operator<< (ostream&, const irtkMotionTracking*);
00034
00035 protected:
00036
00038 irtkGreyImage *_image;
00039
00041 irtkGreyImage *_mask;
00042
00044 irtkTransformation *_transformation;
00045
00047 irtkBSplineFreeFormTransformation4D *_affd;
00048
00050 irtkSimilarityMetric *_metric;
00051
00053 irtkInterpolateImageFunction *_interpolator;
00054
00056 irtkOptimizer *_optimizer;
00057
00059 double _Blurring[MAX_NO_RESOLUTIONS];
00060
00062 double _Resolution[MAX_NO_RESOLUTIONS][3];
00063
00065 int _NumberOfSteps[MAX_NO_RESOLUTIONS];
00066
00068 double _LengthOfSteps[MAX_NO_RESOLUTIONS];
00069
00071 int _NumberOfIterations[MAX_NO_RESOLUTIONS];
00072
00074 short _TargetPadding;
00075
00077 int _NumberOfLevels;
00078
00080 int _NumberOfBins;
00081
00083 irtkSimilarityMeasure _SimilarityMeasure;
00084
00086 irtkOptimizationMethod _OptimizationMethod;
00087
00089 irtkInterpolationMode _InterpolationMode;
00090
00092 double _DX;
00093
00095 double _DY;
00096
00098 double _DZ;
00099
00101 double _Epsilon;
00102
00104 double _Delta[MAX_NO_RESOLUTIONS];
00105
00107 double _SpeedupFactor;
00108
00110 int _DebugFlag;
00111
00113 double _x1, _y1, _z1, _x2, _y2, _z2;
00114
00116 irtkSimilarityMetric *_tmpMetricA, *_tmpMetricB;
00117
00121 float *_mffdLookupTable;
00122
00126 float *_affdLookupTable;
00127
00130 float *_localLookupTable;
00131
00133 virtual void Initialize();
00134
00136 virtual void Finalize();
00137
00139 virtual void Initialize(int);
00140
00142 virtual void Finalize(int);
00143
00145 virtual void UpdateLUT();
00146
00147 public:
00148
00150 irtkMotionTracking();
00151
00153 virtual ~irtkMotionTracking();
00154
00156 virtual void SetInput (irtkGreyImage *, irtkGreyImage *);
00157
00159 virtual void SetOutput(irtkTransformation *) = 0;
00160
00162 virtual void Run();
00163
00170 virtual double Evaluate() = 0;
00171
00179 virtual double EvaluateDerivative(int, double);
00180
00190 virtual double EvaluateGradient(float, float *);
00191
00193 virtual const char *NameOfClass() = 0;
00194
00196 virtual void Debug(string);
00197
00199 virtual void Print() = 0;
00200
00202 virtual void GuessParameter() = 0;
00203
00205 virtual void Read (char *);
00206
00208 virtual Bool Read(char *, char *, int &);
00209
00211 virtual void Write(char *);
00212
00214 virtual void Write(ostream &);
00215
00216
00217 virtual SetMacro(DebugFlag, int);
00218 virtual GetMacro(DebugFlag, int);
00219 virtual SetMacro(OptimizationMethod, irtkOptimizationMethod);
00220 virtual GetMacro(OptimizationMethod, irtkOptimizationMethod);
00221
00222 };
00223
00224 inline void irtkMotionTracking::SetInput(irtkGreyImage *image, irtkGreyImage *mask)
00225 {
00226 _image = image;
00227 _mask = mask;
00228 }
00229
00230 inline void irtkMotionTracking::Debug(string message)
00231 {
00232 if (_DebugFlag == True) cout << message << endl;
00233 }
00234
00235 #endif
00236