19 #ifndef rtkMechlemOneStepSpectralReconstructionFilter_h 20 #define rtkMechlemOneStepSpectralReconstructionFilter_h 154 template <
typename TOutputImage,
typename TMeasuredProjections,
typename TInc
identSpectrum>
173 static constexpr
unsigned int nBins = TMeasuredProjections::PixelType::Dimension;
174 static constexpr
unsigned int nMaterials = TOutputImage::PixelType::Dimension;
175 using dataType =
typename TOutputImage::PixelType::ValueType;
184 std::is_same_v<TOutputImage, CPUOutputImageType>,
186 itk::CudaImage<itk::Vector<dataType, nMaterials * nMaterials>, TOutputImage::ImageDimension>>;
189 itk::CudaImage<dataType, TOutputImage::ImageDimension>>;
196 #if !defined(ITK_WRAPPING_PARSER) 199 std::is_same_v<TOutputImage, CPUOutputImageType>,
203 typename std::conditional_t<std::is_same_v<TOutputImage, CPUOutputImageType>,
207 typename std::conditional_t<std::is_same_v<TOutputImage, CPUOutputImageType>,
223 #if !defined(ITK_WRAPPING_PARSER) 252 itkGetMacro(NumberOfIterations,
int);
256 itkGetMacro(NumberOfSubsets,
int);
263 itkGetMacro(ResetNesterovEvery,
int);
268 SetInputMaterialVolumes(
const TOutputImage * materialVolumes);
272 SetInputMeasuredProjections(
const TMeasuredProjections * measuredProjections);
274 SetInputMeasuredProjections(
const VectorImageType * measuredProjections);
276 SetInputIncidentSpectrum(
const TIncidentSpectrum * incidentSpectrum);
277 #ifndef ITK_FUTURE_LEGACY_REMOVE 279 SetInputPhotonCounts(
const TMeasuredProjections * measuredProjections);
281 SetInputSpectrum(
const TIncidentSpectrum * incidentSpectrum);
292 itkSetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
293 itkGetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
297 itkSetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
298 itkGetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
317 VerifyPreconditions()
const override;
321 GenerateData()
override;
323 #if !defined(ITK_WRAPPING_PARSER) 361 GenerateInputRequestedRegion()
override;
363 GenerateOutputInformation()
override;
367 typename TOutputImage::ConstPointer
368 GetInputMaterialVolumes();
369 typename TMeasuredProjections::ConstPointer
370 GetInputMeasuredProjections();
371 typename TIncidentSpectrum::ConstPointer
372 GetInputIncidentSpectrum();
373 #ifndef ITK_FUTURE_LEGACY_REMOVE 374 typename TMeasuredProjections::ConstPointer
375 GetInputPhotonCounts();
376 typename TIncidentSpectrum::ConstPointer
379 typename SingleComponentImageType::ConstPointer
381 typename SingleComponentImageType::ConstPointer
382 GetSpatialRegularizationWeights();
383 typename SingleComponentImageType::ConstPointer
384 GetProjectionWeights();
387 #if !defined(ITK_WRAPPING_PARSER) 390 typename SingleComponentForwardProjectionFilterType::Pointer
391 InstantiateSingleComponentForwardProjectionFilter(
int fwtype);
392 typename HessiansBackProjectionFilterType::Pointer
393 InstantiateHessiansBackProjectionFilter(
int bptype);
412 #ifndef ITK_MANUAL_INSTANTIATION 413 # include "rtkMechlemOneStepSpectralReconstructionFilter.hxx"
SingleComponentImageSourceType::Pointer m_SingleComponentVolumeSource
NesterovFilterType::Pointer m_NesterovFilter
MultiplyGradientFilterType::Pointer m_MultiplyRegulGradientsFilter
ReorderProjectionsWeightsFilterType::Pointer m_ReorderProjectionsWeightsFilter
Base class for forward projection, i.e. accumulation along x-ray lines.
TOutputImage GradientsImageType
CastMeasuredProjectionsFilterType::Pointer m_CastMeasuredProjectionsFilter
Applies Nesterov's momentum technique.
ThreeDCircularProjectionGeometry::ConstPointer m_Geometry
Generate an n-dimensional image with constant pixel values.
AddFilterType::Pointer m_AddGradients
vnl_matrix< dataType > BinnedDetectorResponseType
typename TOutputImage::PixelType::ValueType dataType
vnl_matrix< dataType > MaterialAttenuationsType
void VerifyInputInformation() const override
HessiansBackProjectionFilterType::Pointer m_HessiansBackProjectionFilter
typename itk::VectorImage< dataType, TOutputImage::ImageDimension > VectorImageType
int m_NumberOfProjectionsPerSubset
AddMatrixAndDiagonalFilterType::Pointer m_AddHessians
WeidingerForwardModelType::Pointer m_WeidingerForward
ForwardProjectionFilterType::Pointer m_ForwardProjectionFilter
MaterialProjectionsSourceType::Pointer m_ProjectionsSource
Projection geometry for a source and a 2-D flat panel.
typename std::conditional_t< std::is_same_v< TOutputImage, CPUOutputImageType >, BackProjectionImageFilter< HessiansImageType, HessiansImageType >, CudaBackProjectionImageFilter< HessiansImageType > > CudaHessiansBackProjectionImageFilterType
#define itkSetMacro(name, type)
SQSRegularizationType::Pointer m_SQSRegul
Computes update from gradient and Hessian in Newton's method.
int m_NumberOfProjections
SingleComponentImageSourceType::Pointer m_SingleComponentProjectionsSource
MultiplyFilterType::Pointer m_MultiplySupportFilter
MultiplyGradientFilterType::Pointer m_MultiplyRegulHessiansFilter
ExtractMeasuredProjectionsFilterType::Pointer m_ExtractMeasuredProjectionsFilter
std::vector< int > m_NumberOfProjectionsInSubset
Performs intermediate computations in Weidinger2016.
ReorderMeasuredProjectionsFilterType::Pointer m_ReorderMeasuredProjectionsFilter
TOutputImage::RegionType::SizeType m_RegularizationRadius
typename std::conditional_t< std::is_same_v< TOutputImage, CPUOutputImageType >, itk::Image< itk::Vector< dataType, nMaterials *nMaterials >, TOutputImage::ImageDimension >, itk::CudaImage< itk::Vector< dataType, nMaterials *nMaterials >, TOutputImage::ImageDimension > > HessiansImageType
Cuda version of the backprojection.
MultiplyGradientFilterType::Pointer m_MultiplyGradientToBeBackprojectedFilter
typename std::conditional_t< std::is_same_v< TOutputImage, CPUOutputImageType >, JosephForwardProjectionImageFilter< SingleComponentImageType, SingleComponentImageType >, CudaForwardProjectionImageFilter< SingleComponentImageType, SingleComponentImageType > > CudaSingleComponentForwardProjectionImageFilterType
NewtonFilterType::Pointer m_NewtonFilter
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...
typename Superclass::BackProjectionType BackProjectionType
Joseph forward projection.
Implements the one-step spectral CT inversion method described by Mechlem et al.
GradientsSourceType::Pointer m_GradientsSource
typename itk::Image< typename TOutputImage::PixelType, TOutputImage::ImageDimension > CPUOutputImageType
typename std::conditional_t< std::is_same_v< TOutputImage, CPUOutputImageType >, WeidingerForwardModelImageFilter< TOutputImage, TMeasuredProjections, TIncidentSpectrum >, CudaWeidingerForwardModelImageFilter< TOutputImage, TMeasuredProjections, TIncidentSpectrum > > WeidingerForwardModelType
typename Superclass::ForwardProjectionType ForwardProjectionType
SingleComponentForwardProjectionFilterType::Pointer m_SingleComponentForwardProjectionFilter
CastMaterialVolumesFilterType::Pointer m_CastMaterialVolumesFilter
HessiansSourceType::Pointer m_HessiansSource
GradientsBackProjectionFilterType::Pointer m_GradientsBackProjectionFilter
Sorts or shuffle projections and geometry inputs.
TOutputImage::PixelType m_RegularizationWeights
typename std::conditional_t< std::is_same_v< TOutputImage, CPUOutputImageType >, itk::Image< dataType, TOutputImage::ImageDimension >, itk::CudaImage< dataType, TOutputImage::ImageDimension > > SingleComponentImageType