19 #ifndef rtkMechlemOneStepSpectralReconstructionFilter_h 20 #define rtkMechlemOneStepSpectralReconstructionFilter_h 145 template <
typename TOutputImage,
typename TPhotonCounts,
typename TSpectrum>
161 #ifdef itkOverrideGetNameOfClassMacro 169 static constexpr
unsigned int nBins = TPhotonCounts::PixelType::Dimension;
170 static constexpr
unsigned int nMaterials = TOutputImage::PixelType::Dimension;
171 using dataType =
typename TOutputImage::PixelType::ValueType;
177 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
179 itk::CudaImage<itk::Vector<dataType, nMaterials * nMaterials>,
182 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
191 #if !defined(ITK_WRAPPING_PARSER) 193 typedef typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
195 CudaWeidingerForwardModelImageFilter<TOutputImage, TPhotonCounts, TSpectrum>>::type
198 typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
200 CudaForwardProjectionImageFilter<SingleComponentImageType, SingleComponentImageType>>::
202 typedef typename std::conditional<std::is_same<TOutputImage, CPUOutputImageType>::value,
204 CudaBackProjectionImageFilter<HessiansImageType>>::type
218 #if !defined(ITK_WRAPPING_PARSER) 243 itkGetMacro(NumberOfIterations,
int);
247 itkGetMacro(NumberOfSubsets,
int);
254 itkGetMacro(ResetNesterovEvery,
int);
259 SetInputMaterialVolumes(
const TOutputImage * materialVolumes);
261 SetInputPhotonCounts(
const TPhotonCounts * photonCounts);
263 SetInputSpectrum(
const TSpectrum * spectrum);
273 itkSetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
274 itkGetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
278 itkSetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
279 itkGetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
298 VerifyPreconditions() ITKv5_CONST override;
302 GenerateData() override;
304 #if !defined(ITK_WRAPPING_PARSER) 338 GenerateInputRequestedRegion()
override;
340 GenerateOutputInformation()
override;
344 typename TOutputImage::ConstPointer
345 GetInputMaterialVolumes();
346 typename TPhotonCounts::ConstPointer
347 GetInputPhotonCounts();
348 typename TSpectrum::ConstPointer
350 typename SingleComponentImageType::ConstPointer
352 typename SingleComponentImageType::ConstPointer
353 GetSpatialRegularizationWeights();
354 typename SingleComponentImageType::ConstPointer
355 GetProjectionWeights();
358 #if !defined(ITK_WRAPPING_PARSER) 361 typename SingleComponentForwardProjectionFilterType::Pointer
362 InstantiateSingleComponentForwardProjectionFilter(
int fwtype);
363 typename HessiansBackProjectionFilterType::Pointer
364 InstantiateHessiansBackProjectionFilter(
int bptype);
383 #ifndef ITK_MANUAL_INSTANTIATION 384 # 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