Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitkConcentrationCurveGenerator.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 #ifndef mitkConcentrationCurveGenerator_h
13 #define mitkConcentrationCurveGenerator_h
14 
15 #include <mitkImage.h>
16 #include <itkBinaryFunctorImageFilter.h>
19 
21 
22 namespace mitk {
23 
43 {
44 public:
45 
47  itkNewMacro(Self);
48 
50  typedef itk::Image<double,3> ConvertedImageType;
51 
52 
55  itkSetConstObjectMacro(DynamicImage,Image);
57  itkGetConstObjectMacro(DynamicImage,Image);
58 
61  itkSetMacro(RelaxationTime, double);
63  itkGetConstReferenceMacro(RelaxationTime, double);
64 
67  itkSetMacro(Relaxivity, double);
69  itkGetConstReferenceMacro(Relaxivity, double);
70 
73  itkSetMacro(RecoveryTime, double);
75  itkGetConstReferenceMacro(RecoveryTime, double);
76 
79  itkSetMacro(RepetitionTime, double);
81  itkGetConstReferenceMacro(RepetitionTime, double);
82 
85  itkSetMacro(FlipAngle, double);
87  itkGetConstReferenceMacro(FlipAngle, double);
88 
91  itkSetMacro(FlipAnglePDW, double);
93  itkGetConstReferenceMacro(FlipAnglePDW, double);
94 
97  itkSetMacro(Factor, double);
99  itkGetConstReferenceMacro(Factor, double);
100 
103  itkSetConstObjectMacro(PDWImage,Image);
105  itkGetConstObjectMacro(PDWImage,Image);
106 
109  itkSetMacro(T2Factor, double);
111  itkGetConstReferenceMacro(T2Factor, double);
112 
115  itkSetMacro(T2EchoTime, double);
117  itkGetConstReferenceMacro(T2EchoTime, double);
118 
121  itkSetMacro(BaselineStartTimeStep, unsigned int);
123  itkGetConstReferenceMacro(BaselineStartTimeStep, unsigned int);
124 
127  itkSetMacro(BaselineEndTimeStep, unsigned int);
129  itkGetConstReferenceMacro(BaselineEndTimeStep, unsigned int);
130 
133  itkSetMacro(isTurboFlashSequence,bool);
135  itkGetConstReferenceMacro(isTurboFlashSequence,bool);
136 
139  itkSetMacro(AbsoluteSignalEnhancement,bool);
141  itkGetConstReferenceMacro(AbsoluteSignalEnhancement,bool);
142 
145  itkSetMacro(RelativeSignalEnhancement,bool);
147  itkGetConstReferenceMacro(RelativeSignalEnhancement,bool);
148 
151  itkSetMacro(UsingT1Map,bool);
153  itkGetConstReferenceMacro(UsingT1Map,bool);
154 
157  itkSetMacro(isT2weightedImage,bool);
159  itkGetConstReferenceMacro(isT2weightedImage,bool);
160 
166  Image::Pointer GetConvertedImage();
167 
168 protected:
169 
172 
173 
174  template<class TPixel_input, class TPixel_baseline>
175  mitk::Image::Pointer convertToConcentration(const itk::Image<TPixel_input, 3> *itkInputImage, const itk::Image<TPixel_baseline, 3> *itkBaselineImage);
176 
178  mitk::Image::Pointer ConvertSignalToConcentrationCurve(const mitk::Image* inputImage, const mitk::Image* baselineImage);
179 
180 
181 
184 
185  template<class TPixel>
186  void CalculateAverageBaselineImage(const itk::Image<TPixel,4> *itkBaselineImage);
187 
189  virtual void Convert();
190 
191 
192 private:
193  Image::ConstPointer m_DynamicImage;
194  Image::ConstPointer m_BaselineImage;
195  Image::ConstPointer m_PDWImage;
196  Image::Pointer m_ConvertSignalToConcentrationCurve_OutputImage;
197  Image::Pointer m_ConvertedImage;
198 
199  bool m_isT2weightedImage;
200 
201  bool m_isTurboFlashSequence;
202  bool m_AbsoluteSignalEnhancement;
203  bool m_RelativeSignalEnhancement;
204  bool m_UsingT1Map;
205 
206  double m_Factor;
207  //=Recovery Time
208  double m_RecoveryTime;
209  //=Repetition Time TR
210  double m_RepetitionTime;
211  //= pre-CA T1 time
212  double m_RelaxationTime;
213  //= contrast agent relaxivity
214  double m_Relaxivity;
215 
216  double m_FlipAngle;
217 
218  double m_FlipAnglePDW;
219 
220  double m_T2Factor;
221  double m_T2EchoTime;
222  // The baseline image is averaged from the signal within time step range [m_BaselineStartTimeStep, m_BaselineEndTimeStep].
223  // m_BaselineStartTimeStep is the first time frame, that is included into the baseline averaging (starting with 0).
224  unsigned int m_BaselineStartTimeStep;
225  // m_BaselinStopTimeStep is the last time frame, that is included into the baseline averaging.
226  unsigned int m_BaselineEndTimeStep;
227 };
228 
229 }
230 #endif
#define MITKPHARMACOKINETICS_EXPORT
Converts a 4D MR signal image into a 4D contrast agent concentration image.
void PrepareBaselineImage()
Takes the 3D image of the first timepoint to set as baseline image.
mitk::Image::Pointer convertToConcentration(const itk::Image< TPixel_input, 3 > *itkInputImage, const itk::Image< TPixel_baseline, 3 > *itkBaselineImage)
void CalculateAverageBaselineImage(const itk::Image< TPixel, 4 > *itkBaselineImage)
virtual void Convert()
Loops over all timepoints, casts the current timepoint 3D mitk::image to itk and passes it to Convert...
mitkClassMacroItkParent(ConcentrationCurveGenerator, itk::Object)
mitk::Image::Pointer ConvertSignalToConcentrationCurve(const mitk::Image *inputImage, const mitk::Image *baselineImage)
Image::Pointer GetConvertedImage()
Performs the conversion and returns the 4D concentration image.
itk::Image< double, 3 > ConvertedImageType
ITK image type for converted 3D concentration frames.
Image class for storing multi-dimensional medical image data.
Definition: mitkImage.h:76
Find image slices visible on a given plane.