ITK  4.0.0
Insight Segmentation and Registration Toolkit
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Member Functions | Private Attributes
itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction > Class Template Reference

Deformably register two images using the fast curvature algorithm. More...

#include <itkCurvatureRegistrationFilter.h>

Inheritance diagram for itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >:
Collaboration diagram for itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >:

List of all members.

Public Types

typedef SmartPointer< const SelfConstPointer
typedef
DisplacementFieldComponentImageType::Pointer 
DisplacementFieldComponentImagePointer
typedef Image< RealTypeDFT,
TDisplacementField::ImageDimension > 
DisplacementFieldComponentImageType
typedef
DisplacementFieldPixelType::ValueType 
DisplacementFieldComponentType
typedef
TDisplacementField::PixelType 
DisplacementFieldPixelType
typedef
Superclass::DisplacementFieldPointer 
DisplacementFieldPointer
typedef
Superclass::DisplacementFieldType 
DisplacementFieldType
typedef
Superclass::FiniteDifferenceFunctionType 
FiniteDifferenceFunctionType
typedef
Superclass::FixedImagePointer 
FixedImagePointer
typedef Superclass::FixedImageType FixedImageType
typedef
Superclass::MovingImagePointer 
MovingImagePointer
typedef Superclass::MovingImageType MovingImageType
typedef SmartPointer< SelfPointer
typedef double RealTypeDFT
typedef TImageForceFunction RegistrationFunctionType
typedef CurvatureRegistrationFilter Self
typedef
PDEDeformableRegistrationFilter
< TFixedImage, TMovingImage,
TDisplacementField > 
Superclass
typedef Superclass::TimeStepType TimeStepType

Public Member Functions

virtual ::itk::LightObject::Pointer CreateAnother (void) const
virtual double GetMetric () const
virtual const char * GetNameOfClass () const
void SetConstraintWeight (const float w)
void SetTimeStep (const TimeStepType ts)

Static Public Member Functions

static Pointer New ()

Static Public Attributes

static const unsigned int DeformationVectorDimension = DisplacementFieldPixelType::Dimension
static const unsigned int ImageDimension = FixedImageType::ImageDimension

Protected Member Functions

virtual void ApplyUpdate (const TimeStepType &dt)
 CurvatureRegistrationFilter ()
virtual void Initialize ()
void PrintSelf (std::ostream &os, Indent indent) const
 ~CurvatureRegistrationFilter ()

Private Member Functions

 CurvatureRegistrationFilter (const Self &)
void operator= (const Self &)

Private Attributes

float m_ConstraintWeight
RealTypeDFTm_DiagonalElements [ImageDimension]
RealTypeDFTm_DisplacementFieldComponentImage
RealTypeDFTm_DisplacementFieldComponentImageDCT
unsigned int m_FixedImageDimensions [ImageDimension]
fftw_plan m_PlanBackwardDCT
fftw_plan m_PlanForwardDCT
TimeStepType m_TimeStep

Detailed Description

template<class TFixedImage, class TMovingImage, class TDisplacementField, class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
class itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >

Deformably register two images using the fast curvature algorithm.

CurvatureRegistrationFilter implements the fast (i.e., O(n log n) ) registration method described in B. Fischer and J. Modersitzki, "A unified approach to fast image registration and a new curvature based registration technique," Linear Algebra and its Applications, vol. 380, pp. 107-124, 2004.

A deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.

This class is templated over the fixed image type, moving image type, the deformation field type, and the images forces function. Fundamentally, any image force function in the PDE framework should work (e.g., mean squares, demons, correlation, mutual information, etc.).

The input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.

The output deformation field can be obtained via methods GetOutput or GetDisplacementField.

This class makes use of the finite difference solver hierarchy. Update for each iteration is computed in the function class defined by the template parameter TImageForceFunction.

The algorithm has three parameters: the number of iteration to be performed, the time step, and the weight of the curvature regularization term in the overall cost function.

Warning:
The algorithm parameters (time step and constraint weight) as given by F&M (dt=100; alpha=0.01) do not seem to work with this implementation. In fact, they seem to be off by orders of magnitude. This may be an effect of different normalization of the image forces, or this implementation may be incorrect. Be aware.
This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.
There is something sketchy going on with the DCT (see FFTW documentation) regarding numerical stability of the "ordinary" DCT. Also, F&M are slightly ambiguous in their use of the DCT operator. So it is quite possible that the implementation of their algorithm is not quite correct. Ultimately, they are saying that the curvature smoother is equivalent to a special low-pass filter that is applied to the DCT coefficients.
Note:
This class was developed with funding from:

"CNS Deficits: Interaction of Age and Alcoholism" NIAAA AA05965, PI: A. Pfefferbaum

"INIA: Imaging Core" NIAAA AA13521, PI: A. Pfefferbaum

See also:
CurvatureRegistrationFunction
Author:
Torsten Rohlfing, SRI International, Neuroscience Program

Definition at line 100 of file itkCurvatureRegistrationFilter.h.


Member Typedef Documentation

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef SmartPointer< const Self > itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::ConstPointer
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef DisplacementFieldComponentImageType::Pointer itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::DisplacementFieldComponentImagePointer

Definition at line 152 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Image< RealTypeDFT, TDisplacementField::ImageDimension > itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::DisplacementFieldComponentImageType

Definition at line 151 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef DisplacementFieldPixelType::ValueType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::DisplacementFieldComponentType

Definition at line 137 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef TDisplacementField::PixelType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::DisplacementFieldPixelType

Definition at line 136 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::DisplacementFieldPointer itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::DisplacementFieldPointer
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::DisplacementFieldType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::DisplacementFieldType
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::FiniteDifferenceFunctionType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::FiniteDifferenceFunctionType
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::FixedImagePointer itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::FixedImagePointer
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::FixedImageType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::FixedImageType
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::MovingImagePointer itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::MovingImagePointer
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::MovingImageType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::MovingImageType
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef SmartPointer< Self > itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::Pointer
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef double itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::RealTypeDFT

Definition at line 142 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef TImageForceFunction itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::RegistrationFunctionType

CurvatureRegistrationFilterFunction type.

Definition at line 159 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef CurvatureRegistrationFilter itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::Self
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField > itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::Superclass
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
typedef Superclass::TimeStepType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::TimeStepType

Inherit types from superclass.

Reimplemented from itk::DenseFiniteDifferenceImageFilter< TDisplacementField, TDisplacementField >.

Definition at line 116 of file itkCurvatureRegistrationFilter.h.


Constructor & Destructor Documentation

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::CurvatureRegistrationFilter ( ) [protected]
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::~CurvatureRegistrationFilter ( ) [protected]
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::CurvatureRegistrationFilter ( const Self ) [private]

Member Function Documentation

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
virtual void itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::ApplyUpdate ( const TimeStepType dt) [protected, virtual]
template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
virtual::itk::LightObject::Pointer itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::CreateAnother ( void  ) const [virtual]

Create an object from an instance, potentially deferring to a factory. This method allows you to create an instance of an object that is exactly the same type as the referring object. This is useful in cases where an object has been cast back to a base class.

Reimplemented from itk::PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
virtual double itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::GetMetric ( ) const [virtual]

Get the metric value. The metric value is the mean square difference in intensity between the fixed image and transforming moving image computed over the the overlapping region between the two images. This is value is only available for the previous iteration and NOT the current iteration.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
virtual const char* itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::GetNameOfClass ( ) const [virtual]

Run-time type information (and related methods).

Reimplemented from itk::PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
virtual void itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::Initialize ( ) [protected, virtual]

Initialize the state of filter before starting first iteration.

Reimplemented from itk::PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
static Pointer itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::New ( ) [static]

Method for creation through the object factory.

Reimplemented from itk::PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
void itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::operator= ( const Self ) [private]

PushBackInput(), PushFronInput() in the public section force the input to be the type expected by an ImageToImageFilter. However, these methods end of "hiding" the versions from the superclass (ProcessObject) whose arguments are DataObjects. Here, we re-expose the versions from ProcessObject to avoid warnings about hiding methods from the superclass.

Reimplemented from itk::PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
void itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::PrintSelf ( std::ostream &  os,
Indent  indent 
) const [protected, virtual]

Set/Get the desired limits of the Gaussian kernel width.

See also:
GaussianOperator.

Reimplemented from itk::PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
void itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::SetConstraintWeight ( const float  w) [inline]

Set the constraint vs. image forces weight.

Definition at line 162 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
void itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::SetTimeStep ( const TimeStepType  ts) [inline]

Set the time step.

Definition at line 165 of file itkCurvatureRegistrationFilter.h.


Member Data Documentation

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
const unsigned int itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::DeformationVectorDimension = DisplacementFieldPixelType::Dimension [static]

Definition at line 138 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
const unsigned int itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::ImageDimension = FixedImageType::ImageDimension [static]

Inherit some enums and typedefs from the superclass.

Reimplemented from itk::PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >.

Definition at line 124 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
float itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_ConstraintWeight [private]

Definition at line 194 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
RealTypeDFT* itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_DiagonalElements[ImageDimension] [private]

Definition at line 201 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
RealTypeDFT* itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_DisplacementFieldComponentImage [private]

Definition at line 191 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
RealTypeDFT* itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_DisplacementFieldComponentImageDCT [private]

Definition at line 192 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
unsigned int itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_FixedImageDimensions[ImageDimension] [private]

Definition at line 189 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
fftw_plan itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_PlanBackwardDCT [private]

Definition at line 197 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
fftw_plan itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_PlanForwardDCT [private]

Definition at line 196 of file itkCurvatureRegistrationFilter.h.

template<class TFixedImage , class TMovingImage , class TDisplacementField , class TImageForceFunction = MeanSquareRegistrationFunction< TFixedImage, TMovingImage, TDisplacementField >>
TimeStepType itk::CurvatureRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField, TImageForceFunction >::m_TimeStep [private]

Definition at line 199 of file itkCurvatureRegistrationFilter.h.


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