00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __itkMultiResolutionImageRegistrationMethod_h
00018
#define __itkMultiResolutionImageRegistrationMethod_h
00019
00020
#include "itkProcessObject.h"
00021
#include "itkImageToImageMetric.h"
00022
#include "itkSingleValuedNonLinearOptimizer.h"
00023
#include "itkMultiResolutionPyramidImageFilter.h"
00024
#include "itkNumericTraits.h"
00025
00026
namespace itk
00027 {
00028
00065
template <
typename TFixedImage,
typename TMovingImage>
00066 class ITK_EXPORT MultiResolutionImageRegistrationMethod :
public ProcessObject
00067 {
00068
public:
00070 typedef MultiResolutionImageRegistrationMethod
Self;
00071 typedef ProcessObject Superclass;
00072 typedef SmartPointer<Self> Pointer;
00073 typedef SmartPointer<const Self> ConstPointer;
00074
00076
itkNewMacro(
Self);
00077
00079
itkTypeMacro(MultiResolutionImageRegistrationMethod,
ProcessObject);
00080
00082 typedef TFixedImage
FixedImageType;
00083 typedef typename FixedImageType::ConstPointer
FixedImageConstPointer;
00084 typedef typename FixedImageType::RegionType
FixedImageRegionType;
00085
00087 typedef TMovingImage
MovingImageType;
00088 typedef typename MovingImageType::ConstPointer
MovingImageConstPointer;
00089
00091
typedef ImageToImageMetric<
FixedImageType,
00092 MovingImageType >
MetricType;
00093 typedef typename MetricType::Pointer
MetricPointer;
00094
00096 typedef typename MetricType::TransformType
TransformType;
00097 typedef typename TransformType::Pointer
TransformPointer;
00098
00100 typedef typename MetricType::InterpolatorType
InterpolatorType;
00101 typedef typename InterpolatorType::Pointer
InterpolatorPointer;
00102
00104 typedef SingleValuedNonLinearOptimizer OptimizerType;
00105
00107
typedef MultiResolutionPyramidImageFilter<
FixedImageType,
00108
FixedImageType >
00109 FixedImagePyramidType;
00110 typedef typename FixedImagePyramidType::Pointer
FixedImagePyramidPointer;
00111
00113
typedef MultiResolutionPyramidImageFilter<
MovingImageType,
00114
MovingImageType >
00115 MovingImagePyramidType;
00116 typedef typename MovingImagePyramidType::Pointer
MovingImagePyramidPointer;
00117
00120 typedef typename MetricType::TransformParametersType
ParametersType;
00121
00123
void StartRegistration();
00124
00126
void StopRegistration();
00127
00129
itkSetConstObjectMacro( FixedImage,
FixedImageType );
00130
itkGetConstObjectMacro( FixedImage,
FixedImageType );
00131
00133
itkSetConstObjectMacro( MovingImage,
MovingImageType );
00134
itkGetConstObjectMacro( MovingImage,
MovingImageType );
00135
00137
itkSetObjectMacro(
Optimizer,
OptimizerType );
00138
itkGetObjectMacro(
Optimizer,
OptimizerType );
00139
00141
itkSetObjectMacro( Metric,
MetricType );
00142
itkGetObjectMacro( Metric,
MetricType );
00143
00145
itkSetMacro( FixedImageRegion,
FixedImageRegionType );
00146
itkGetConstReferenceMacro( FixedImageRegion,
FixedImageRegionType );
00147
00149
itkSetObjectMacro(
Transform,
TransformType );
00150
itkGetObjectMacro(
Transform,
TransformType );
00151
00153
itkSetObjectMacro( Interpolator,
InterpolatorType );
00154
itkGetObjectMacro( Interpolator,
InterpolatorType );
00155
00157
itkSetObjectMacro( FixedImagePyramid,
FixedImagePyramidType );
00158
itkGetObjectMacro( FixedImagePyramid,
FixedImagePyramidType );
00159
00161
itkSetObjectMacro( MovingImagePyramid,
MovingImagePyramidType );
00162
itkGetObjectMacro( MovingImagePyramid,
MovingImagePyramidType );
00163
00165
itkSetClampMacro( NumberOfLevels,
unsigned long, 1,
00166
NumericTraits<unsigned long>::max() );
00167
itkGetMacro( NumberOfLevels,
unsigned long );
00168
00170
itkGetMacro( CurrentLevel,
unsigned long );
00171
00173
itkSetMacro( InitialTransformParameters,
ParametersType );
00174
itkGetConstReferenceMacro( InitialTransformParameters,
ParametersType );
00175
00179
itkSetMacro( InitialTransformParametersOfNextLevel,
ParametersType );
00180
itkGetConstReferenceMacro( InitialTransformParametersOfNextLevel,
ParametersType );
00181
00184
itkGetConstReferenceMacro( LastTransformParameters,
ParametersType );
00185
00186
protected:
00187 MultiResolutionImageRegistrationMethod();
00188
virtual ~MultiResolutionImageRegistrationMethod() {};
00189
void PrintSelf(std::ostream& os,
Indent indent)
const;
00190
00195
void Initialize() throw (ExceptionObject);
00196
00198
void PreparePyramids(
void );
00199
00201 itkSetMacro( CurrentLevel,
unsigned long );
00202
00203 private:
00204 MultiResolutionImageRegistrationMethod(const Self&);
00205
void operator=(const Self&);
00206
00207 MetricPointer m_Metric;
00208 OptimizerType::
Pointer m_Optimizer;
00209
00210 MovingImageConstPointer m_MovingImage;
00211 FixedImageConstPointer m_FixedImage;
00212
00213 TransformPointer m_Transform;
00214 InterpolatorPointer m_Interpolator;
00215
00216 MovingImagePyramidPointer m_MovingImagePyramid;
00217 FixedImagePyramidPointer m_FixedImagePyramid;
00218
00219 ParametersType m_InitialTransformParameters;
00220 ParametersType m_InitialTransformParametersOfNextLevel;
00221 ParametersType m_LastTransformParameters;
00222
00223 FixedImageRegionType m_FixedImageRegion;
00224 std::
vector<FixedImageRegionType> m_FixedImageRegionPyramid;
00225
00226
unsigned long m_NumberOfLevels;
00227
unsigned long m_CurrentLevel;
00228
00229
bool m_Stop;
00230
00231 };
00232
00233
00234 }
00235
00236
00237 #ifndef ITK_MANUAL_INSTANTIATION
00238 #include "itkMultiResolutionImageRegistrationMethod.txx"
00239 #endif
00240
00241 #endif
00242
00243
00244