NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkMammogramRegistrationFilter.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 itkMammogramRegistrationFilter_h
16 #define itkMammogramRegistrationFilter_h
17 
18 #include <itkImageToImageFilter.h>
19 
20 #include <itkImageFileReader.h>
21 #include <itkImageFileWriter.h>
22 
23 #include <itkImageMomentsCalculator.h>
26 
32 namespace itk
33 {
34 
35 
36 template< class TInputImage, class TOutputImage >
38  public ImageToImageFilter< TInputImage, TOutputImage >
39 {
40 public:
41 
44  typedef ImageToImageFilter< TInputImage, TOutputImage > Superclass;
45  typedef SmartPointer< Self > Pointer;
46 
48  itkNewMacro(Self);
49 
51  itkTypeMacro(MammogramRegistrationFilter, ImageToImageFilter);
52 
54  itkStaticConstMacro(ImageDimension, unsigned int,
55  TInputImage::ImageDimension);
56 
58  typedef TInputImage InputImageType;
59  typedef typename InputImageType::Pointer InputImagePointer;
60  typedef typename InputImageType::ConstPointer InputImageConstPointer;
63  typedef typename InputImageType::SpacingType InputImageSpacingType;
64  typedef typename InputImageType::PointType InputImagePointType;
65 
66  typedef typename NumericTraits<InputImagePixelType>::RealType RealType;
67 
69  typedef TOutputImage OutputImageType;
70  typedef typename OutputImageType::Pointer OutputImagePointer;
74  typedef typename OutputImageType::PointType OutputImagePointType;
75 
76 
77  typedef typename itk::Vector< float, ImageDimension > VectorPixelType;
78  typedef typename itk::Image< VectorPixelType, ImageDimension > DeformationFieldType;
79 
80  typedef typename itk::ImageFileReader< InputImageType > FileReaderType;
81  typedef typename itk::ImageFileWriter< InputImageType > FileWriterType;
82 
83 
84 
85  typedef double ScalarType;
86 
88 
91 
92  typedef typename itk::ImageMomentsCalculator< InputImageType > ImageMomentCalculatorType;
93 
95 
96 
97  void SetVerboseOn( void ) { m_FlgVerbose = true; }
98  void SetVerboseOff( void ) { m_FlgVerbose = false; }
99 
100  void SetDebugOn( void ) { m_FlgDebug = true; }
101  void SetDebugOff( void ) { m_FlgDebug = false; }
102 
103  void SetOverwriteRegistration( void ) { m_FlgOverwrite = true; }
104 
107 
109  typedef enum {
114 
117  m_TypeOfInputImagesToRegister = regImagesType;
118  }
119 
121  itkSetMacro( ControlPointSpacing, float );
123  itkGetMacro( ControlPointSpacing, float );
124 
126  itkSetMacro( NumberOfLevels, unsigned int );
128  itkGetMacro( NumberOfLevels, unsigned int );
129 
131  itkSetMacro( NumberOfLevelsToUse, unsigned int );
133  itkGetMacro( NumberOfLevelsToUse, unsigned int );
134 
135 
137  void SetTargetImage(InputImagePointer imTarget) { this->SetInput(0, imTarget); }
138 
140  void SetSourceImage(InputImagePointer imSource) { this->SetInput(1, imSource); }
141 
143  void SetTargetMask(InputImagePointer maskTarget) { this->SetInput(2, maskTarget); }
144 
146  void SetSourceMask(InputImagePointer maskSource) { this->SetInput(3, maskSource); }
147 
149  void SetTargetRegnMask(InputImagePointer maskTargetRegn) { this->SetInput(4, maskTargetRegn); }
150 
151 
152 
154  void SetWorkingDirectory( std::string directory ) {
155  m_DirWorking = directory;
156  }
157 
158 
160  void SetFileTarget( std::string filename ) {
161  m_FileTarget = filename;
162  }
164  void SetFileSource( std::string filename ) {
165  m_FileSource = filename;
166  }
167 
169  void SetFileTargetMask( std::string filename ) {
170  m_FileTargetMask = filename;
171  }
173  void SetFileSourceMask( std::string filename ) {
174  m_FileSourceMask = filename;
175  }
176 
180  }
181 
185  }
186 
190  }
194  }
195 
199  }
203  }
206  m_FileOutputDeformation = fileOut;
207  }
208 
212  }
216  }
217 
220 
222  InputImagePointType TransformPoint( InputImagePointType point );
223 
225  void NonRigidlyTransformImageFile( std::string fileImage, std::string fileResult );
226 
227 #ifdef ITK_USE_CONCEPT_CHECKING
228  itkConceptMacro(DimensionShouldBe2,
230  (Concept::SameDimension<itkGetStaticConstMacro(InputImageDimension),2>));
231  itkConceptMacro(InputHasNumericTraitsCheck,
232  (Concept::HasNumericTraits<InputImagePixelType>));
233  itkConceptMacro(OutputHasPixelTraitsCheck,
234  (Concept::HasPixelTraits<OutputImagePixelType>));
236 #endif
237 
238 
239 protected:
242 
245 
248 
251 
254 
257 
259  unsigned int m_NumberOfLevels;
261  unsigned int m_NumberOfLevelsToUse;
262 
267 
272 
277 
280 
283 
288 
293 
296 
301 
303  InputImagePointer m_Target;
305  InputImagePointer m_Source;
306 
308  InputImagePointer m_TargetMask;
310  InputImagePointer m_SourceMask;
311 
313  InputImagePointer m_TargetRegnMask;
314 
316  EulerAffinePointerType m_AffineTransform;
317 
319  typename DeformationFieldType::Pointer m_DeformationField;
320 
323 
325  InputImagePointer GetDistanceTransform( InputImagePointer imMask );
326 
328  InputImagePointer GetTargetRegistrationMask( InputImagePointer imMask );
329 
331  void InitialiseTransformationFromImageMoments( InputImagePointer imTarget,
332  InputImagePointer imSource );
333 
335  std::string AddSamplingFactorSuffix( std::string fileInput, float ampling );
338 
340  void Print( void );
341 
343  InputImagePointer RunAffineRegistration( InputImagePointer imTarget,
344  InputImagePointer imSource,
345  int finalInterpolator=4,
346  int registrationInterpolator=2 );
347 
349  InputImagePointer RunNonRigidRegistration( void );
350 
352  bool ReadAffineTransformation( std::string fileAffineTransformation );
354  bool ReadNonRigidDeformationField( std::string fileInputDeformation );
355 
357  bool ReadRegistrationData();
358 
360  virtual void GenerateData();
361 
363  DataObject::Pointer MakeOutput(unsigned int idx);
364 
365 private:
366  MammogramRegistrationFilter(const Self &); //purposely not implemented
367  void operator=(const Self &); //purposely not implemented
368 
369 };
370 
371 
372 } // namespace itk
373 
374 
375 #ifndef ITK_MANUAL_INSTANTIATION
376 #include "itkMammogramRegistrationFilter.txx"
377 #endif
378 
379 #endif
380 
381 
void SetTargetImage(InputImagePointer imTarget)
Set the target image.
Definition: itkMammogramRegistrationFilter.h:137
InputImagePointer RunAffineRegistration(InputImagePointer imTarget, InputImagePointer imSource, int finalInterpolator=4, int registrationInterpolator=2)
The affine registration.
TOutputImage OutputImageType
Type of the output image.
Definition: itkMammogramRegistrationFilter.h:69
2D image filter class to segment the breast area from a mammogram.
Definition: itkMammogramMaskSegmentationImageFilter.h:28
bool ReadRegistrationData()
Read the transformations instead of re-running them?
virtual void GenerateData()
Does the real work.
bool m_FlgOverwrite
Overwrite existing registration even if it already exists.
Definition: itkMammogramRegistrationFilter.h:247
std::string m_FileSourceDistanceTransform
The output source mask distance transform image.
Definition: itkMammogramRegistrationFilter.h:287
std::string FileOfImageWithDimensionsLessThan2048(std::string fileInput)
Create a subsampled image if any of the image dimensions exceed 2048.
InputImagePointer GetDistanceTransform(InputImagePointer imMask)
Compute the distance transform of a mask.
bool ReadAffineTransformation(std::string fileAffineTransformation)
Read the affine transformation.
std::string m_FileSourceMask
The input source mask image filename.
Definition: itkMammogramRegistrationFilter.h:276
std::string m_FileTargetDistanceTransform
The output target mask distance transform image.
Definition: itkMammogramRegistrationFilter.h:285
std::string m_FileOutputAffineRegistered
The output affine registered image.
Definition: itkMammogramRegistrationFilter.h:298
std::string m_FileTarget
The input target image filename.
Definition: itkMammogramRegistrationFilter.h:269
itk::ImageRegistrationFactory< InputImageType, ImageDimension, ScalarType > FactoryType
Definition: itkMammogramRegistrationFilter.h:87
double ScalarType
Definition: itkMammogramRegistrationFilter.h:85
void SetFileOutputNonRigidTransformation(std::string fileOut)
Set the output non-rigid transformation (control-point) file.
Definition: itkMammogramRegistrationFilter.h:201
InputImagePointer m_Target
The target image.
Definition: itkMammogramRegistrationFilter.h:303
enumRegistrationImagesType m_TypeOfInputImagesToRegister
Specify the input images to register.
Definition: itkMammogramRegistrationFilter.h:253
void SetFileSource(std::string filename)
Set the source image filename.
Definition: itkMammogramRegistrationFilter.h:164
OutputImageType::PixelType OutputImagePixelType
Definition: itkMammogramRegistrationFilter.h:72
InputImagePointer GetTargetRegistrationMask(InputImagePointer imMask)
Expand the target mask to include the breast edge.
itk::ImageMomentsCalculator< InputImageType > ImageMomentCalculatorType
Definition: itkMammogramRegistrationFilter.h:92
DeformationFieldType::Pointer m_DeformationField
The registration deformation field.
Definition: itkMammogramRegistrationFilter.h:319
void SetFileOutputNonRigidRegistered(std::string fileOut)
Set the output non-rigid registered file.
Definition: itkMammogramRegistrationFilter.h:214
itk::Image< VectorPixelType, ImageDimension > DeformationFieldType
Definition: itkMammogramRegistrationFilter.h:78
Definition: niftkITKAffineResampleImage.cxx:74
ImageType::IndexType IndexType
Definition: niftkMakeLapUSProbeBasicModel.cxx:32
NumericTraits< InputImagePixelType >::RealType RealType
Definition: itkMammogramRegistrationFilter.h:66
void SetTargetRegnMask(InputImagePointer maskTargetRegn)
Set the target registration mask.
Definition: itkMammogramRegistrationFilter.h:149
ImageToImageFilter< TInputImage, TOutputImage > Superclass
Definition: itkMammogramRegistrationFilter.h:44
EulerAffineTransformType::Pointer EulerAffinePointerType
Definition: itkMammogramRegistrationFilter.h:90
TInputImage InputImageType
Type of the input image.
Definition: itkMammogramRegistrationFilter.h:58
void SetFileOutputDeformation(std::string fileOut)
Set the output deformation field file.
Definition: itkMammogramRegistrationFilter.h:205
SmartPointer< Self > Pointer
Definition: itkMammogramRegistrationFilter.h:45
void SetRegisterNonRigid(void)
Specify whether to perform a non-rigid registration.
Definition: itkMammogramRegistrationFilter.h:219
InputImagePointer m_TargetMask
The target mask image.
Definition: itkMammogramRegistrationFilter.h:308
InputImageType::PointType InputImagePointType
Definition: itkMammogramRegistrationFilter.h:64
enumRegistrationImagesType
The input images to register.
Definition: itkMammogramRegistrationFilter.h:109
Definition: itkMammogramRegistrationFilter.h:111
Euler Affine transform.
Definition: itkEulerAffineTransform.h:38
void SetFileInputTargetRegistrationMask(std::string filename)
Set the input target registration mask filename.
Definition: itkMammogramRegistrationFilter.h:178
InputImagePointType TransformPoint(InputImagePointType point)
Transform a point from the target image to the source.
bool m_FlgVerbose
Definition: itkMammogramRegistrationFilter.h:243
void SetFileTargetMask(std::string filename)
Set the target mask image filename.
Definition: itkMammogramRegistrationFilter.h:169
void SetFileTarget(std::string filename)
Set the target image filename.
Definition: itkMammogramRegistrationFilter.h:160
itk::ImageFileWriter< InputImageType > FileWriterType
Definition: itkMammogramRegistrationFilter.h:81
DataObject::Pointer MakeOutput(unsigned int idx)
Create the Output.
itkStaticConstMacro(ImageDimension, unsigned int, TInputImage::ImageDimension)
Image dimension.
InputImagePointer RunNonRigidRegistration(void)
The a non-rigid registration.
void SetFileOutputTargetRegistrationMask(std::string fileOut)
Set the output target registration mask filename.
Definition: itkMammogramRegistrationFilter.h:183
MammogramRegistrationFilter Self
Standard class typedefs.
Definition: itkMammogramRegistrationFilter.h:43
unsigned int m_NumberOfLevels
The number of multi-scale registration levels.
Definition: itkMammogramRegistrationFilter.h:259
InputImagePointer m_Source
The source image.
Definition: itkMammogramRegistrationFilter.h:305
void SetFileSourceDistanceTransform(std::string fileOut)
Set the output source mask distance transform image.
Definition: itkMammogramRegistrationFilter.h:192
std::string m_FileTargetMask
The input target mask image filename.
Definition: itkMammogramRegistrationFilter.h:274
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
bool ReadNonRigidDeformationField(std::string fileInputDeformation)
Read the affine transformation.
itk::MammogramMaskSegmentationImageFilter< InputImageType, InputImageType > MammogramMaskFilterType
Definition: itkMammogramRegistrationFilter.h:94
void SetFileOutputAffineTransformation(std::string fileOut)
Set the output affine transformation matrix file.
Definition: itkMammogramRegistrationFilter.h:197
std::string m_FileSource
The input source image filename.
Definition: itkMammogramRegistrationFilter.h:271
ImageType::RegionType RegionType
Definition: niftkMakeLapUSProbeBasicModel.cxx:30
InputImageType::ConstPointer InputImageConstPointer
Definition: itkMammogramRegistrationFilter.h:60
InputImagePointer m_TargetRegnMask
The target registration mask image.
Definition: itkMammogramRegistrationFilter.h:313
void SetFileOutputAffineRegistered(std::string fileOut)
Set the output affine registered file.
Definition: itkMammogramRegistrationFilter.h:210
void SetDebugOn(void)
Definition: itkMammogramRegistrationFilter.h:100
bool m_FlgDebug
Definition: itkMammogramRegistrationFilter.h:244
unsigned int m_NumberOfLevelsToUse
The number of multi-scale registration levels to use.
Definition: itkMammogramRegistrationFilter.h:261
void SetWorkingDirectory(std::string directory)
Set the working directory for storing any intermediate files.
Definition: itkMammogramRegistrationFilter.h:154
OutputImageType::IndexType OutputImageIndexType
Definition: itkMammogramRegistrationFilter.h:73
void SetSourceImage(InputImagePointer imSource)
Set the source image.
Definition: itkMammogramRegistrationFilter.h:140
std::string m_FileOutputDeformation
The output deformation field.
Definition: itkMammogramRegistrationFilter.h:295
Definition: itkMammogramRegistrationFilter.h:110
EulerAffinePointerType m_AffineTransform
The affine transformation.
Definition: itkMammogramRegistrationFilter.h:316
std::string m_FileInputTargetRegistrationMask
The input target registration mask filename.
Definition: itkMammogramRegistrationFilter.h:279
Definition: itkMammogramRegistrationFilter.h:112
InputImageType::PixelType InputImagePixelType
Definition: itkMammogramRegistrationFilter.h:62
InputImagePointer m_SourceMask
The source mask image.
Definition: itkMammogramRegistrationFilter.h:310
bool m_FlgRegisterNonRigid
Specify whether to perform a non-rigid registration.
Definition: itkMammogramRegistrationFilter.h:250
InputImageType::Pointer InputImagePointer
Definition: itkMammogramRegistrationFilter.h:59
void SetTargetMask(InputImagePointer maskTarget)
Set the target mask.
Definition: itkMammogramRegistrationFilter.h:143
itk::Vector< float, ImageDimension > VectorPixelType
Definition: itkMammogramRegistrationFilter.h:77
void InitialiseTransformationFromImageMoments(InputImagePointer imTarget, InputImagePointer imSource)
Initialise the affine transform using the image moments.
std::string AddSamplingFactorSuffix(std::string fileInput, float ampling)
Create a new filename for a subsampled image.
OutputImageType::RegionType OutputImageRegionType
Definition: itkMammogramRegistrationFilter.h:71
InputImageType::RegionType InputImageRegionType
Definition: itkMammogramRegistrationFilter.h:61
~MammogramRegistrationFilter()
Definition: itkMammogramRegistrationFilter.h:241
FactoryType::EulerAffineTransformType EulerAffineTransformType
Definition: itkMammogramRegistrationFilter.h:89
InputImageType::SpacingType InputImageSpacingType
Definition: itkMammogramRegistrationFilter.h:63
std::string m_DirWorking
A working directory for storing any intermediate files.
Definition: itkMammogramRegistrationFilter.h:264
void Print(void)
Print the object.
void SetVerboseOn(void)
Definition: itkMammogramRegistrationFilter.h:97
std::string m_FileOutputNonRigidRegistered
The output non-rigidly registered image.
Definition: itkMammogramRegistrationFilter.h:300
std::string m_FileOutputNonRigidTransformation
The output non-rigid transformation.
Definition: itkMammogramRegistrationFilter.h:292
OutputImageType::PointType OutputImagePointType
Definition: itkMammogramRegistrationFilter.h:74
void SetFileSourceMask(std::string filename)
Set the source mask image filename.
Definition: itkMammogramRegistrationFilter.h:173
void SetOverwriteRegistration(void)
Definition: itkMammogramRegistrationFilter.h:103
void SetExecutablesDirectoryToTry(std::string dir)
Set the directory to look for executables in.
Definition: itkMammogramRegistrationFilter.h:106
void SetSourceMask(InputImagePointer maskSource)
Set the source mask.
Definition: itkMammogramRegistrationFilter.h:146
float m_ControlPointSpacing
The final control point spacing in mm.
Definition: itkMammogramRegistrationFilter.h:256
void NonRigidlyTransformImageFile(std::string fileImage, std::string fileResult)
Non-rigidly trasnform an image file using the registration.
void SetTypeOfInputImagesToRegister(enumRegistrationImagesType regImagesType)
Set the registration image type.
Definition: itkMammogramRegistrationFilter.h:116
void SetDebugOff(void)
Definition: itkMammogramRegistrationFilter.h:101
std::string m_DirExecutable
A directory to look for executables in.
Definition: itkMammogramRegistrationFilter.h:266
Parameterised Factory Pattern [2] for creating registration objects.
Definition: itkImageRegistrationFactory.h:160
SmartPointer< Self > Pointer
Definition: itkEulerAffineTransform.h:49
itk::ImageFileReader< InputImageType > FileReaderType
Definition: itkMammogramRegistrationFilter.h:80
std::string ImageFileIsNiftiOrConvert(std::string fileInput)
Check if an image is nifti and create a nifti version if not.
void SetVerboseOff(void)
Definition: itkMammogramRegistrationFilter.h:98
GLsizei const GLcharARB ** string
Definition: glew.h:5194
std::string m_FileOutputAffineTransformation
The output affine transformation matrix.
Definition: itkMammogramRegistrationFilter.h:290
std::string m_FileOutputTargetRegistrationMask
The output target registration mask filename.
Definition: itkMammogramRegistrationFilter.h:282
OutputImageType::Pointer OutputImagePointer
Definition: itkMammogramRegistrationFilter.h:70
Definition: itkMammogramRegistrationFilter.h:37
void SetFileTargetDistanceTransform(std::string fileOut)
Set the output target mask distance transform image.
Definition: itkMammogramRegistrationFilter.h:188