NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkIterativeReconstructionAndRegistrationMethod.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 itkIterativeReconstructionAndRegistrationMethod_h
16 #define itkIterativeReconstructionAndRegistrationMethod_h
17 
18 #include <itkProcessObject.h>
21 #include <itkDataObjectDecorator.h>
23 
24 
25 namespace itk
26 {
27 
37 template <class IntensityType = double>
38 class ITK_EXPORT IterativeReconstructionAndRegistrationMethod : public ProcessObject
39 {
40 public:
43  typedef ProcessObject Superclass;
44  typedef SmartPointer<Self> Pointer;
45  typedef SmartPointer<const Self> ConstPointer;
46 
49 
51  itkNewMacro(Self);
52 
54  itkTypeMacro(IterativeReconstructionAndRegistrationMethod, ProcessObject);
55 
57 
59 
63 
67  typedef typename ReconstructionType::SpacingType ReconstructionSpacingType;
68  typedef typename ReconstructionType::PointType ReconstructionPointType;
69  typedef typename ReconstructionType::Pointer ReconstructionPointer;
70 
73  typedef typename ReconstructionOptimizerType::Pointer ReconstructionOptimizerPointer;
74 
78 
82 
84 
86 
89 
90 
93  typedef ReconstructionType ReconstructionAndRegistrationOutputType;
94  typedef typename ReconstructionAndRegistrationOutputType::Pointer ReconstructionAndRegistrationOutputPointer;
95  typedef typename ReconstructionAndRegistrationOutputType::ConstPointer ReconstructionAndRegistrationOutputConstPointer;
96 
99  typedef DataObjectDecorator< TransformType > TransformOutputType;
100  typedef typename TransformOutputType::Pointer TransformOutputPointer;
101  typedef typename TransformOutputType::ConstPointer TransformOutputConstPointer;
102 
104  itkSetObjectMacro( RegistrationFilter, RegistrationFilterType );
105  itkGetObjectMacro( RegistrationFilter, RegistrationFilterType );
106 
108  void SetFlagUpdateReconEstimateWithAverage( bool flag) {m_FlagUpdateReconEstimateWithAverage = flag; this->Modified();}
109  bool GetFlagUpdateReconEstimateWithAverage( void ) {return m_FlagUpdateReconEstimateWithAverage;}
110 
112  itkSetObjectMacro( ReconstructionAndRegistrationUpdateCommand, ReconstructionAndRegistrationUpdateCommandType );
113  itkGetObjectMacro( ReconstructionAndRegistrationUpdateCommand, ReconstructionAndRegistrationUpdateCommandType );
114 
116  void SetInputFixedImageProjections( InputProjectionVolumeType *imFixedProjections);
118  void SetInputMovingImageProjections( InputProjectionVolumeType *imMovingProjections);
119 
121  void SetFixedReconEstimate( ReconstructionType *im3D);
123  void SetMovingReconEstimate( ReconstructionType *im3D);
124 
126  void SetReconstructedVolumeSize(ReconstructionSizeType &reconSize);
127  void SetReconstructedVolumeSpacing(ReconstructionSpacingType &reconSpacing);
128  void SetReconstructedVolumeOrigin(ReconstructionPointType &reconOrigin);
129 
131  void SetProjectionGeometry(ProjectionGeometryType *geometry) {
132  m_FixedImageReconstructor->SetProjectionGeometry(geometry);
133  m_MovingImageReconstructor->SetProjectionGeometry(geometry);
134  this->Modified();
135  }
136 
138  void SetFixedReconstructionMetric(ReconstructionMetricType *metric) {
139  m_FixedImageReconstructor->SetMetric(metric);
140  this->Modified();
141  }
143  void SetMovingReconstructionMetric(ReconstructionMetricType *metric) {
144  m_MovingImageReconstructor->SetMetric(metric);
145  this->Modified();
146  }
147 
149  void SetFixedReconstructionOptimizer(ReconstructionOptimizerType *optimizer) {
150  m_FixedImageReconstructor->SetOptimizer(optimizer);
151  this->Modified();
152  }
154  void SetMovingReconstructionOptimizer(ReconstructionOptimizerType *optimizer) {
155  m_MovingImageReconstructor->SetOptimizer(optimizer);
156  this->Modified();
157  }
158 
160  void SetNumberOfReconRegnIterations(unsigned int n) {
161  m_NumberOfReconRegnIterations = n;
162  this->Modified();
163  }
166  return m_NumberOfReconRegnIterations;
167  }
168 
170  virtual void Initialise() throw (ExceptionObject);
171 
173  const ReconstructionType* GetReconOutput(unsigned int output) const;
175  const ReconstructionType* GetFixedReconOutput(void) const {return GetReconOutput(0);}
177  const ReconstructionType* GetMovingReconOutput(void) const {return GetReconOutput(1);}
178 
180  const TransformType* GetTransformationOutput(void) const;
181 
183  const ReconstructionAndRegistrationOutputType *GetReconstructedVolume() const;
184 
186  void GraftNthOutput(unsigned int idx, const itk::DataObject *graft);
187 
190  unsigned long GetMTime() const;
191 
192 protected:
195  void PrintSelf(std::ostream& os, Indent indent) const;
196 
199  virtual void GenerateOutputInformation() {};
200 
205  void StartReconstructionAndRegistration(void);
206 
211  void StartOptimization(void);
212 
215  void GenerateData ();
216 
217 
218 private:
219  IterativeReconstructionAndRegistrationMethod(const Self&); // purposely not implemented
220  void operator=(const Self&); // purposely not implemented
221 
222  bool m_FlagInitialised;
223 
224  /* Flag indicating whether to update the 3D reconstruction estimate volume with the average of
225  the existing estimate and the supplied volume. */
226  bool m_FlagUpdateReconEstimateWithAverage;
227 
228  // The number of combined registration-reconstruction iterations to perform
229  unsigned int m_NumberOfReconRegnIterations;
230 
231  // Pointers to the source and target reconstructors
232  ImageReconstructionMethodPointer m_FixedImageReconstructor;
233  ImageReconstructionMethodPointer m_MovingImageReconstructor;
234 
235  // Pointer to the registration filter
236  ImageRegistrationFilterPointer m_RegistrationFilter;
237 
239  ReconstructionAndRegistrationUpdateCommandPointer m_ReconstructionAndRegistrationUpdateCommand;
240 
241 };
242 
243 
244 } // end namespace itk
245 
246 #ifndef ITK_MANUAL_INSTANTIATION
247 #include "itkIterativeReconstructionAndRegistrationMethod.txx"
248 #endif
249 
250 #endif
251 
252 
253 
ReconstructionAndRegistrationOutputType::ConstPointer ReconstructionAndRegistrationOutputConstPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:95
SmartPointer< Self > Pointer
Definition: itkImageReconstructionMetric.h:43
virtual ~IterativeReconstructionAndRegistrationMethod()
Definition: itkIterativeReconstructionAndRegistrationMethod.h:194
ReconstructionOptimizerType::Pointer ReconstructionOptimizerPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:73
virtual void GenerateOutputInformation()
Definition: itkIterativeReconstructionAndRegistrationMethod.h:199
SmartPointer< Self > Pointer
Definition: itkProjectionGeometry.h:36
ReconstructionType::Pointer ReconstructionPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:69
ReconstructionType::IndexType ReconstructionIndexType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:66
void SetMovingReconstructionOptimizer(ReconstructionOptimizerType *optimizer)
Set the moving image reconstruction optimizer.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:154
ImageType::SizeType SizeType
Definition: niftkMakeLapUSProbeBasicModel.cxx:31
Used to plug registration methods into a filter based pipeline.
Definition: itkImageRegistrationFilter.h:59
Base class for Image Reconstruction Methods.
Definition: itkImageReconstructionMethod.h:44
void SetNumberOfReconRegnIterations(unsigned int n)
Set the number of combined registration-reconstruction iterations to perform.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:160
ImageReconstructionMethodType::ReconstructionType ReconstructionType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:62
itk::SmartPointer< Self > Pointer
Definition: itkReconstructionAndRegistrationUpdateCommand.h:41
RegistrationFilterType::TransformType TransformType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:88
Definition: niftkITKAffineResampleImage.cxx:74
SmartPointer< Self > Pointer
Definition: itkImageRegistrationFilter.h:66
ImageType::IndexType IndexType
Definition: niftkMakeLapUSProbeBasicModel.cxx:32
ImageReconstructionMethodType::MetricType ReconstructionMetricType
The type of the metric.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:76
void GetNumberOfReconRegnIterations(void)
Get the number of combined registration-reconstruction iterations to perform.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:165
itk::ImageReconstructionMethod< IntensityType > ImageReconstructionMethodType
Define the reconstruction types.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:54
TransformOutputType::Pointer TransformOutputPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:100
void SetFixedReconstructionOptimizer(ReconstructionOptimizerType *optimizer)
Set the fixed image reconstruction optimizer.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:149
ReconstructionMetricType::Pointer ReconstructionMetricPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:77
IterativeReconstructionAndRegistrationMethod Self
Definition: itkIterativeReconstructionAndRegistrationMethod.h:42
itk::ImageRegistrationFilter< ReconstructionType, ReconstructionType, 3, double, float > RegistrationFilterType
Define the registration filter type.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:85
ProjectionGeometryType::Pointer ProjectionGeometryPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:81
Abstract class to calculate the geometry of a CT or tomo machine.
Definition: itkProjectionGeometry.h:29
SmartPointer< Self > Pointer
Definition: itkImageReconstructionMethod.h:50
SmartPointer< const Self > ConstPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:45
bool GetFlagUpdateReconEstimateWithAverage(void)
Definition: itkIterativeReconstructionAndRegistrationMethod.h:109
ImageReconstructionMethodType::Pointer ImageReconstructionMethodPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:60
itk::ReconstructionAndRegistrationUpdateCommand ReconstructionAndRegistrationUpdateCommandType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:47
DataObjectDecorator< TransformType > TransformOutputType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:99
void SetFixedReconstructionMetric(ReconstructionMetricType *metric)
Set the fixed image reconstruction metric.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:138
ImageType::RegionType RegionType
Definition: niftkMakeLapUSProbeBasicModel.cxx:30
void SetFlagUpdateReconEstimateWithAverage(bool flag)
Definition: itkIterativeReconstructionAndRegistrationMethod.h:108
Override this class to redefine DoExecute().
Definition: itkReconstructionAndRegistrationUpdateCommand.h:36
SmartPointer< Self > Pointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:44
ReconstructionAndRegistrationOutputType::Pointer ReconstructionAndRegistrationOutputPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:94
Class to compute the difference between a reconstruction estimate and the target set of 2D projection...
Definition: itkImageReconstructionMetric.h:36
ReconstructionType ReconstructionAndRegistrationOutputType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:93
ProcessObject Superclass
Definition: itkIterativeReconstructionAndRegistrationMethod.h:43
const ReconstructionType * GetMovingReconOutput(void) const
Definition: itkIterativeReconstructionAndRegistrationMethod.h:177
SingleValuedNonLinearOptimizer OptimizerType
Type of the optimizer.
Definition: itkImageReconstructionMethod.h:85
Base class for iterative image reconstruction and registration methods.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:38
void SetProjectionGeometry(ProjectionGeometryType *geometry)
Set the Projection Geometry.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:131
Simultaneous itk::Image and itk::Array (and hence vnl_vector) class.
ReconstructionType::SpacingType ReconstructionSpacingType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:67
GLclampd n
Definition: glew.h:6789
RegistrationFilterType::Pointer ImageRegistrationFilterPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:87
ReconstructionType::SizeType ReconstructionSizeType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:65
SingleResType::TransformType TransformType
Definition: itkImageRegistrationFilter.h:86
ImageReconstructionMethodType::InputProjectionVolumeType InputProjectionVolumeType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:61
ReconstructionType::PointType ReconstructionPointType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:68
ReconstructionAndRegistrationUpdateCommand::Pointer ReconstructionAndRegistrationUpdateCommandPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:48
TransformOutputType::ConstPointer TransformOutputConstPointer
Definition: itkIterativeReconstructionAndRegistrationMethod.h:101
ReconstructionType::RegionType ReconstructionRegionType
Definition: itkIterativeReconstructionAndRegistrationMethod.h:64
void SetMovingReconstructionMetric(ReconstructionMetricType *metric)
Set the moving image reconstruction metric.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:143
ImageReconstructionMethodType::ProjectionGeometryType ProjectionGeometryType
The projection geometry type.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:80
ImageReconstructionMethodType::OptimizerType ReconstructionOptimizerType
Type of the optimizer.
Definition: itkIterativeReconstructionAndRegistrationMethod.h:72