ANIMA  4.0
animaT2EPGRelaxometryEstimationImageFilter.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include <itkVectorImage.h>
5 #include <itkImage.h>
6 
7 namespace anima
8 {
9 template <typename TInputImage, typename TOutputImage>
11 public anima::MaskedImageToImageFilter<TInputImage,TOutputImage>
12 {
13 public:
17  typedef itk::SmartPointer<Self> Pointer;
18  typedef itk::SmartPointer<const Self> ConstPointer;
19 
21  itkNewMacro(Self)
22 
23 
25 
26 
27  typedef TInputImage InputImageType;
28  typedef TOutputImage OutputImageType;
29  typedef typename InputImageType::Pointer InputImagePointer;
30  typedef typename OutputImageType::Pointer OutputImagePointer;
31 
33  typedef typename Superclass::MaskImageType MaskImageType;
34  typedef typename Superclass::InputImageRegionType InputImageRegionType;
35  typedef typename Superclass::OutputImageRegionType OutputImageRegionType;
36 
37  itkSetMacro(EchoSpacing, double)
38 
39  void SetT1Map(OutputImageType *map) {m_T1Map = map;}
40 
41  itkSetMacro(T2UpperBound, double)
42  itkSetMacro(AverageSignalThreshold, double)
43  itkSetMacro(TRValue, double)
44 
45  itkSetMacro(MaximumOptimizerIterations, unsigned int)
46  itkSetMacro(OptimizerStopCondition, double)
47 
48  itkSetMacro(T2ExcitationFlipAngle, double)
49 
50  void SetT2FlipAngles(std::vector <double> & flipAngles) {m_T2FlipAngles = flipAngles;}
51  void SetT2FlipAngles(double singleAngle, unsigned int numAngles) {m_T2FlipAngles = std::vector <double> (numAngles,singleAngle);}
52 
53 protected:
55  : Superclass()
56  {
57  // There are 2 outputs: T2, M0, B1
58  this->SetNumberOfRequiredOutputs(3);
59 
60  for (unsigned int i = 0;i < 3;++i)
61  this->SetNthOutput(i, this->MakeOutput(i));
62 
63  m_AverageSignalThreshold = 0;
64  m_EchoSpacing = 10;
65  m_T2ExcitationFlipAngle = M_PI / 2.0;
66 
67  m_T2UpperBound = 1000;
68  m_TRValue = 5000;
69 
70  m_MaximumOptimizerIterations = 5000;
71  m_OptimizerStopCondition = 1.0e-4;
72  }
73 
75 
76  void CheckComputationMask() ITK_OVERRIDE;
77 
78  void BeforeThreadedGenerateData() ITK_OVERRIDE;
79  void DynamicThreadedGenerateData(const OutputImageRegionType &outputRegionForThread) ITK_OVERRIDE;
80 
81 private:
82  ITK_DISALLOW_COPY_AND_ASSIGN(T2EPGRelaxometryEstimationImageFilter);
83 
84  double m_AverageSignalThreshold;
85 
86  unsigned int m_MaximumOptimizerIterations;
87  double m_OptimizerStopCondition;
88  double m_OptimizerInitialStep;
89 
90  // T1 relaxometry specific values
91  OutputImagePointer m_T1Map;
92 
93  // T2 initial values
94  OutputImagePointer m_InitialT2Image;
95 
96  // T2 relaxometry specific values
97  double m_EchoSpacing;
98  std::vector <double> m_T2FlipAngles;
99  double m_T2ExcitationFlipAngle;
100  double m_TRValue;
101 
102  double m_T2UpperBound;
103 };
104 
105 } // end namespace anima
106 
Implements a class to handle thread number in a dynamic way for multithreaded methods needing thread ...
itk::Image< unsigned char, TInputImage::ImageDimension > MaskImageType
anima::MaskedImageToImageFilter< TInputImage, TOutputImage > Superclass
STL namespace.
Superclass::InputImageRegionType InputImageRegionType
void DynamicThreadedGenerateData(const OutputImageRegionType &outputRegionForThread) ITK_OVERRIDE
Superclass::OutputImageRegionType OutputImageRegionType
void SetT2FlipAngles(double singleAngle, unsigned int numAngles)