19 #ifndef rtkMechlemOneStepSpectralReconstructionFilter_h 20 #define rtkMechlemOneStepSpectralReconstructionFilter_h 145 template <
typename TOutputImage,
typename TPhotonCounts,
typename TSpectrum>
164 static constexpr
unsigned int nBins = TPhotonCounts::PixelType::Dimension;
165 static constexpr
unsigned int nMaterials = TOutputImage::PixelType::Dimension;
166 using dataType =
typename TOutputImage::PixelType::ValueType;
172 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
174 itk::CudaImage<itk::Vector<dataType, nMaterials * nMaterials>,
177 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
186 #if !defined(ITK_WRAPPING_PARSER) 188 typedef typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
190 CudaWeidingerForwardModelImageFilter<TOutputImage, TPhotonCounts, TSpectrum>>::type
193 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
195 CudaForwardProjectionImageFilter<SingleComponentImageType, SingleComponentImageType>>::
197 typedef typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
199 CudaBackProjectionImageFilter<HessiansImageType>>::type
213 #if !defined(ITK_WRAPPING_PARSER) 238 itkGetMacro(NumberOfIterations,
int);
242 itkGetMacro(NumberOfSubsets,
int);
249 itkGetMacro(ResetNesterovEvery,
int);
254 SetInputMaterialVolumes(
const TOutputImage * materialVolumes);
256 SetInputPhotonCounts(
const TPhotonCounts * photonCounts);
258 SetInputSpectrum(
const TSpectrum * spectrum);
268 itkSetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
269 itkGetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
273 itkSetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
274 itkGetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
293 VerifyPreconditions() ITKv5_CONST override;
297 GenerateData() override;
299 #if !defined(ITK_WRAPPING_PARSER) 333 GenerateInputRequestedRegion()
override;
335 GenerateOutputInformation()
override;
339 typename TOutputImage::ConstPointer
340 GetInputMaterialVolumes();
341 typename TPhotonCounts::ConstPointer
342 GetInputPhotonCounts();
343 typename TSpectrum::ConstPointer
345 typename SingleComponentImageType::ConstPointer
347 typename SingleComponentImageType::ConstPointer
348 GetSpatialRegularizationWeights();
349 typename SingleComponentImageType::ConstPointer
350 GetProjectionWeights();
353 #if !defined(ITK_WRAPPING_PARSER) 356 typename SingleComponentForwardProjectionFilterType::Pointer
357 InstantiateSingleComponentForwardProjectionFilter(
int fwtype);
358 typename HessiansBackProjectionFilterType::Pointer
359 InstantiateHessiansBackProjectionFilter(
int bptype);
378 #ifndef ITK_MANUAL_INSTANTIATION 379 # include "rtkMechlemOneStepSpectralReconstructionFilter.hxx" typename itk::Image< dataType, TOutputImage::ImageDimension > SingleComponentImageType
typename Superclass::ForwardProjectionType ForwardProjectionType
WeidingerForwardModelType::Pointer m_WeidingerForward
ExtractPhotonCountsFilterType::Pointer m_ExtractPhotonCountsFilter
Base class for forward projection, i.e. accumulation along x-ray lines.
TOutputImage::PixelType m_RegularizationWeights
HessiansBackProjectionFilterType::Pointer m_HessiansBackProjectionFilter
NesterovFilterType::Pointer m_NesterovFilter
Applies Nesterov's momentum technique.
Generate an n-dimensional image with constant pixel values.
AddMatrixAndDiagonalFilterType::Pointer m_AddHessians
ForwardProjectionFilterType::Pointer m_ForwardProjectionFilter
int m_NumberOfProjectionsPerSubset
HessiansSourceType::Pointer m_HessiansSource
vnl_matrix< dataType > BinnedDetectorResponseType
vnl_matrix< dataType > MaterialAttenuationsType
typename itk::Image< itk::Vector< dataType, nMaterials *nMaterials >, TOutputImage::ImageDimension > HessiansImageType
ThreeDCircularProjectionGeometry::ConstPointer m_Geometry
Projection geometry for a source and a 2-D flat panel.
MaterialProjectionsSourceType::Pointer m_ProjectionsSource
#define itkSetMacro(name, type)
MultiplyGradientFilterType::Pointer m_MultiplyRegulGradientsFilter
Computes update from gradient and Hessian in Newton's method.
SQSRegularizationType::Pointer m_SQSRegul
NewtonFilterType::Pointer m_NewtonFilter
SingleComponentImageSourceType::Pointer m_SingleComponentVolumeSource
SingleComponentImageSourceType::Pointer m_SingleComponentProjectionsSource
MultiplyGradientFilterType::Pointer m_MultiplyGradientToBeBackprojectedFilter
Performs intermediate computations in Weidinger2016.
GradientsSourceType::Pointer m_GradientsSource
typename itk::Image< typename TOutputImage::PixelType, TOutputImage::ImageDimension > CPUOutputImageType
MultiplyFilterType::Pointer m_MultiplySupportFilter
int m_NumberOfProjections
For each vector-valued pixel, adds a vector to the diagonal of a matrix.
For one-step inversion of spectral CT data by the method Mechlem2017, computes regularization term's ...
Mother class for cone beam reconstruction filters which need runtime selection of their forward and b...
Joseph forward projection.
Implements the one-step spectral CT inversion method described by Mechlem et al.
itk::AddImageFilter< GradientsImageType > AddFilterType
typename Superclass::BackProjectionType BackProjectionType
std::vector< int > m_NumberOfProjectionsInSubset
void VerifyInputInformation() const override
GradientsBackProjectionFilterType::Pointer m_GradientsBackProjectionFilter
MultiplyGradientFilterType::Pointer m_MultiplyRegulHessiansFilter
TOutputImage GradientsImageType
SingleComponentForwardProjectionFilterType::Pointer m_SingleComponentForwardProjectionFilter
typename TOutputImage::PixelType::ValueType dataType
AddFilterType::Pointer m_AddGradients
TOutputImage::RegionType::SizeType m_RegularizationRadius