NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkSimultaneousReconstructionAndRegistrationMethod.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 
16 #ifndef itkSimultaneousReconstructionAndRegistrationMethod_h
17 #define itkSimultaneousReconstructionAndRegistrationMethod_h
18 
19 #include <itkProcessObject.h>
20 #include <itkImage.h>
22 #include <itkSingleValuedNonLinearOptimizer.h>
23 #include <itkProjectionGeometry.h>
25 
26 
27 namespace itk
28 {
29 
44 template <class IntensityType = double>
45 class ITK_EXPORT SimultaneousReconstructionAndRegistrationMethod : public ProcessObject
46 {
47 public:
50  typedef ProcessObject Superclass;
51  typedef SmartPointer<Self> Pointer;
52  typedef SmartPointer<const Self> ConstPointer;
53 
56 
58  itkNewMacro(Self);
59 
62 
63  // Some convenient typedefs.
64 
69  typedef typename InputProjectionVolumeType::Pointer InputProjectionVolumePointer;
73  typedef typename InputProjectionVolumeType::SpacingType InputProjectionVolumeSpacingType;
74  typedef typename InputProjectionVolumeType::PointType InputProjectionVolumePointType;
75 
77  typedef typename ReconstructionType::Pointer ReconstructionPointer;
81  typedef typename ReconstructionType::SpacingType ReconstructionSpacingType;
82  typedef typename ReconstructionType::PointType ReconstructionPointType;
84 
86  typedef SingleValuedNonLinearOptimizer OptimizerType;
87  typedef typename OptimizerType::Pointer OptimizerPointer;
88 
92 
96 
101 
104  typedef ReconstructionType ReconstructionOutputType;
105  typedef typename ReconstructionOutputType::Pointer ReconstructionOutputPointer;
106  typedef typename ReconstructionOutputType::ConstPointer ReconstructionOutputConstPointer;
107 
109  itkSetObjectMacro( Optimizer, OptimizerType );
110  itkGetObjectMacro( Optimizer, OptimizerType );
111 
113  itkSetObjectMacro( Metric, MetricType );
114  itkGetObjectMacro( Metric, MetricType );
115 
117  itkSetObjectMacro( ProjectionGeometry, ProjectionGeometryType );
118  itkGetObjectMacro( ProjectionGeometry, ProjectionGeometryType );
119 
121  itkSetObjectMacro( SimultaneousReconAndRegnUpdateCommand, SimultaneousReconAndRegnUpdateCommandType );
122  itkGetObjectMacro( SimultaneousReconAndRegnUpdateCommand, SimultaneousReconAndRegnUpdateCommandType );
123 
125  void SetReconEstimate( ReconstructionType *im3D);
126 
128  void UpdateReconstructionEstimate( ReconstructionType *im3D);
131  void UpdateReconstructionEstimateWithAverage( ReconstructionType *im3D);
133  void UpdateInitialParameters(void);
134 
136  bool SetInputFixedImageProjections( InputProjectionVolumeType *imFixedProjections);
138  bool SetInputMovingImageProjections( InputProjectionVolumeType *imMovingProjections);
139 
141  void SetReconstructedVolumeSize(ReconstructionSizeType &reconSize) {m_ReconstructedVolumeSize = reconSize;};
142  void SetReconstructedVolumeSpacing(ReconstructionSpacingType &reconSpacing) {m_ReconstructedVolumeSpacing = reconSpacing;};
143  void SetReconstructedVolumeOrigin(ReconstructionPointType &reconOrigin) {m_ReconstructedVolumeOrigin = reconOrigin;};
144 
146  virtual void Initialise() throw (ExceptionObject);
147 
149  InputProjectionVolumeType *GetInput();
151  ReconstructionOutputType *GetOutput();
152 
154  ReconstructionOutputType *GetReconstructedVolume() const;
155 
158  virtual DataObjectPointer MakeOutput(unsigned int idx);
159 
162  unsigned long GetMTime() const;
163 
165  void SetFlagUpdateReconEstimateWithAverage( bool flag) {m_FlagUpdateReconEstimateWithAverage = flag; this->Modified();}
166  bool GetFlagUpdateReconEstimateWithAverage( void ) {return m_FlagUpdateReconEstimateWithAverage;}
167 
169  void SetNumberOfReconRegnIterations(unsigned int n) {
170  m_NumberOfReconRegnIterations = n;
171  this->Modified();
172  }
175  return m_NumberOfReconRegnIterations;
176  }
177 
178 protected:
181  void PrintSelf(std::ostream& os, Indent indent) const;
182 
185  virtual void GenerateOutputInformation() {};
186 
191  void StartReconstruction(void);
192 
197  void StartOptimization(void);
198 
201  void GenerateData ();
202 
203 
204 private:
205  SimultaneousReconstructionAndRegistrationMethod(const Self&); // purposely not implemented
206  void operator=(const Self&); // purposely not implemented
207 
208  bool m_FlagInitialised;
209 
210  OptimizerPointer m_Optimizer;
211  MetricPointer m_Metric;
212  ProjectionGeometryPointer m_ProjectionGeometry;
213 
214  InputProjectionVolumePointer m_ProjectionImagesFixed;
215  InputProjectionVolumePointer m_ProjectionImagesMoving;
216  ReconstructionPointer m_EnhancedAsOneReconstructor;
217 
218  ParametersType m_InitialParameters;
219  ParametersType m_LastParameters;
220 
221  ReconstructionSizeType m_ReconstructedVolumeSize;
222  ReconstructionSpacingType m_ReconstructedVolumeSpacing;
223  ReconstructionPointType m_ReconstructedVolumeOrigin;
224 
225  /* Flag indicating whether to update the 3D reconstruction estimate volume with the average of
226  the existing estimate and the supplied volume. */
227  bool m_FlagUpdateReconEstimateWithAverage;
228 
229  // The number of combined registration-reconstruction iterations to perform
230  unsigned int m_NumberOfReconRegnIterations;
231 
233  SimultaneousReconAndRegnUpdateCommandPointer m_SimultaneousReconAndRegnUpdateCommand;
234 
235 };
236 
237 
238 } // end namespace itk
239 
240 #ifndef ITK_MANUAL_INSTANTIATION
241 #include "itkSimultaneousReconstructionAndRegistrationMethod.txx"
242 #endif
243 
244 #endif
245 
246 
247 
248 
void GetNumberOfReconRegnIterations(void)
Get the number of combined registration-reconstruction iterations to perform.
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:174
InputProjectionVolumeType::SizeType InputProjectionVolumeSizeType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:72
InputProjectionVolumeType::SpacingType InputProjectionVolumeSpacingType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:73
SmartPointer< Self > Pointer
Definition: itkProjectionGeometry.h:36
InputProjectionVolumeType::PointType InputProjectionVolumePointType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:74
ImageType::SizeType SizeType
Definition: niftkMakeLapUSProbeBasicModel.cxx:31
SimultaneousReconstructionAndRegistrationMethod Self
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:49
Override this class to redefine DoExecute().
Definition: itkSimultaneousReconAndRegnUpdateCommand.h:36
ProcessObject Superclass
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:50
ProjectionGeometryType::Pointer ProjectionGeometryPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:95
ReconstructionType::PixelType ReconstructionPixelType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:79
ReconstructionType::SpacingType ReconstructionSpacingType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:81
Definition: niftkITKAffineResampleImage.cxx:74
virtual void GenerateOutputInformation()
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:185
ImageType::IndexType IndexType
Definition: niftkMakeLapUSProbeBasicModel.cxx:32
InputProjectionVolumeType::Pointer InputProjectionVolumePointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:69
ReconstructionType::PointType ReconstructionPointType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:82
virtual ~SimultaneousReconstructionAndRegistrationMethod()
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:180
void SetReconstructedVolumeOrigin(ReconstructionPointType &reconOrigin)
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:143
ReconstructionType::Pointer ReconstructionPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:77
bool GetFlagUpdateReconEstimateWithAverage(void)
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:166
Abstract class to calculate the geometry of a CT or tomo machine.
Definition: itkProjectionGeometry.h:29
itk::SimultaneousReconAndRegnUpdateCommand SimultaneousReconAndRegnUpdateCommandType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:54
void SetReconstructedVolumeSize(ReconstructionSizeType &reconSize)
Set the size, resolution and origin of the reconstructed image.
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:141
MetricType::ParametersType ParametersType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:100
SmartPointer< Self > Pointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:51
ReconstructionType::RegionType ReconstructionRegionType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:78
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
Base class for Image Reconstruction Methods.
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:45
ImageType::RegionType RegionType
Definition: niftkMakeLapUSProbeBasicModel.cxx:30
MetricType::Pointer MetricPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:91
OptimizerType::Pointer OptimizerPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:87
SimultaneousReconstructionRegistrationMetric< IntensityType > MetricType
The type of the metric.
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:90
Image< IntensityType, 3 > ReconstructionType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:76
SimultaneousReconAndRegnUpdateCommand::Pointer SimultaneousReconAndRegnUpdateCommandPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:55
SmartPointer< const Self > ConstPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:52
InputProjectionVolumeType::RegionType InputProjectionVolumeRegionType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:70
ReconstructionOutputType::Pointer ReconstructionOutputPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:105
ReconstructionType::IndexType ReconstructionIndexType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:83
ReconstructionOutputType::ConstPointer ReconstructionOutputConstPointer
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:106
SmartPointer< Self > Pointer
Definition: itkSimultaneousReconstructionRegistrationMetric.h:44
Class to compute the difference between a reconstruction estimate and the target set of 2D projection...
Definition: itkSimultaneousReconstructionRegistrationMetric.h:37
Simultaneous itk::Image and itk::Array (and hence vnl_vector) class.
GLclampd n
Definition: glew.h:6789
InputProjectionVolumeType::PixelType InputProjectionVolumePixelType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:71
void SetNumberOfReconRegnIterations(unsigned int n)
Set the number of combined registration-reconstruction iterations to perform.
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:169
itk::ProjectionGeometry< IntensityType > ProjectionGeometryType
The projection geometry type.
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:94
Image< IntensityType, 3 > InputProjectionVolumeType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:61
ReconstructionType ReconstructionOutputType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:104
ReconstructionType::SizeType ReconstructionSizeType
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:80
SingleValuedNonLinearOptimizer OptimizerType
Type of the optimizer.
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:86
SingleValuedCostFunction::ParametersType ParametersType
Definition: itkSimultaneousReconstructionRegistrationMetric.h:73
void SetReconstructedVolumeSpacing(ReconstructionSpacingType &reconSpacing)
Definition: itkSimultaneousReconstructionAndRegistrationMethod.h:142
itk::SmartPointer< Self > Pointer
Definition: itkSimultaneousReconAndRegnUpdateCommand.h:41