19 #ifndef rtkMechlemOneStepSpectralReconstructionFilter_h 20 #define rtkMechlemOneStepSpectralReconstructionFilter_h 152 template <
typename TOutputImage,
typename TPhotonCounts,
typename TSpectrum>
171 static constexpr
unsigned int nBins = TPhotonCounts::PixelType::Dimension;
172 static constexpr
unsigned int nMaterials = TOutputImage::PixelType::Dimension;
173 using dataType =
typename TOutputImage::PixelType::ValueType;
179 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
181 itk::CudaImage<itk::Vector<dataType, nMaterials * nMaterials>,
184 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
193 #if !defined(ITK_WRAPPING_PARSER) 195 typedef typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
197 CudaWeidingerForwardModelImageFilter<TOutputImage, TPhotonCounts, TSpectrum>>::type
200 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
202 CudaForwardProjectionImageFilter<SingleComponentImageType, SingleComponentImageType>>::
204 typedef typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
206 CudaBackProjectionImageFilter<HessiansImageType>>::type
220 #if !defined(ITK_WRAPPING_PARSER) 247 itkGetMacro(NumberOfIterations,
int);
251 itkGetMacro(NumberOfSubsets,
int);
258 itkGetMacro(ResetNesterovEvery,
int);
263 SetInputMaterialVolumes(
const TOutputImage * materialVolumes);
265 SetInputPhotonCounts(
const TPhotonCounts * photonCounts);
267 SetInputSpectrum(
const TSpectrum * spectrum);
277 itkSetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
278 itkGetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
282 itkSetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
283 itkGetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
302 VerifyPreconditions()
const override;
306 GenerateData()
override;
308 #if !defined(ITK_WRAPPING_PARSER) 344 GenerateInputRequestedRegion()
override;
346 GenerateOutputInformation()
override;
350 typename TOutputImage::ConstPointer
351 GetInputMaterialVolumes();
352 typename TPhotonCounts::ConstPointer
353 GetInputPhotonCounts();
354 typename TSpectrum::ConstPointer
356 typename SingleComponentImageType::ConstPointer
358 typename SingleComponentImageType::ConstPointer
359 GetSpatialRegularizationWeights();
360 typename SingleComponentImageType::ConstPointer
361 GetProjectionWeights();
364 #if !defined(ITK_WRAPPING_PARSER) 367 typename SingleComponentForwardProjectionFilterType::Pointer
368 InstantiateSingleComponentForwardProjectionFilter(
int fwtype);
369 typename HessiansBackProjectionFilterType::Pointer
370 InstantiateHessiansBackProjectionFilter(
int bptype);
389 #ifndef ITK_MANUAL_INSTANTIATION 390 # 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
ReorderProjectionsFilterProjectionsWeightsType::Pointer m_ReorderProjectionsWeightsFilter
vnl_matrix< dataType > MaterialAttenuationsType
typename itk::Image< itk::Vector< dataType, nMaterials *nMaterials >, TOutputImage::ImageDimension > HessiansImageType
ReorderProjectionsFilterPhotonCountsType::Pointer m_ReorderPhotonCountsFilter
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
Sorts or shuffle projections and geometry inputs.
SingleComponentForwardProjectionFilterType::Pointer m_SingleComponentForwardProjectionFilter
typename TOutputImage::PixelType::ValueType dataType
AddFilterType::Pointer m_AddGradients
TOutputImage::RegionType::SizeType m_RegularizationRadius