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::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage > Class Template Reference

#include <rtkADMMTotalVariationConjugateGradientOperator.h>

+ Inheritance diagram for rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >:
+ Collaboration diagram for rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >:

Public Types

using BackProjectionFilterPointer = typename BackProjectionFilterType::Pointer
 
using BackProjectionFilterType = rtk::BackProjectionImageFilter< TOutputImage, TOutputImage >
 
using DisplacedDetectorFilterType = rtk::DisplacedDetectorImageFilter< TOutputImage >
 
using DivergenceFilterType = rtk::BackwardDifferenceDivergenceImageFilter< TGradientOutputImage, TOutputImage >
 
using ForwardProjectionFilterPointer = typename ForwardProjectionFilterType::Pointer
 
using ForwardProjectionFilterType = rtk::ForwardProjectionImageFilter< TOutputImage, TOutputImage >
 
using GatingWeightsFilterType = rtk::MultiplyByVectorImageFilter< TOutputImage >
 
using GradientFilterType = ForwardDifferenceGradientImageFilter< TOutputImage, typename TOutputImage::ValueType, typename TOutputImage::ValueType, TGradientOutputImage >
 
using MultiplyFilterType = itk::MultiplyImageFilter< TOutputImage >
 
using Pointer = itk::SmartPointer< Self >
 
using Self = ADMMTotalVariationConjugateGradientOperator
 
using SubtractFilterType = itk::SubtractImageFilter< TOutputImage >
 
using Superclass = ConjugateGradientOperator< TOutputImage >
 
- Public Types inherited from rtk::ConjugateGradientOperator< TOutputImage >
using Pointer = itk::SmartPointer< Self >
 
using Self = ConjugateGradientOperator
 
using Superclass = itk::ImageToImageFilter< TOutputImage, TOutputImage >
 

Public Member Functions

virtual ::itk::LightObject::Pointer CreateAnother () const
 
virtual bool GetDisableDisplacedDetectorFilter ()
 
virtual const char * GetNameOfClass () const
 
void SetBackProjectionFilter (const BackProjectionFilterPointer _arg)
 
virtual void SetBeta (float _arg)
 
virtual void SetDisableDisplacedDetectorFilter (bool _arg)
 
void SetForwardProjectionFilter (const ForwardProjectionFilterPointer _arg)
 
void SetGatingWeights (std::vector< float > weights)
 
virtual void SetGeometry (ThreeDCircularProjectionGeometry *_arg)
 
- Public Member Functions inherited from rtk::ConjugateGradientOperator< TOutputImage >
virtual ::itk::LightObject::Pointer CreateAnother () const
 
virtual void SetX (const TOutputImage *OutputImage)
 

Static Public Member Functions

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

Protected Member Functions

 ADMMTotalVariationConjugateGradientOperator ()
 
void GenerateData () override
 
 ~ADMMTotalVariationConjugateGradientOperator () override=default
 
void VerifyInputInformation () override
 
void GenerateInputRequestedRegion () override
 
void GenerateOutputInformation () override
 
- Protected Member Functions inherited from rtk::ConjugateGradientOperator< TOutputImage >
 ConjugateGradientOperator ()
 
 ~ConjugateGradientOperator () override=default
 

Protected Attributes

BackProjectionFilterPointer m_BackProjectionFilter
 
float m_Beta
 
bool m_DisableDisplacedDetectorFilter
 
DisplacedDetectorFilterType::Pointer m_DisplacedDetectorFilter
 
DivergenceFilterType::Pointer m_DivergenceFilter
 
ForwardProjectionFilterPointer m_ForwardProjectionFilter
 
std::vector< float > m_GatingWeights
 
GatingWeightsFilterType::Pointer m_GatingWeightsFilter
 
ThreeDCircularProjectionGeometry::Pointer m_Geometry
 
GradientFilterType::Pointer m_GradientFilter
 
bool m_IsGated
 
MultiplyFilterType::Pointer m_MultiplyFilter
 
SubtractFilterType::Pointer m_SubtractFilter
 
MultiplyFilterType::Pointer m_ZeroMultiplyProjectionFilter
 
MultiplyFilterType::Pointer m_ZeroMultiplyVolumeFilter
 

Detailed Description

template<typename TOutputImage, typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
class rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >

Implements the operator A used in the conjugate gradient step of ADMM reconstruction with total variation regularization.

This filter implements the operator A used in the conjugate gradient step of a reconstruction method based on compressed sensing. The method attempts to find the f that minimizes || sqrt(D) (Rf -p) ||_2^2 + alpha * TV(f), with R the forward projection operator, p the measured projections, D the displaced detector weighting matrix, and TV the total variation. Details on the method and the calculations can be found in

Mory, C., B. Zhang, V. Auvray, M. Grass, D. Schafer, F. Peyrin, S. Rit, P. Douek, and L. Boussel. "ECG-Gated C-Arm Computed Tomography Using L1 Regularization." In Proceedings of the 20th European Signal Processing Conference (EUSIPCO), 2728-32, 2012.

This filter takes in input f and outputs R_t D R f - beta div(grad(f)).

dot_inline_dotgraph_2.png
Test:
rtkadmmtotalvariationtest.cxx
Author
Cyril Mory

Definition at line 105 of file rtkADMMTotalVariationConjugateGradientOperator.h.

Member Typedef Documentation

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::BackProjectionFilterPointer = typename BackProjectionFilterType::Pointer
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::BackProjectionFilterType = rtk::BackProjectionImageFilter< TOutputImage, TOutputImage >
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::DisplacedDetectorFilterType = rtk::DisplacedDetectorImageFilter<TOutputImage>
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::DivergenceFilterType = rtk::BackwardDifferenceDivergenceImageFilter <TGradientOutputImage, TOutputImage>
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::ForwardProjectionFilterPointer = typename ForwardProjectionFilterType::Pointer
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::ForwardProjectionFilterType = rtk::ForwardProjectionImageFilter< TOutputImage, TOutputImage >
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GatingWeightsFilterType = rtk::MultiplyByVectorImageFilter<TOutputImage>
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GradientFilterType = ForwardDifferenceGradientImageFilter<TOutputImage, typename TOutputImage::ValueType, typename TOutputImage::ValueType, TGradientOutputImage>
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::MultiplyFilterType = itk::MultiplyImageFilter<TOutputImage>
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::Pointer = itk::SmartPointer< Self >
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::Self = ADMMTotalVariationConjugateGradientOperator

Standard class type alias.

Definition at line 111 of file rtkADMMTotalVariationConjugateGradientOperator.h.

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::SubtractFilterType = itk::SubtractImageFilter<TOutputImage>
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
using rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::Superclass = ConjugateGradientOperator< TOutputImage >

Constructor & Destructor Documentation

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::ADMMTotalVariationConjugateGradientOperator ( )
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::~ADMMTotalVariationConjugateGradientOperator ( )
overrideprotecteddefault

Member Function Documentation

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
virtual::itk::LightObject::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::CreateAnother ( ) const
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GenerateData ( )
overrideprotected

Does the real work.

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GenerateInputRequestedRegion ( )
overrideprotected

The volume and the projections must have different requested regions

Referenced by rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::VerifyInputInformation().

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GenerateOutputInformation ( )
overrideprotected

The volume and the projections must have different requested regions

Referenced by rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::VerifyInputInformation().

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
virtual bool rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GetDisableDisplacedDetectorFilter ( )
virtual
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
virtual const char* rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GetNameOfClass ( ) const
virtual

Run-time type information (and related methods).

Reimplemented from rtk::ConjugateGradientOperator< TOutputImage >.

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
static Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::New ( )
static

Method for creation through the object factory.

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::SetBackProjectionFilter ( const BackProjectionFilterPointer  _arg)

Set the backprojection filter

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
virtual void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::SetBeta ( float  _arg)
virtual

Set the regularization parameter

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
virtual void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::SetDisableDisplacedDetectorFilter ( bool  _arg)
virtual

Set / Get whether the displaced detector filter should be disabled

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::SetForwardProjectionFilter ( const ForwardProjectionFilterPointer  _arg)

Set the forward projection filter

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::SetGatingWeights ( std::vector< float >  weights)

In the case of a gated reconstruction, set the gating weights

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
virtual void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::SetGeometry ( ThreeDCircularProjectionGeometry _arg)
virtual

Pass the geometry to all filters needing it

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
void rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::VerifyInputInformation ( )
inlineoverrideprotected

When the inputs have the same type, ITK checks whether they occupy the same physical space or not. Obviously they dont, so we have to remove this check

Definition at line 190 of file rtkADMMTotalVariationConjugateGradientOperator.h.

References rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GenerateInputRequestedRegion(), and rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::GenerateOutputInformation().

Member Data Documentation

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
BackProjectionFilterPointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_BackProjectionFilter
protected

Member pointers to the filters used internally (for convenience)

Definition at line 165 of file rtkADMMTotalVariationConjugateGradientOperator.h.

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
float rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_Beta
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
bool rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_DisableDisplacedDetectorFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
DisplacedDetectorFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_DisplacedDetectorFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
DivergenceFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_DivergenceFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
ForwardProjectionFilterPointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_ForwardProjectionFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
std::vector<float> rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_GatingWeights
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
GatingWeightsFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_GatingWeightsFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
ThreeDCircularProjectionGeometry::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_Geometry
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
GradientFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_GradientFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
bool rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_IsGated
protected

Have gating weights been set ? If so, apply them, otherwise ignore the gating weights filter

Definition at line 183 of file rtkADMMTotalVariationConjugateGradientOperator.h.

template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
MultiplyFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_MultiplyFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
SubtractFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_SubtractFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
MultiplyFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_ZeroMultiplyProjectionFilter
protected
template<typename TOutputImage , typename TGradientOutputImage = itk::Image< itk::CovariantVector < typename TOutputImage::ValueType, TOutputImage::ImageDimension >, TOutputImage::ImageDimension >>
MultiplyFilterType::Pointer rtk::ADMMTotalVariationConjugateGradientOperator< TOutputImage, TGradientOutputImage >::m_ZeroMultiplyVolumeFilter
protected

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