go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
Public Types | Public Member Functions | Static Public Member Functions
itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar > Class Template Reference

#include <itkRecursiveBSplineTransformImplementation.h>

Detailed Description

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar>
class itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >

This helper class contains the actual implementation of the recursive B-spline transform.

Define the end case for SpaceDimension = 0.

Compared to the RecursiveBSplineTransformImplementation class, this class works as a vector operator, and is therefore also templated over the OutputDimension.

Note: More optimized code can be found in itkRecursiveBSplineImplementation.h

Definition at line 41 of file itkRecursiveBSplineTransformImplementation.h.

Public Types

typedef ScalarType ** CoefficientPointerVectorType
 
typedef double InternalFloatType
 
typedef ScalarTypeOutputPointType
 
typedef itk::RecursiveBSplineInterpolationWeightFunction< ScalarType, OutputDimension, SplineOrder > RecursiveBSplineWeightFunctionType
 
typedef TScalar ScalarType
 

Public Member Functions

 itkStaticConstMacro (BSplineNumberOfIndices, unsigned int, RecursiveBSplineWeightFunctionType::NumberOfIndices)
 
 itkStaticConstMacro (HelperConstVariable, unsigned int,(SpaceDimension - 1) *(SplineOrder+1))
 

Static Public Member Functions

static void ComputeNonZeroJacobianIndices (unsigned long *&nzji, const unsigned long parametersPerDim, unsigned long currentIndex, const OffsetValueType *gridOffsetTable)
 
static void EvaluateJacobianWithImageGradientProduct (ScalarType *&imageJacobian, const InternalFloatType *movingImageGradient, const double *weights1D, double value)
 
static void GetJacobian (ScalarType *&jacobians, const double *weights1D, double value)
 
static void GetJacobianOfSpatialHessian (InternalFloatType *&jsh_out, const double *weights1D, const double *derivativeWeights1D, const double *hessianWeights1D, const double *directionCosines, InternalFloatType *jsh)
 
static void GetJacobianOfSpatialJacobian (InternalFloatType *&jsj_out, const double *weights1D, const double *derivativeWeights1D, const double *directionCosines, InternalFloatType *jsj)
 
static void GetSpatialHessian (InternalFloatType *sh, const CoefficientPointerVectorType mu, const OffsetValueType *gridOffsetTable, const double *weights1D, const double *derivativeWeights1D, const double *hessianWeights1D)
 
static void GetSpatialJacobian (InternalFloatType *sj, const CoefficientPointerVectorType mu, const OffsetValueType *gridOffsetTable, const double *weights1D, const double *derivativeWeights1D)
 
static void TransformPoint (OutputPointType opp, const CoefficientPointerVectorType mu, const OffsetValueType *gridOffsetTable, const double *weights1D)
 

Member Typedef Documentation

◆ CoefficientPointerVectorType

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
typedef ScalarType** itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::CoefficientPointerVectorType

Definition at line 62 of file itkRecursiveBSplineTransformImplementation.h.

◆ InternalFloatType

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
typedef double itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::InternalFloatType

Definition at line 49 of file itkRecursiveBSplineTransformImplementation.h.

◆ OutputPointType

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
typedef ScalarType* itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::OutputPointType

Definition at line 61 of file itkRecursiveBSplineTransformImplementation.h.

◆ RecursiveBSplineWeightFunctionType

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
typedef itk::RecursiveBSplineInterpolationWeightFunction< ScalarType, OutputDimension, SplineOrder > itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::RecursiveBSplineWeightFunctionType

Typedef to know the number of indices at compile time.

Definition at line 57 of file itkRecursiveBSplineTransformImplementation.h.

◆ ScalarType

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
typedef TScalar itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::ScalarType

Typedef related to the coordinate representation type and the weights type. Usually double, but can be float as well. <Not tested very well for float>

Definition at line 48 of file itkRecursiveBSplineTransformImplementation.h.

Member Function Documentation

◆ ComputeNonZeroJacobianIndices()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::ComputeNonZeroJacobianIndices ( unsigned long *&  nzji,
const unsigned long  parametersPerDim,
unsigned long  currentIndex,
const OffsetValueType *  gridOffsetTable 
)
inlinestatic

ComputeNonZeroJacobianIndices recursive implementation.

Definition at line 132 of file itkRecursiveBSplineTransformImplementation.h.

◆ EvaluateJacobianWithImageGradientProduct()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::EvaluateJacobianWithImageGradientProduct ( ScalarType *&  imageJacobian,
const InternalFloatType movingImageGradient,
const double weights1D,
double  value 
)
inlinestatic

EvaluateJacobianWithImageGradientProduct recursive implementation.

Definition at line 117 of file itkRecursiveBSplineTransformImplementation.h.

◆ GetJacobian()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::GetJacobian ( ScalarType *&  jacobians,
const double weights1D,
double  value 
)
inlinestatic

GetJacobian recursive implementation.

Definition at line 104 of file itkRecursiveBSplineTransformImplementation.h.

◆ GetJacobianOfSpatialHessian()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::GetJacobianOfSpatialHessian ( InternalFloatType *&  jsh_out,
const double weights1D,
const double derivativeWeights1D,
const double hessianWeights1D,
const double directionCosines,
InternalFloatType jsh 
)
inlinestatic

GetJacobianOfSpatialHessian recursive implementation. Multiplication with the direction cosines is performed in the end - case.

Definition at line 320 of file itkRecursiveBSplineTransformImplementation.h.

◆ GetJacobianOfSpatialJacobian()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::GetJacobianOfSpatialJacobian ( InternalFloatType *&  jsj_out,
const double weights1D,
const double derivativeWeights1D,
const double directionCosines,
InternalFloatType jsj 
)
inlinestatic

GetJacobianOfSpatialJacobian recursive implementation. Multiplication with the direction cosines is performed in the end-case.

Definition at line 284 of file itkRecursiveBSplineTransformImplementation.h.

◆ GetSpatialHessian()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::GetSpatialHessian ( InternalFloatType sh,
const CoefficientPointerVectorType  mu,
const OffsetValueType *  gridOffsetTable,
const double weights1D,
const double derivativeWeights1D,
const double hessianWeights1D 
)
inlinestatic

GetSpatialHessian recursive implementation. As an (almost) free by-product this function delivers the displacement, i.e. the TransformPoint() function, as well as the SpatialJacobian.

Specifically, sh is the output argument. It should be allocated with a size OutputDimension * ( SpaceDimension + 1 ) * ( SpaceDimension + 2 ) / 2. sh should point to allocated memory, but this function initializes sh.

Upon return sh contains the spatial Hessian, spatial Jacobian and transformpoint. With Hk = [ transformPoint spatialJacobian' spatialJacobian spatialHessian ] . (Hk specifies all info of dimension (element) k (< OutputDimension) of the point and spatialJacobian is a vector of the derivative of this point with respect to the dimensions.) The i,j (both < SpaceDimension) element of Hk is stored in: i<=j : sh[ k + OutputDimension * (i + j*(j+1)/2 ) ] i>=j : sh[ k + OutputDimension * (j + i*(i+1)/2 ) ]

Note that we store only one of the symmetric halves of Hk.

Definition at line 220 of file itkRecursiveBSplineTransformImplementation.h.

◆ GetSpatialJacobian()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::GetSpatialJacobian ( InternalFloatType sj,
const CoefficientPointerVectorType  mu,
const OffsetValueType *  gridOffsetTable,
const double weights1D,
const double derivativeWeights1D 
)
inlinestatic

GetSpatialJacobian recursive implementation. As an (almost) free by-product this function delivers the displacement, i.e. the TransformPoint() function.

Definition at line 154 of file itkRecursiveBSplineTransformImplementation.h.

◆ itkStaticConstMacro() [1/2]

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::itkStaticConstMacro ( BSplineNumberOfIndices  ,
unsigned int  ,
RecursiveBSplineWeightFunctionType::NumberOfIndices   
)

◆ itkStaticConstMacro() [2/2]

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::itkStaticConstMacro ( HelperConstVariable  ,
unsigned int  ,
(SpaceDimension - 1) *(SplineOrder+1)   
)

Helper constant variable.

◆ TransformPoint()

template<unsigned int OutputDimension, unsigned int SpaceDimension, unsigned int SplineOrder, class TScalar >
static void itk::RecursiveBSplineTransformImplementation< OutputDimension, SpaceDimension, SplineOrder, TScalar >::TransformPoint ( OutputPointType  opp,
const CoefficientPointerVectorType  mu,
const OffsetValueType *  gridOffsetTable,
const double weights1D 
)
inlinestatic

TransformPoint recursive implementation.

Definition at line 65 of file itkRecursiveBSplineTransformImplementation.h.



Generated on 1667476801 for elastix by doxygen 1.9.4 elastix logo