NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkImageRegistrationFactory.h
Go to the documentation of this file.
1 /*=============================================================================
2 
3  NifTK: A software platform for medical image computing.
4 
5  Copyright (c) University College London (UCL). All rights reserved.
6 
7  This software is distributed WITHOUT ANY WARRANTY; without even
8  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9  PURPOSE.
10 
11  See LICENSE.txt in the top level directory for details.
12 
13 =============================================================================*/
14 
15 #ifndef itkImageRegistrationFactory_h
16 #define itkImageRegistrationFactory_h
17 
18 #include <itkProcessObject.h>
19 #include <itkConstantBoundaryCondition.h>
20 #include <itkWindowedSincInterpolateImageFunction.h>
21 
22 // Interpolators.
23 #include <itkInterpolateImageFunction.h>
24 #include <itkLinearInterpolateImageFunction.h>
25 #include <itkNearestNeighborInterpolateImageFunction.h>
26 #include <itkBSplineInterpolateImageFunction.h>
27 
28 // Similarity Measures
29 #include <itkSimilarityMeasure.h>
40 
41 // Transformations
42 #include <itkTransform.h>
45 #include <itkUCLBSplineTransform.h>
47 #include <itkAffineTransform.h>
50 
51 // Optimizers
52 #include <itkSingleValuedNonLinearOptimizer.h>
53 #include <itkGradientDescentOptimizer.h>
54 #include <itkUCLSimplexOptimizer.h>
56 #include <itkConjugateGradientOptimizer.h>
57 #include <itkPowellOptimizer.h>
59 #include <itkUCLPowellOptimizer.h>
60 
61 // Commands
64 
65 // Registration methods.
71 #include <itkBlockMatchingMethod.h>
72 
73 // Multi-resolution methods
75 
76 namespace itk
77 {
78 
79 enum
81 {
87 };
88 
89 enum
91 {
93  SSD, // Sum of Squared Differences
94  MSD, // Mean of Squared Differences
95  SAD, // Sum of Absolute Differences
96  NCC, // Normalized Cross Correlation
97  RIU, // Woods Ratio Image Uniformity
98  PIU, // Woods Partitioned Image Uniformity
99  JE, // Joint Entropy
100  MI, // Mutual information
101  NMI, // Normalized Mutual Information
102  CR // Correlation Ratio
103 };
104 
105 enum
107 {
109  TRANSLATION, // Mainly for testing.
110  RIGID, // Rigid, so rotations and translations, 3DOF in 2D and 6DOF in 3D.
111  RIGID_SCALE, // Rigid plus scale, 5DOF in 2D, 9DOF in 3D.
112  AFFINE // Affine. 7DOF in 2D, 12DOF in 3D.
113 };
114 
115 enum
117 {
119  SIMPLEX, // For when you dont trust, or don't have derivative.
120  GRADIENT_DESCENT, // Standard gradient descent.
121  REGSTEP_GRADIENT_DESCENT, // Regular step size gradient descent.
122  CONJUGATE_GRADIENT_DESCENT, // Conjugate gradients.
123  POWELL, // also, doesnt require derivative.
124  SIMPLE_REGSTEP, // Simple multi-regular step in each direction.
126 };
127 
128 enum
130 {
132  SINGLE_RES_MASKED, // The 'default' method, simply optimises transform wrt metric.
133  SINGLE_RES_TRANS_ROTATE, // Switching method, just does rigid, but alternates translation and rotation
134  SINGLE_RES_TRANS_ROTATE_SCALE, // Switching method, separately does translation, rotation and scale
135  SINGLE_RES_RIGID_SCALE, // Switching method, alternates rigid, and then scale.
137 };
138 
139 enum
141 {
144 };
159 template <typename TInputImageType, unsigned int Dimension, class TScalarType>
160 class ITK_EXPORT ImageRegistrationFactory : public Object
161 {
162 public:
163 
166  typedef Object Superclass;
167  typedef SmartPointer<Self> Pointer;
168  typedef SmartPointer<const Self> ConstPointer;
169 
171  itkNewMacro(Self);
172 
174  itkTypeMacro(ImageRegistrationFactory, Object);
175 
178 
182 
184  typedef itk::InterpolateImageFunction< TInputImageType, TScalarType> InterpolatorType;
185  typedef itk::NearestNeighborInterpolateImageFunction< TInputImageType, TScalarType> NearestNeighbourInterpolatorType;
186  typedef itk::LinearInterpolateImageFunction< TInputImageType, TScalarType > LinearInterpolatorType;
187  typedef itk::BSplineInterpolateImageFunction< TInputImageType, TScalarType > BSplineInterpolatorType;
188 
189  typedef itk::ConstantBoundaryCondition< TInputImageType > BoundaryConditionType;
190  const static unsigned int WindowRadius = 5;
191  typedef itk::Function::WelchWindowFunction<WindowRadius> WindowFunctionType;
192  typedef itk::WindowedSincInterpolateImageFunction<
193  TInputImageType,
194  WindowRadius,
195  WindowFunctionType,
196  BoundaryConditionType,
197  TScalarType > SincInterpolatorType;
198 
211 
213  typedef itk::Transform< TScalarType, Dimension, Dimension > TransformType;
218  typedef itk::AffineTransform<TScalarType, Dimension> ITKAffineTransformType;
221 
223  typedef itk::SingleValuedNonLinearOptimizer OptimizerType;
225  typedef SimplexType* SimplexPointer;
226  typedef itk::GradientDescentOptimizer GradientDescentType;
227  typedef GradientDescentType* GradientDescentPointer;
229  typedef RegularStepGradientDescentType* RegularStepGradientDescentPointer;
230  typedef itk::ConjugateGradientOptimizer ConjugateGradientType;
231  typedef ConjugateGradientType* ConjugateGradientPointer;
232  typedef itk::PowellOptimizer PowellOptimizerType;
233  typedef PowellOptimizerType* PowellOptimizerPointer;
235  typedef UCLRegularStepOptimizerType* UCLRegularStepOptimizerTypePointer;
237  typedef UCLPowellOptimizerType* UCLPowellOptimizerPointer;
238 
245 
248  <TInputImageType> MultiResRegistrationType;
249 
251  virtual typename SingleResRegistrationType::Pointer CreateSingleResRegistration(SingleResRegistrationMethodTypeEnum type);
252 
254  virtual typename MultiResRegistrationType::Pointer CreateMultiResRegistration(MultiResRegistrationMethodTypeEnum type);
255 
257  virtual typename InterpolatorType::Pointer CreateInterpolator(InterpolationTypeEnum type);
258 
260  virtual typename MetricType::Pointer CreateMetric(MetricTypeEnum type);
261 
263  virtual typename TransformType::Pointer CreateTransform(TransformTypeEnum type);
264 
266  virtual typename TransformType::Pointer CreateTransform(std::string transfomFilename);
267 
269  virtual typename OptimizerType::Pointer CreateOptimizer(OptimizerTypeEnum optimizerType);
270 
272  virtual typename IterationUpdateCommandType::Pointer CreateIterationUpdateCommand(OptimizerTypeEnum optimizerType);
273 
274 protected:
275 
278  void PrintSelf(std::ostream& os, Indent indent) const override;
279 
280 private:
281  ImageRegistrationFactory(const Self&); // purposefully not implemented
282  void operator=(const Self&); // purposefully not implemented
283 
284 };
285 
286 } // end namespace
287 
288 
289 #ifndef ITK_MANUAL_INSTANTIATION
290 #include "itkImageRegistrationFactory.txx"
291 #endif
292 
293 #endif
InterpolationTypeEnum
Definition: itkImageRegistrationFactory.h:79
itk::EulerAffineTransform< TScalarType, Dimension, Dimension > EulerAffineTransformType
Definition: itkImageRegistrationFactory.h:215
Implements Normalized Cross Correlation similarity measure.
Definition: itkNCCImageToImageMetric.h:29
itk::ConstantBoundaryCondition< TInputImageType > BoundaryConditionType
Definition: itkImageRegistrationFactory.h:189
Definition: itkImageRegistrationFactory.h:85
Definition: itkImageRegistrationFactory.h:118
Object Superclass
Definition: itkImageRegistrationFactory.h:166
itk::WindowedSincInterpolateImageFunction< TInputImageType, WindowRadius, WindowFunctionType, BoundaryConditionType, TScalarType > SincInterpolatorType
Definition: itkImageRegistrationFactory.h:197
itk::SimilarityMeasure< TInputImageType, TInputImageType > MetricType
Definition: itkImageRegistrationFactory.h:200
Definition: itkImageRegistrationFactory.h:82
itk::TranslationThenRotationImageRegistrationMethod< TInputImageType > TranslationThenRotationRegistrationType
Definition: itkImageRegistrationFactory.h:241
itk::UCLSimplexOptimizer SimplexType
Definition: itkImageRegistrationFactory.h:224
MultiResRegistrationMethodTypeEnum
Definition: itkImageRegistrationFactory.h:139
Implements Correlation Ratio (Fixed | Moving), without a histogram.
Definition: itkCRImageToImageMetric.h:36
Implements Normalised Mutual Information of a histogram for a similarity measure. ...
Definition: itkNMIImageToImageMetric.h:29
Definition: itkImageRegistrationFactory.h:94
TransformTypeEnum
Definition: itkImageRegistrationFactory.h:105
itk::AffineTransform< TScalarType, Dimension > ITKAffineTransformType
Definition: itkImageRegistrationFactory.h:218
Definition: itkImageRegistrationFactory.h:92
SmartPointer< Self > Pointer
Definition: itkImageRegistrationFactory.h:167
Abstract base class, implementing TemplateMethod [2] for similarity measures.
Definition: itkSimilarityMeasure.h:56
Base class for NifTK Image Registration Methods employing a binary mask.
Definition: itkMaskedImageRegistrationMethod.h:55
itk::Function::WelchWindowFunction< WindowRadius > WindowFunctionType
Definition: itkImageRegistrationFactory.h:191
ImageRegistrationFactory Self
Definition: itkImageRegistrationFactory.h:165
SimplexType * SimplexPointer
Definition: itkImageRegistrationFactory.h:225
Deformable transform using a BSpline representation.
Definition: itkUCLBSplineTransform.h:56
itk::NCCImageToImageMetric< TInputImageType, TInputImageType > NCCMetricType
Definition: itkImageRegistrationFactory.h:203
SmartPointer< Self > Pointer
Definition: itkSimilarityMeasure.h:64
itk::JEImageToImageMetric< TInputImageType, TInputImageType > JEMetricType
Definition: itkImageRegistrationFactory.h:207
itk::LinearInterpolateImageFunction< TInputImageType, TScalarType > LinearInterpolatorType
Definition: itkImageRegistrationFactory.h:186
itk::UCLRegularStepOptimizer UCLRegularStepOptimizerType
Definition: itkImageRegistrationFactory.h:234
GLuint GLuint GLsizei GLenum type
Definition: glew.h:1237
itk::MIImageToImageMetric< TInputImageType, TInputImageType > MIMetricType
Definition: itkImageRegistrationFactory.h:208
Simply prints out the registration params, so we can track registration.
Definition: itkVnlIterationUpdateCommand.h:42
Definition: itkImageRegistrationFactory.h:133
Definition: itkImageRegistrationFactory.h:109
Definition: itkImageRegistrationFactory.h:132
itk::InterpolateImageFunction< TInputImageType, TScalarType > InterpolatorType
Definition: itkImageRegistrationFactory.h:184
itk::UCLPowellOptimizer UCLPowellOptimizerType
Definition: itkImageRegistrationFactory.h:236
Definition: itkImageRegistrationFactory.h:124
itk::SSDImageToImageMetric< TInputImageType, TInputImageType > SSDMetricType
Definition: itkImageRegistrationFactory.h:201
RegularStepGradientDescentType * RegularStepGradientDescentPointer
Definition: itkImageRegistrationFactory.h:229
Definition: itkImageRegistrationFactory.h:112
Definition: itkImageRegistrationFactory.h:142
Implements Mean of Squared Difference similarity measure.
Definition: itkMSDImageToImageMetric.h:29
Simply prints out the registration params, so we can track registration.
Definition: itkIterationUpdateCommand.h:38
SmartPointer< Self > Pointer
Definition: itkMaskedImageRegistrationMethod.h:63
Class specifically for doing Rigid plus Scale registration.
Definition: itkRigidPlusScaleImageRegistrationMethod.h:38
itk::MSDImageToImageMetric< TInputImageType, TInputImageType > MSDMetricType
Definition: itkImageRegistrationFactory.h:202
Definition: niftkITKAffineResampleImage.cxx:74
Definition: itkImageRegistrationFactory.h:121
Definition: itkImageRegistrationFactory.h:98
Subclass itkAmoebaOptimizer to fix bug in SetCostFunction.
Definition: itkUCLSimplexOptimizer.h:32
Implements Sums of Squared Difference similarity measure.
Definition: itkSSDImageToImageMetric.h:29
ConjugateGradientType * ConjugateGradientPointer
Definition: itkImageRegistrationFactory.h:231
Definition: itkImageRegistrationFactory.h:96
Definition: itkImageRegistrationFactory.h:135
MetricTypeEnum
Definition: itkImageRegistrationFactory.h:89
PerspectiveProjectionTransform of a vector space (e.g. space coordinates)
Definition: itkPerspectiveProjectionTransform.h:39
Definition: itkImageRegistrationFactory.h:97
Definition: itkImageRegistrationFactory.h:119
Class specifically for doing Translate, Rotate, Scale registration.
Definition: itkTranslateRotateScaleImageRegistrationMethod.h:40
Euler Affine transform.
Definition: itkEulerAffineTransform.h:38
Definition: itkImageRegistrationFactory.h:86
itk::IterationUpdateCommand IterationUpdateCommandType
Definition: itkImageRegistrationFactory.h:180
Implements Sums of Absolute Differences similarity measure.
Definition: itkSADImageToImageMetric.h:29
itk::MultiResolutionImageRegistrationWrapper< TInputImageType > MultiResRegistrationType
Definition: itkImageRegistrationFactory.h:248
virtual ~ImageRegistrationFactory()
Definition: itkImageRegistrationFactory.h:277
Definition: itkImageRegistrationFactory.h:95
Implement a Regular Step Size optimizer.
Definition: itkUCLRegularStepOptimizer.h:32
Definition: itkImageRegistrationFactory.h:102
Definition: itkImageRegistrationFactory.h:83
Definition: itkImageRegistrationFactory.h:111
Definition: itkImageRegistrationFactory.h:120
Definition: itkImageRegistrationFactory.h:131
Implements Mutual Information of a histogram for a similarity measure.
Definition: itkMIImageToImageMetric.h:29
Class specifically for doing registration that alternately solves the translation components...
Definition: itkTranslationThenRotationImageRegistrationMethod.h:39
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
itk::Transform< TScalarType, Dimension, Dimension > TransformType
Definition: itkImageRegistrationFactory.h:213
itk::SingleValuedNonLinearOptimizer OptimizerType
Definition: itkImageRegistrationFactory.h:223
Definition: itkImageRegistrationFactory.h:108
itk::ConjugateGradientOptimizer ConjugateGradientType
Definition: itkImageRegistrationFactory.h:230
Definition: itkImageRegistrationFactory.h:100
OptimizerTypeEnum
Definition: itkImageRegistrationFactory.h:115
itk::PerspectiveProjectionTransform< TScalarType > PerspectiveProjectionTransformType
Definition: itkImageRegistrationFactory.h:214
Definition: itkImageRegistrationFactory.h:93
itk::MaskedImageRegistrationMethod< TInputImageType > SingleResRegistrationType
Definition: itkImageRegistrationFactory.h:240
itk::NearestNeighborInterpolateImageFunction< TInputImageType, TScalarType > NearestNeighbourInterpolatorType
Definition: itkImageRegistrationFactory.h:185
itk::SmartPointer< Self > Pointer
Definition: itkIterationUpdateCommand.h:43
PowellOptimizerType * PowellOptimizerPointer
Definition: itkImageRegistrationFactory.h:233
TInputImageType::PixelType InputPixelType
Definition: itkImageRegistrationFactory.h:174
itk::RIUImageToImageMetric< TInputImageType, TInputImageType > RIUMetricType
Definition: itkImageRegistrationFactory.h:205
UCLPowellOptimizerType * UCLPowellOptimizerPointer
Definition: itkImageRegistrationFactory.h:237
Definition: itkImageRegistrationFactory.h:125
itk::GradientDescentOptimizer GradientDescentType
Definition: itkImageRegistrationFactory.h:226
Definition: itkImageRegistrationFactory.h:99
Translation + PCA deformation model transformation.
Definition: itkTranslationPCADeformationModelTransform.h:67
Definition: itkImageRegistrationFactory.h:123
Initial implementation of Seb Ourselin's block matching algorithm.
Definition: itkBlockMatchingMethod.h:67
itk::NMIImageToImageMetric< TInputImageType, TInputImageType > NMIMetricType
Definition: itkImageRegistrationFactory.h:209
itk::RigidPlusScaleImageRegistrationMethod< TInputImageType > RigidPlusScaleRegistrationType
Definition: itkImageRegistrationFactory.h:243
Definition: itkImageRegistrationFactory.h:122
itk::PCADeformationModelTransform< TScalarType, Dimension > PCADeformationModelTransformType
Definition: itkImageRegistrationFactory.h:219
Definition: itkImageRegistrationFactory.h:134
itk::FluidDeformableTransform< TInputImageType, TScalarType, Dimension, float > FluidDeformableTransformType
Definition: itkImageRegistrationFactory.h:217
Definition: itkImageRegistrationFactory.h:136
Definition: itkImageRegistrationFactory.h:143
Definition: itkImageRegistrationFactory.h:84
SingleResRegistrationMethodTypeEnum
Definition: itkImageRegistrationFactory.h:128
itk::BlockMatchingMethod< TInputImageType, TScalarType > BlockMatchingRegistrationType
Definition: itkImageRegistrationFactory.h:244
itk::UCLRegularStepGradientDescentOptimizer RegularStepGradientDescentType
Definition: itkImageRegistrationFactory.h:228
SmartPointer< const Self > ConstPointer
Definition: itkImageRegistrationFactory.h:168
Implements Joint Entropy of a histogram for a similarity measure.
Definition: itkJEImageToImageMetric.h:29
itk::PowellOptimizer PowellOptimizerType
Definition: itkImageRegistrationFactory.h:232
Implements Roger Woods PIU image similarity measure.
Definition: itkPIUImageToImageMetric.h:29
Implements Roger Woods Ratio Image Uniformity, but beware, its non-symetrical, as the base class does...
Definition: itkRIUImageToImageMetric.h:31
Deformable transform using a fluid representation.
Definition: itkFluidDeformableTransform.h:35
itk::UCLBSplineTransform< TInputImageType, TScalarType, Dimension, float > BSplineDeformableTransformType
Definition: itkImageRegistrationFactory.h:216
itk::TranslationPCADeformationModelTransform< TScalarType, Dimension > TranslationPCADeformationModelTransformType
Definition: itkImageRegistrationFactory.h:220
PCA deformation model transformation.
Definition: itkPCADeformationModelTransform.h:71
itk::SADImageToImageMetric< TInputImageType, TInputImageType > SADMetricType
Definition: itkImageRegistrationFactory.h:204
Definition: itkUCLRegularStepGradientDescentOptimizer.h:42
itk::VnlIterationUpdateCommand VnlIterationUpdateCommandType
Definition: itkImageRegistrationFactory.h:181
SmartPointer< Self > Pointer
Definition: itkMultiResolutionImageRegistrationWrapper.h:47
Definition: itkUCLPowellOptimizer.h:64
itk::TranslateRotateScaleImageRegistrationMethod< TInputImageType > TranslateRotateScaleRegistrationType
Definition: itkImageRegistrationFactory.h:242
Parameterised Factory Pattern [2] for creating registration objects.
Definition: itkImageRegistrationFactory.h:160
SmartPointer< Self > Pointer
Definition: itkEulerAffineTransform.h:49
itk::BSplineInterpolateImageFunction< TInputImageType, TScalarType > BSplineInterpolatorType
Definition: itkImageRegistrationFactory.h:187
itk::CRImageToImageMetric< TInputImageType, TInputImageType > CRMetricType
Definition: itkImageRegistrationFactory.h:210
UCLRegularStepOptimizerType * UCLRegularStepOptimizerTypePointer
Definition: itkImageRegistrationFactory.h:235
GLsizei const GLcharARB ** string
Definition: glew.h:5194
Definition: itkImageRegistrationFactory.h:110
UCL Base class for multi-resolution image registration methods.
Definition: itkMultiResolutionImageRegistrationWrapper.h:41
Definition: itkImageRegistrationFactory.h:101
itk::PIUImageToImageMetric< TInputImageType, TInputImageType > PIUMetricType
Definition: itkImageRegistrationFactory.h:206
GradientDescentType * GradientDescentPointer
Definition: itkImageRegistrationFactory.h:227