/*! * \file itkCalculatorT1ImageFilter.h * \author Konrad Werys * \date 2018/08/13 */ #ifndef itkCalculatorT1ImageFilter_h #define itkCalculatorT1ImageFilter_h #include "tomatolib_export.h" #include "CmakeConfigForTomato.h" #ifdef USE_ITK #include "itkLogger.h" #include "KWUtil.h" #include "OxModel.h" #include "OxFitter.h" #include "OxCalculator.h" #include "itkDataObject.h" #include "itkImageToImageFilter.h" #include "itkImageRegionSplitterDirection.h" #include "itkImageRegionIterator.h" #include "itkImageLinearIteratorWithIndex.h" namespace itk { /** * \class CalculatorT1ImageFilter * @tparam TImageIn * @tparam TImageOut */ template class CalculatorT1ImageFilter : public ImageToImageFilter { public: /** Standard class typedefs. */ typedef CalculatorT1ImageFilter Self; typedef ImageToImageFilter Superclass; typedef SmartPointer Pointer; /** Needed for threads */ typedef typename Superclass::OutputImageRegionType OutputImageRegionType; /** Method for creation through the object factory. */ itkNewMacro(Self); /** Run-time type information (and related methods). */ itkTypeMacro(CalculatorT1ImageFilter, ImageToImageFilter); typedef typename TImageIn::PixelType PixelTypeIn; typedef typename TImageOut::PixelType PixelTypeOut; void SetInputMagImage(const TImageIn *magImage); void SetInputPhaImage(const TImageIn *phaImage); TImageOut* GetAImage(); TImageOut* GetBImage(); TImageOut* GetT1starImage(); TImageOut* GetT1Image(); TImageOut* GetR2Image(); TImageOut* GetChiSqrtImage(); TImageOut* GetSNRImage(); TImageOut* GetNShmolliSamplesUsedImage(); TImageOut* GetSD_AImage(); TImageOut* GetSD_BImage(); TImageOut* GetSD_T1Image(); TImageOut* GetT2Image(); /** Getters and setters. */ void SetCalculator(Ox::Calculator* calculator){ this->m_Calculator = calculator; } itkSetMacro( LimitOutputIntensity, bool ); itkGetMacro( LimitOutputIntensity, bool ); itkBooleanMacro(LimitOutputIntensity); itkSetMacro( UpperLimitOutputIntensity, PixelTypeOut ); itkGetMacro( UpperLimitOutputIntensity, PixelTypeOut ); itkSetMacro( LowerLimitOutputIntensity, PixelTypeOut ); itkGetMacro( LowerLimitOutputIntensity, PixelTypeOut ); protected: /** Constructor. */ CalculatorT1ImageFilter(); /** Destructor. */ ~CalculatorT1ImageFilter() {}; /** Does the real work in threading */ virtual void ThreadedGenerateData( const OutputImageRegionType& outputRegionForThread, ThreadIdType threadId ) ITK_OVERRIDE; /** Configure threads */ virtual void BeforeThreadedGenerateData() ITK_OVERRIDE; /** handle dimensions difference between 3d input and 2d output */ virtual void GenerateOutputInformation() ITK_OVERRIDE; /** Regions handling. */ virtual const ImageRegionSplitterBase* GetImageRegionSplitter() const ITK_OVERRIDE{ return m_ImageRegionSplitter; }; /** Regions handling. */ typename ImageRegionSplitterDirection::Pointer m_ImageRegionSplitter; /** Enforce maximum and minimum output value. */ typename TImageOut::PixelType LimitResult( typename TImageOut::PixelType result ); private: ITK_DISALLOW_COPY_AND_ASSIGN(CalculatorT1ImageFilter); //purposely not implemented /** Member variables. */ Ox::Calculator* m_Calculator; bool m_LimitOutputIntensity; PixelTypeOut m_UpperLimitOutputIntensity; PixelTypeOut m_LowerLimitOutputIntensity; }; } //namespace ITK #ifndef TOMATOLIB_COMPILED #ifndef ITK_MANUAL_INSTANTIATION #include "itkCalculatorT1ImageFilter.hxx" #endif //ITK_MANUAL_INSTANTIATION #endif //TOMATOLIB_COMPILED #endif // USE_ITK #endif // itkCalculatorT1ImageFilter_h