RTK  2.0.1
Reconstruction Toolkit
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType > Class Template Reference

#include <rtkFourDReconstructionConjugateGradientOperator.h>

+ Inheritance diagram for rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >:
+ Collaboration diagram for rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >:

Public Types

using BackProjectionFilterType = BackProjectionImageFilter< ProjectionStackType, ProjectionStackType >
 
using ConstantProjectionStackSourceType = ConstantImageSource< ProjectionStackType >
 
using ConstantVolumeSeriesSourceType = ConstantImageSource< VolumeSeriesType >
 
using ConstantVolumeSourceType = ConstantImageSource< VolumeType >
 
using CPUProjectionStackType = typename itk::Image< typename ProjectionStackType::PixelType, ProjectionStackType::ImageDimension >
 
using CudaConstantVolumeSeriesSourceType = ConstantVolumeSeriesSourceType
 
using CudaConstantVolumeSourceType = ConstantVolumeSourceType
 
using CudaInterpolateImageFilterType = InterpolationFilterType
 
using CudaSplatImageFilterType = SplatFilterType
 
using DisplacedDetectorFilterType = DisplacedDetectorImageFilter< ProjectionStackType >
 
using ForwardProjectionFilterType = ForwardProjectionImageFilter< ProjectionStackType, ProjectionStackType >
 
using InterpolationFilterType = InterpolatorWithKnownWeightsImageFilter< VolumeType, VolumeSeriesType >
 
using Pointer = itk::SmartPointer< Self >
 
using Self = FourDReconstructionConjugateGradientOperator
 
using SplatFilterType = SplatWithKnownWeightsImageFilter< VolumeSeriesType, VolumeType >
 
using Superclass = ConjugateGradientOperator< VolumeSeriesType >
 
using VolumeType = ProjectionStackType
 
- Public Types inherited from rtk::ConjugateGradientOperator< VolumeSeriesType >
using Pointer = itk::SmartPointer< Self >
 
using Self = ConjugateGradientOperator
 
using Superclass = itk::ImageToImageFilter< VolumeSeriesType, VolumeSeriesType >
 

Public Member Functions

virtual ::itk::LightObject::Pointer CreateAnother () const
 
virtual bool GetDisableDisplacedDetectorFilter ()
 
virtual const char * GetNameOfClass () const
 
virtual bool GetUseCudaInterpolation ()
 
virtual bool GetUseCudaSources ()
 
virtual bool GetUseCudaSplat ()
 
virtual itk::Array2D< float > GetWeights ()
 
void SetBackProjectionFilter (const typename BackProjectionFilterType::Pointer _arg)
 
virtual void SetDisableDisplacedDetectorFilter (bool _arg)
 
void SetForwardProjectionFilter (const typename ForwardProjectionFilterType::Pointer _arg)
 
virtual void SetGeometry (const ThreeDCircularProjectionGeometry *_arg)
 
virtual void SetSignal (const std::vector< double > signal)
 
virtual void SetUseCudaInterpolation (bool _arg)
 
virtual void SetUseCudaSources (bool _arg)
 
virtual void SetUseCudaSplat (bool _arg)
 
virtual void SetWeights (itk::Array2D< float > _arg)
 
void SetInputVolumeSeries (const VolumeSeriesType *VolumeSeries)
 
VolumeSeriesType::ConstPointer GetInputVolumeSeries ()
 
void SetInputProjectionStack (const ProjectionStackType *Projections)
 
ProjectionStackType::ConstPointer GetInputProjectionStack ()
 
- Public Member Functions inherited from rtk::ConjugateGradientOperator< VolumeSeriesType >
virtual ::itk::LightObject::Pointer CreateAnother () const
 
virtual void SetX (const VolumeSeriesType *OutputImage)
 

Static Public Member Functions

static Pointer New ()
 
- Static Public Member Functions inherited from rtk::ConjugateGradientOperator< VolumeSeriesType >
static Pointer New ()
 

Protected Member Functions

 FourDReconstructionConjugateGradientOperator ()
 
void GenerateData () override
 
void GenerateInputRequestedRegion () override
 
void GenerateOutputInformation () override
 
void InitializeConstantSources ()
 
 ~FourDReconstructionConjugateGradientOperator () override=default
 
- Protected Member Functions inherited from rtk::ConjugateGradientOperator< VolumeSeriesType >
 ConjugateGradientOperator ()
 
 ~ConjugateGradientOperator () override=default
 

Protected Attributes

BackProjectionFilterType::Pointer m_BackProjectionFilter
 
ConstantProjectionStackSourceType::Pointer m_ConstantProjectionStackSource
 
ConstantVolumeSeriesSourceType::Pointer m_ConstantVolumeSeriesSource
 
ConstantVolumeSourceType::Pointer m_ConstantVolumeSource1
 
ConstantVolumeSourceType::Pointer m_ConstantVolumeSource2
 
bool m_DisableDisplacedDetectorFilter
 
DisplacedDetectorFilterType::Pointer m_DisplacedDetectorFilter
 
ForwardProjectionFilterType::Pointer m_ForwardProjectionFilter
 
ThreeDCircularProjectionGeometry::ConstPointer m_Geometry
 
InterpolationFilterType::Pointer m_InterpolationFilter
 
std::vector< double > m_Signal
 
SplatFilterType::Pointer m_SplatFilter
 
bool m_UseCudaInterpolation
 
bool m_UseCudaSources
 
bool m_UseCudaSplat
 
itk::Array2D< float > m_Weights
 

Detailed Description

template<typename VolumeSeriesType, typename ProjectionStackType>
class rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >

Implements part of the 4D reconstruction by conjugate gradient.

See the reference paper: "Cardiac C-arm computed tomography using a 3D + time ROI reconstruction method with spatial and temporal regularization" by Mory et al.

4D conjugate gradient reconstruction consists in iteratively minimizing the following cost function:

Sum_over_theta || sqrt(D) (R_theta S_theta f - p_theta) ||_2^2

with

Computing the gradient of this cost function yields:

S_theta^T R_theta^T D R_theta S_theta f - S_theta^T R_theta^T D p_theta

where A^T means the adjoint of operator A.

FourDReconstructionConjugateGradientOperator implements S_theta^T R_theta^T D R_theta S_theta. It can be achieved by a FourDToProjectionStackImageFilter followed by a DisplacedDetectorFilter and ProjectionStackToFourDImageFilter (simple implementation), or by assembling the internal pipelines of these filters, and removing the unnecessary filters in the middle (a PasteImageFilter and an ExtractImageFilter), which results in performance gain and easier GPU memory management. The current implementation is the optimized one.

dot_inline_dotgraph_11.png
Test:
rtkfourdconjugategradienttest.cxx
Author
Cyril Mory

Definition at line 129 of file rtkFourDReconstructionConjugateGradientOperator.h.

Member Typedef Documentation

template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::BackProjectionFilterType = BackProjectionImageFilter< ProjectionStackType, ProjectionStackType >
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::ConstantProjectionStackSourceType = ConstantImageSource<ProjectionStackType>
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::ConstantVolumeSeriesSourceType = ConstantImageSource<VolumeSeriesType>
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::ConstantVolumeSourceType = ConstantImageSource<VolumeType>
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::CPUProjectionStackType = typename itk::Image< typename ProjectionStackType::PixelType, ProjectionStackType::ImageDimension>

SFINAE type alias, depending on whether a CUDA image is used.

Definition at line 168 of file rtkFourDReconstructionConjugateGradientOperator.h.

template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::CudaConstantVolumeSeriesSourceType = ConstantVolumeSeriesSourceType
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::CudaConstantVolumeSourceType = ConstantVolumeSourceType
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::CudaInterpolateImageFilterType = InterpolationFilterType
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::CudaSplatImageFilterType = SplatFilterType
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::DisplacedDetectorFilterType = DisplacedDetectorImageFilter<ProjectionStackType>
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::ForwardProjectionFilterType = ForwardProjectionImageFilter< ProjectionStackType, ProjectionStackType >
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::InterpolationFilterType = InterpolatorWithKnownWeightsImageFilter<VolumeType, VolumeSeriesType>
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::Pointer = itk::SmartPointer< Self >
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::Self = FourDReconstructionConjugateGradientOperator

Standard class type alias.

Definition at line 135 of file rtkFourDReconstructionConjugateGradientOperator.h.

template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SplatFilterType = SplatWithKnownWeightsImageFilter<VolumeSeriesType, VolumeType>
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::Superclass = ConjugateGradientOperator< VolumeSeriesType>
template<typename VolumeSeriesType , typename ProjectionStackType >
using rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::VolumeType = ProjectionStackType

Convenient type alias

Definition at line 140 of file rtkFourDReconstructionConjugateGradientOperator.h.

Constructor & Destructor Documentation

template<typename VolumeSeriesType , typename ProjectionStackType >
rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::FourDReconstructionConjugateGradientOperator ( )
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::~FourDReconstructionConjugateGradientOperator ( )
overrideprotecteddefault

Member Function Documentation

template<typename VolumeSeriesType , typename ProjectionStackType >
virtual::itk::LightObject::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::CreateAnother ( ) const
template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GenerateData ( )
overrideprotected

Does the real work.

template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GenerateInputRequestedRegion ( )
overrideprotected

Computes the requested region of input images

template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GenerateOutputInformation ( )
overrideprotected

Builds the pipeline and computes output information

template<typename VolumeSeriesType , typename ProjectionStackType >
virtual bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetDisableDisplacedDetectorFilter ( )
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
ProjectionStackType::ConstPointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetInputProjectionStack ( )

Set/Get the stack of projections

template<typename VolumeSeriesType , typename ProjectionStackType >
VolumeSeriesType::ConstPointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetInputVolumeSeries ( )

Set/Get the 4D image to be updated.

template<typename VolumeSeriesType , typename ProjectionStackType >
virtual const char* rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetNameOfClass ( ) const
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
virtual bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetUseCudaInterpolation ( )
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
virtual bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetUseCudaSources ( )
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
virtual bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetUseCudaSplat ( )
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
virtual itk::Array2D<float> rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::GetWeights ( )
virtual

Macros that take care of implementing the Get and Set methods for Weights.

template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::InitializeConstantSources ( )
protected

Initialize the ConstantImageSourceFilter

template<typename VolumeSeriesType , typename ProjectionStackType >
static Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::New ( )
static

Method for creation through the object factory.

template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetBackProjectionFilter ( const typename BackProjectionFilterType::Pointer  _arg)

Pass the backprojection filter to ProjectionStackToFourD

template<typename VolumeSeriesType , typename ProjectionStackType >
virtual void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetDisableDisplacedDetectorFilter ( bool  _arg)
virtual

Set / Get whether the displaced detector filter should be disabled

template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetForwardProjectionFilter ( const typename ForwardProjectionFilterType::Pointer  _arg)

Pass the forward projection filter to FourDToProjectionStack

template<typename VolumeSeriesType , typename ProjectionStackType >
virtual void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetGeometry ( const ThreeDCircularProjectionGeometry _arg)
virtual

Pass the geometry to all filters needing it

template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetInputProjectionStack ( const ProjectionStackType *  Projections)

Set/Get the stack of projections

template<typename VolumeSeriesType , typename ProjectionStackType >
void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetInputVolumeSeries ( const VolumeSeriesType *  VolumeSeries)

Set/Get the 4D image to be updated.

template<typename VolumeSeriesType , typename ProjectionStackType >
virtual void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetSignal ( const std::vector< double >  signal)
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
virtual void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetUseCudaInterpolation ( bool  _arg)
virtual

Use CUDA interpolation/splat filters

template<typename VolumeSeriesType , typename ProjectionStackType >
virtual void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetUseCudaSources ( bool  _arg)
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
virtual void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetUseCudaSplat ( bool  _arg)
virtual
template<typename VolumeSeriesType , typename ProjectionStackType >
virtual void rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::SetWeights ( itk::Array2D< float >  _arg)
virtual

Member Data Documentation

template<typename VolumeSeriesType , typename ProjectionStackType >
BackProjectionFilterType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_BackProjectionFilter
protected

Member pointers to the filters used internally (for convenience)

Definition at line 238 of file rtkFourDReconstructionConjugateGradientOperator.h.

template<typename VolumeSeriesType , typename ProjectionStackType >
ConstantProjectionStackSourceType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_ConstantProjectionStackSource
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
ConstantVolumeSeriesSourceType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_ConstantVolumeSeriesSource
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
ConstantVolumeSourceType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_ConstantVolumeSource1
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
ConstantVolumeSourceType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_ConstantVolumeSource2
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_DisableDisplacedDetectorFilter
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
DisplacedDetectorFilterType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_DisplacedDetectorFilter
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
ForwardProjectionFilterType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_ForwardProjectionFilter
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
ThreeDCircularProjectionGeometry::ConstPointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_Geometry
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
InterpolationFilterType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_InterpolationFilter
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
std::vector<double> rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_Signal
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
SplatFilterType::Pointer rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_SplatFilter
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_UseCudaInterpolation
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_UseCudaSources
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
bool rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_UseCudaSplat
protected
template<typename VolumeSeriesType , typename ProjectionStackType >
itk::Array2D<float> rtk::FourDReconstructionConjugateGradientOperator< VolumeSeriesType, ProjectionStackType >::m_Weights
protected

The documentation for this class was generated from the following file: