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;
183 typename TOutputImage::template RebindImageType<itk::Vector<dataType, nMaterials * nMaterials>,
184 TOutputImage::ImageDimension>;
186 typename TOutputImage::template RebindImageType<dataType, TOutputImage::ImageDimension>;
188 #if !defined(ITK_WRAPPING_PARSER) 191 std::is_same_v<TOutputImage, CPUOutputImageType>,
195 typename std::conditional_t<std::is_same_v<TOutputImage, CPUOutputImageType>,
199 typename std::conditional_t<std::is_same_v<TOutputImage, CPUOutputImageType>,
215 #if !defined(ITK_WRAPPING_PARSER) 244 itkGetMacro(NumberOfIterations,
int);
248 itkGetMacro(NumberOfSubsets,
int);
255 itkGetMacro(ResetNesterovEvery,
int);
260 SetInputMaterialVolumes(
const TOutputImage * materialVolumes);
264 SetInputMeasuredProjections(
const TMeasuredProjections * measuredProjections);
266 SetInputMeasuredProjections(
const VectorImageType * measuredProjections);
268 SetInputIncidentSpectrum(
const TIncidentSpectrum * incidentSpectrum);
269 #ifndef ITK_FUTURE_LEGACY_REMOVE 271 SetInputPhotonCounts(
const TMeasuredProjections * measuredProjections);
273 SetInputSpectrum(
const TIncidentSpectrum * incidentSpectrum);
284 itkSetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
285 itkGetMacro(RegularizationWeights,
typename TOutputImage::PixelType);
289 itkSetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
290 itkGetMacro(RegularizationRadius,
typename TOutputImage::RegionType::SizeType);
309 VerifyPreconditions()
const override;
313 GenerateData()
override;
315 #if !defined(ITK_WRAPPING_PARSER) 353 GenerateInputRequestedRegion()
override;
355 GenerateOutputInformation()
override;
359 typename TOutputImage::ConstPointer
360 GetInputMaterialVolumes();
361 typename TMeasuredProjections::ConstPointer
362 GetInputMeasuredProjections();
363 typename TIncidentSpectrum::ConstPointer
364 GetInputIncidentSpectrum();
365 #ifndef ITK_FUTURE_LEGACY_REMOVE 366 typename TMeasuredProjections::ConstPointer
367 GetInputPhotonCounts();
368 typename TIncidentSpectrum::ConstPointer
371 typename SingleComponentImageType::ConstPointer
373 typename SingleComponentImageType::ConstPointer
374 GetSpatialRegularizationWeights();
375 typename SingleComponentImageType::ConstPointer
376 GetProjectionWeights();
379 #if !defined(ITK_WRAPPING_PARSER) 382 typename SingleComponentForwardProjectionFilterType::Pointer
383 InstantiateSingleComponentForwardProjectionFilter(
int fwtype);
384 typename HessiansBackProjectionFilterType::Pointer
385 InstantiateHessiansBackProjectionFilter(
int bptype);
404 #ifndef ITK_MANUAL_INSTANTIATION 405 # 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 TOutputImage::template RebindImageType< dataType, TOutputImage::ImageDimension > SingleComponentImageType
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
typename TOutputImage::template RebindImageType< itk::Vector< dataType, nMaterials *nMaterials >, TOutputImage::ImageDimension > HessiansImageType
HessiansSourceType::Pointer m_HessiansSource
GradientsBackProjectionFilterType::Pointer m_GradientsBackProjectionFilter
Sorts or shuffle projections and geometry inputs.
TOutputImage::PixelType m_RegularizationWeights