NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
itkRegistrationBasedCorticalThicknessFilter.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 itkRegistrationBasedCorticalThicknessFilter_h
16 #define itkRegistrationBasedCorticalThicknessFilter_h
17 
18 #include <itkImageToImageFilter.h>
19 
20 namespace itk {
21 
22 /*
23  * \class RegistrationBasedCorticalThicknessFilter
24  * \brief This class implements Das et al Neuroimage 45 (2009) 867-879.
25  *
26  * The inputs to this filter should be exactly as follows.
27  * <pre>
28  * input1 = white matter pv image, set using SetWhiteMatterPVMap(image)
29  * input2 = white + grey pv image, set using SetWhitePlusGreyMatterPVMap(image)
30  * input3 = thickness prior image, set using SetThicknessPriorMap(image)
31  * input4 = the grey white border, as a binary image where 1 = boundary and 0 is background, set using SetGWI(image)
32  * </pre>
33  *
34  * The output is the DiReCT thickness map.
35  *
36  * The image types should all be the same size and float. Note that this class
37  * uses a stationary velocity field, so you can't set n as mentioned in the paper.
38  * n is always 1.
39  *
40  */
41 template< class TInputImage, typename TScalarType>
43  public ImageToImageFilter<TInputImage, TInputImage>
44 {
45 public:
46 
48  typedef TScalarType VectorDataType;
50  typedef ImageToImageFilter<TInputImage, TInputImage> Superclass;
51  typedef SmartPointer<Self> Pointer;
52  typedef SmartPointer<const Self> ConstPointer;
53 
55  itkNewMacro(Self);
56 
58  itkTypeMacro(RegistrationBasedCorticalThicknessFilter, ImageToImageFilter);
59 
61  itkStaticConstMacro(Dimension, unsigned int, TInputImage::ImageDimension);
62 
64  typedef TInputImage ImageType;
65  typedef typename ImageType::PixelType PixelType;
66  typedef typename ImageType::Pointer ImagePointer;
67  typedef typename ImageType::SizeType SizeType;
68  typedef typename ImageType::IndexType IndexType;
70  typedef typename ImageType::SpacingType SpacingType;
71  typedef typename ImageType::PointType OriginType;
72  typedef typename ImageType::DirectionType DirectionType;
73  typedef TScalarType MaskPixelType;
75  typedef typename MaskImageType::Pointer MaskImagePointer;
76  typedef Vector< VectorDataType, itkGetStaticConstMacro(Dimension) > VectorPixelType;
78  typedef typename VectorImageType::Pointer VectorImagePointer;
82  typedef typename VectorImageType::SpacingType VectorImageSpacingType;
83  typedef typename VectorImageType::PointType VectorImagePointType;
84  typedef typename VectorImageType::PointType VectorImageOriginType;
85  typedef typename VectorImageType::DirectionType VectorImageDirectionType;
87  typedef typename TimeVaryingVectorImageType::Pointer TimeVaryingVectorImagePointer;
91  typedef typename TimeVaryingVectorImageType::SpacingType TimeVaryingVectorImageSpacingType;
92  typedef typename TimeVaryingVectorImageType::PointType TimeVaryingVectorImagePointType;
93  typedef typename TimeVaryingVectorImageType::DirectionType TimeVaryingVectorImageDirectionType;
95 
97  void SetWhiteMatterPVMap(ImagePointer image) { this->SetInput(0, image); }
98 
100  void SetWhitePlusGreyMatterPVMap(ImagePointer image) { this->SetInput(1, image); }
101 
103  void SetThicknessPriorMap(ImagePointer image) { this->SetInput(2, image); }
104 
106  void SetGWI(MaskImagePointer image) { this->SetInput(3, image); }
107 
109  void SetGreyMask(MaskImagePointer image) { this->SetInput(4, image); }
110 
112  itkSetMacro(MaxIterations, unsigned int);
113  itkGetMacro(MaxIterations, unsigned int);
114 
116  itkSetMacro(M, unsigned int);
117  itkGetMacro(M, unsigned int);
118 
120  itkSetMacro(Lambda, double);
121  itkGetMacro(Lambda, double);
122 
124  itkSetMacro(UpdateSigma, double);
125  itkGetMacro(UpdateSigma, double);
126 
128  itkSetMacro(DeformationSigma, double);
129  itkGetMacro(DeformationSigma, double);
130 
132  itkSetMacro(Epsilon, double);
133  itkGetMacro(Epsilon, double);
134 
144  itkSetMacro(Alpha, double);
145  itkGetMacro(Alpha, double);
146 
148  itkGetMacro(FieldEnergy, double);
149 
151  itkGetMacro(CostFunction, double);
152 
154  itkGetMacro(MinJacobian, double);
155 
157  itkGetMacro(MaxJacobian, double);
158 
160  itkGetMacro(RMSChange, double);
161 
163  itkGetMacro(SSD, double);
164 
166  itkGetMacro(Cost, double);
167 
169  VectorImageType* GetInterfaceDisplacementImage() const { return m_InterfaceDisplacementImage; }
170 
171 protected:
172 
175  void PrintSelf(std::ostream& os, Indent indent) const;
176 
177  /* The main filter method. Note, single threaded, as we are using a composite filter pattern, so its the contained filters that are threaded. */
178  virtual void GenerateData();
179 
180 private:
181 
186  void operator=(const Self&);
187 
188  unsigned int m_MaxIterations;
189  unsigned int m_M;
190  double m_Epsilon;
191  double m_UpdateSigma;
192  double m_DeformationSigma;
193  double m_Lambda;
194  double m_Alpha;
195  double m_FieldEnergy;
196  double m_RMSChange;
197  double m_MinJacobian;
198  double m_MaxJacobian;
199  double m_CostFunction;
200  double m_MaxThickness;
201  double m_MaxDisplacement;
202  double m_SSD;
203  double m_Cost;
204 
205  VectorImagePointer m_InterfaceDisplacementImage;
206 
207 }; // end class
208 
209 } // end namespace
210 
211 #ifndef ITK_MANUAL_INSTANTIATION
212 #include "itkRegistrationBasedCorticalThicknessFilter.txx"
213 #endif
214 
215 #endif
TimeVaryingVectorImageType::SizeType TimeVaryingVectorImageSizeType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:89
VectorImageType::RegionType VectorImageRegionType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:81
ImageType::SizeType SizeType
Definition: niftkMakeLapUSProbeBasicModel.cxx:31
TScalarType MaskPixelType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:73
ImageType::IndexType IndexType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:68
ImageType::Pointer ImagePointer
Definition: itkRegistrationBasedCorticalThicknessFilter.h:66
TimeVaryingVectorImageType::SpacingType TimeVaryingVectorImageSpacingType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:91
Vector< VectorDataType, itkGetStaticConstMacro(Dimension) > VectorPixelType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:76
ImageType::SizeType SizeType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:67
GLenum GLsizei GLenum GLenum const GLvoid * image
Definition: glew.h:4052
ImageType::SpacingType SpacingType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:70
Image< VectorPixelType, itkGetStaticConstMacro(Dimension)+1 > TimeVaryingVectorImageType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:86
TimeVaryingVectorImageType::DirectionType TimeVaryingVectorImageDirectionType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:93
MaskImageType::Pointer MaskImagePointer
Definition: itkRegistrationBasedCorticalThicknessFilter.h:75
Definition: niftkITKAffineResampleImage.cxx:74
ImageType::IndexType IndexType
Definition: niftkMakeLapUSProbeBasicModel.cxx:32
TInputImage ImageType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:64
~RegistrationBasedCorticalThicknessFilter()
Definition: itkRegistrationBasedCorticalThicknessFilter.h:174
ImageType::PixelType PixelType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:65
ImageToImageFilter< TInputImage, TInputImage > Superclass
Definition: itkRegistrationBasedCorticalThicknessFilter.h:50
void SetThicknessPriorMap(ImagePointer image)
Definition: itkRegistrationBasedCorticalThicknessFilter.h:103
void SetWhiteMatterPVMap(ImagePointer image)
Definition: itkRegistrationBasedCorticalThicknessFilter.h:97
void SetGWI(MaskImagePointer image)
Definition: itkRegistrationBasedCorticalThicknessFilter.h:106
float PixelType
Definition: niftkBreastDCEandADC.cxx:88
SmartPointer< const Self > ConstPointer
Definition: itkRegistrationBasedCorticalThicknessFilter.h:52
ImageType::DirectionType DirectionType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:72
TimeVaryingVectorImageType::Pointer TimeVaryingVectorImagePointer
Definition: itkRegistrationBasedCorticalThicknessFilter.h:87
VectorImageType::PointType VectorImageOriginType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:84
ImageType::RegionType RegionType
Definition: niftkMakeLapUSProbeBasicModel.cxx:30
VectorImageType::DirectionType VectorImageDirectionType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:85
TimeVaryingVectorImageType::IndexType TimeVaryingVectorImageIndexType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:90
TimeVaryingVectorImageType::RegionType TimeVaryingVectorImageRegionType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:94
Image< MaskPixelType, itkGetStaticConstMacro(Dimension)> MaskImageType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:74
VectorImageType::SizeType VectorImageSizeType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:79
Definition: itkImageRegistrationFactory.h:93
ImageType::PointType OriginType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:71
VectorImageType::PointType VectorImagePointType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:83
VectorImageType::SpacingType VectorImageSpacingType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:82
TimeVaryingVectorImageType::PointType TimeVaryingVectorImagePointType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:92
SmartPointer< Self > Pointer
Definition: itkRegistrationBasedCorticalThicknessFilter.h:51
RegistrationBasedCorticalThicknessFilter Self
Definition: itkRegistrationBasedCorticalThicknessFilter.h:49
void SetGreyMask(MaskImagePointer image)
Definition: itkRegistrationBasedCorticalThicknessFilter.h:109
Simultaneous itk::Image and itk::Array (and hence vnl_vector) class.
const unsigned int Dimension
Definition: niftkBreastDCEandADC.cxx:89
TScalarType VectorDataType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:48
VectorImageType * GetInterfaceDisplacementImage() const
Definition: itkRegistrationBasedCorticalThicknessFilter.h:169
Image< VectorPixelType, itkGetStaticConstMacro(Dimension) > VectorImageType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:77
void SetWhitePlusGreyMatterPVMap(ImagePointer image)
Definition: itkRegistrationBasedCorticalThicknessFilter.h:100
VectorImageType::Pointer VectorImagePointer
Definition: itkRegistrationBasedCorticalThicknessFilter.h:78
ImageType::RegionType RegionType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:69
TimeVaryingVectorImageType::PixelType TimeVaryingVectorImagePixelType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:88
Definition: itkRegistrationBasedCorticalThicknessFilter.h:42
VectorImageType::IndexType VectorImageIndexType
Definition: itkRegistrationBasedCorticalThicknessFilter.h:80