template<typename TParametersValueType = double, unsigned int VDimension = 3, unsigned int VSplineOrder = 3>
class itk::BSplineDeformableTransform< TParametersValueType, VDimension, VSplineOrder >
Deformable transform using a BSpline representation.
- Note
- BSplineTransform is a newer version of this class, and it is preferred.
This class encapsulates a deformable transform of points from one N-dimensional space to another N-dimensional space. The deformation field is modeled using B-splines. A deformation is defined on a sparse regular grid of control points \( \vec{\lambda}_j \) and is varied by defining a deformation \( \vec{g}(\vec{\lambda}_j) \) of each control point. The deformation \( D(\vec{x}) \) at any point \( \vec{x} \) is obtained by using a B-spline interpolation kernel.
The deformation field grid is defined by a user specified GridRegion, GridSpacing and GridOrigin. Each grid/control point has associated with it N deformation coefficients \( \vec{\delta}_j \), representing the N directional components of the deformation. Deformation outside the grid plus support region for the BSpline interpolation is assumed to be zero.
Additionally, the user can specified an addition bulk transform \( B \) such that the transformed point is given by:
\[ \vec{y} = B(\vec{x}) + D(\vec{x}) \]
The parameters for this transform is an N x N-D grid of spline coefficients. The user specifies the parameters as one flat array: each N-D grid is represented by an array in the same way an N-D image is represented in the buffer; the N arrays are then concatenated together on form a single array.
For efficiency, this transform does not make a copy of the parameters. It only keeps a pointer to the input parameters and assumes that the memory is managed by the caller.
The following illustrates the typical usage of this class:
using TransformType = BSplineDeformableTransform<double,2,3>;
transform->SetGridRegion( region );
transform->SetGridSpacing( spacing );
transform->SetGridOrigin( origin );
TransformType::ParametersType parameters( transform->GetNumberOfParameters() );
transform->SetParameters( parameters )
outputPoint = transform->TransformPoint( inputPoint );
An alternative way to set the B-spline coefficients is via array of images. The grid region, spacing and origin information is taken directly from the first image. It is assumed that the subsequent images are the same buffered region. The following illustrates the API:
TransformType::ImageConstPointer
images[2];
transform->SetCoefficientImages(
images );
outputPoint = transform->TransformPoint( inputPoint );
Warning: use either the SetParameters() or SetCoefficientImages() API. Mixing the two modes may results in unexpected results.
The class is templated coordinate representation type (float or double), the space dimension and the spline order.
- See also
- BSplineTransform
- ITK Sphinx Examples:
-
Definition at line 113 of file itkBSplineDeformableTransform.h.
|
using | BulkTransformPointer = typename BulkTransformType::ConstPointer |
|
using | BulkTransformType = Transform< TParametersValueType, Self::SpaceDimension, Self::SpaceDimension > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | InputPointType = Point< TParametersValueType, Self::SpaceDimension > |
|
using | OutputPointType = Point< TParametersValueType, Self::SpaceDimension > |
|
using | PhysicalDimensionsType = typename Superclass::SpacingType |
|
using | Pointer = SmartPointer< Self > |
|
using | ScalarType = TParametersValueType |
|
using | Self = BSplineDeformableTransform |
|
using | Superclass = BSplineBaseTransform< TParametersValueType, VDimension, VSplineOrder > |
|
using | CoefficientImageArray = FixedArray< ImagePointer, VDimension > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | ContinuousIndexType = typename WeightsFunctionType::ContinuousIndexType |
|
using | DirectionType = typename ImageType::DirectionType |
|
using | ImagePointer = typename ImageType::Pointer |
|
using | ImageType = Image< ParametersValueType, Self::SpaceDimension > |
|
using | IndexType = typename RegionType::IndexType |
|
using | InputCovariantVectorType = CovariantVector< TParametersValueType, Self::SpaceDimension > |
|
using | InputPointType = Point< TParametersValueType, Self::SpaceDimension > |
|
using | InputVectorType = Vector< TParametersValueType, Self::SpaceDimension > |
|
using | InputVnlVectorType = vnl_vector_fixed< TParametersValueType, SpaceDimension > |
|
using | MeshSizeType = SizeType |
|
using | OriginType = typename ImageType::PointType |
|
using | OutputCovariantVectorType = CovariantVector< TParametersValueType, Self::SpaceDimension > |
|
using | OutputPointType = Point< TParametersValueType, Self::SpaceDimension > |
|
using | OutputVectorType = Vector< TParametersValueType, Self::SpaceDimension > |
|
using | OutputVnlVectorType = vnl_vector_fixed< TParametersValueType, SpaceDimension > |
|
using | ParameterIndexArrayType = FixedArray< unsigned long, NumberOfWeights > |
|
using | ParametersValueType = typename ParametersType::ValueType |
|
using | PhysicalDimensionsType = typename ImageType::SpacingType |
|
using | PixelType = typename ImageType::PixelType |
|
using | Pointer = SmartPointer< Self > |
|
using | RegionType = ImageRegion< Self::SpaceDimension > |
|
using | Self = BSplineBaseTransform |
|
using | SizeType = typename RegionType::SizeType |
|
using | SpacingType = typename ImageType::SpacingType |
|
using | Superclass = Transform< TParametersValueType, VDimension, VDimension > |
|
using | WeightsFunctionType = BSplineInterpolationWeightFunction< ScalarType, Self::SpaceDimension, Self::SplineOrder > |
|
using | WeightsType = typename WeightsFunctionType::WeightsType |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DerivativeType = Array< ParametersValueType > |
|
using | DirectionChangeMatrix = Matrix< double, Self::OutputSpaceDimension, Self::InputSpaceDimension > |
|
using | InputCovariantVectorType = CovariantVector< TParametersValueType, VInputDimension > |
|
using | InputDiffusionTensor3DType = DiffusionTensor3D< TParametersValueType > |
|
using | InputDirectionMatrix = Matrix< double, Self::InputSpaceDimension, Self::InputSpaceDimension > |
|
using | InputPointType = Point< TParametersValueType, VInputDimension > |
|
using | InputSymmetricSecondRankTensorType = SymmetricSecondRankTensor< TParametersValueType, VInputDimension > |
|
using | InputVectorPixelType = VariableLengthVector< TParametersValueType > |
|
using | InputVectorType = Vector< TParametersValueType, VInputDimension > |
|
using | InputVnlVectorType = vnl_vector_fixed< TParametersValueType, VInputDimension > |
|
using | InverseJacobianPositionType = vnl_matrix_fixed< ParametersValueType, VInputDimension, VOutputDimension > |
|
using | InverseTransformBasePointer = typename InverseTransformBaseType::Pointer |
|
using | InverseTransformBaseType = Transform< TParametersValueType, VOutputDimension, VInputDimension > |
|
using | JacobianPositionType = vnl_matrix_fixed< ParametersValueType, VOutputDimension, VInputDimension > |
|
using | JacobianType = Array2D< ParametersValueType > |
|
using | MatrixType = Matrix< TParametersValueType, Self::OutputSpaceDimension, Self::InputSpaceDimension > |
|
using | OutputCovariantVectorType = CovariantVector< TParametersValueType, VOutputDimension > |
|
using | OutputDiffusionTensor3DType = DiffusionTensor3D< TParametersValueType > |
|
using | OutputDirectionMatrix = Matrix< double, Self::OutputSpaceDimension, Self::OutputSpaceDimension > |
|
using | OutputPointType = Point< TParametersValueType, VOutputDimension > |
|
using | OutputSymmetricSecondRankTensorType = SymmetricSecondRankTensor< TParametersValueType, VOutputDimension > |
|
using | OutputVectorPixelType = VariableLengthVector< TParametersValueType > |
|
using | OutputVectorType = Vector< TParametersValueType, VOutputDimension > |
|
using | OutputVnlVectorType = vnl_vector_fixed< TParametersValueType, VOutputDimension > |
|
using | Pointer = SmartPointer< Self > |
|
using | ScalarType = ParametersValueType |
|
using | Self = Transform |
|
using | Superclass = TransformBaseTemplate< TParametersValueType > |
|
|
void | ComputeJacobianWithRespectToParameters (const InputPointType &, JacobianType &) const override |
|
virtual DirectionType | GetGridDirection () const |
|
virtual OriginType | GetGridOrigin () const |
|
virtual RegionType | GetGridRegion () const |
|
virtual SpacingType | GetGridSpacing () const |
|
const char * | GetNameOfClass () const override |
|
NumberOfParametersType | GetNumberOfParameters () const override |
|
NumberOfParametersType | GetNumberOfParametersPerDimension () const override |
|
virtual const RegionType & | GetValidRegion () const |
|
| itkCloneMacro (Self) |
|
void | SetCoefficientImages (const CoefficientImageArray &images) override |
|
virtual void | SetGridDirection (const DirectionType &) |
|
virtual void | SetGridOrigin (const OriginType &) |
|
virtual void | SetGridRegion (const RegionType &) |
|
virtual void | SetGridSpacing (const SpacingType &) |
|
|
void | SetFixedParameters (const FixedParametersType &passedParameters) override |
|
|
void | TransformPoint (const InputPointType &inputPoint, OutputPointType &outputPoint, WeightsType &weights, ParameterIndexArrayType &indices, bool &inside) const override |
|
|
virtual void | SetBulkTransform (const BulkTransformType *_arg) |
|
virtual const BulkTransformType * | GetBulkTransform () const |
|
void | ComputeJacobianFromBSplineWeightsWithRespectToPosition (const InputPointType &, WeightsType &, ParameterIndexArrayType &) const |
|
void | ComputeJacobianWithRespectToPosition (const InputPointType &, JacobianPositionType &) const override |
|
const CoefficientImageArray | GetCoefficientImages () const |
|
const FixedParametersType & | GetFixedParameters () const override |
|
const char * | GetNameOfClass () const override |
|
unsigned int | GetNumberOfAffectedWeights () const |
|
NumberOfParametersType | GetNumberOfLocalParameters () const override |
|
const ParametersType & | GetParameters () const override |
|
TransformCategoryEnum | GetTransformCategory () const override |
|
| itkCloneMacro (Self) |
|
void | SetIdentity () |
|
void | SetParameters (const ParametersType ¶meters) override |
|
void | SetParametersByValue (const ParametersType ¶meters) override |
|
OutputPointType | TransformPoint (const InputPointType &point) const override |
|
OutputVnlVectorType | TransformVector (const InputVnlVectorType &) const override |
|
void | UpdateTransformParameters (const DerivativeType &update, TParametersValueType factor=1.0) override |
|
OutputVectorType | TransformVector (const InputVectorType &) const override |
|
OutputCovariantVectorType | TransformCovariantVector (const InputCovariantVectorType &) const override |
|
virtual void | ComputeJacobianWithRespectToParametersCachedTemporaries (const InputPointType &p, JacobianType &jacobian, JacobianType &) const |
|
void | CopyInFixedParameters (const FixedParametersValueType *const begin, const FixedParametersValueType *const end) override |
|
void | CopyInParameters (const ParametersValueType *const begin, const ParametersValueType *const end) override |
|
const FixedParametersType & | GetFixedParameters () const override |
|
unsigned int | GetInputSpaceDimension () const override |
|
bool | GetInverse (Self *) const |
|
virtual InverseTransformBasePointer | GetInverseTransform () const |
|
const char * | GetNameOfClass () const override |
|
virtual NumberOfParametersType | GetNumberOfFixedParameters () const |
|
NumberOfParametersType | GetNumberOfParameters () const override |
|
unsigned int | GetOutputSpaceDimension () const override |
|
const ParametersType & | GetParameters () const override |
|
TransformCategoryEnum | GetTransformCategory () const override |
|
std::string | GetTransformTypeAsString () const override |
|
virtual bool | IsLinear () const |
|
| itkCloneMacro (Self) |
|
void | SetParametersByValue (const ParametersType &p) override |
|
virtual OutputCovariantVectorType | TransformCovariantVector (const InputCovariantVectorType &) const |
|
virtual OutputCovariantVectorType | TransformCovariantVector (const InputCovariantVectorType &vector, const InputPointType &point) const |
|
virtual OutputVectorPixelType | TransformCovariantVector (const InputVectorPixelType &) const |
|
virtual OutputVectorPixelType | TransformCovariantVector (const InputVectorPixelType &vector, const InputPointType &point) const |
|
virtual OutputDiffusionTensor3DType | TransformDiffusionTensor3D (const InputDiffusionTensor3DType &) const |
|
virtual OutputDiffusionTensor3DType | TransformDiffusionTensor3D (const InputDiffusionTensor3DType &inputTensor, const InputPointType &point) const |
|
virtual OutputVectorPixelType | TransformDiffusionTensor3D (const InputVectorPixelType &) const |
|
virtual OutputVectorPixelType | TransformDiffusionTensor3D (const InputVectorPixelType &inputTensor, const InputPointType &point) const |
|
virtual OutputPointType | TransformPoint (const InputPointType &) const=0 |
|
virtual OutputSymmetricSecondRankTensorType | TransformSymmetricSecondRankTensor (const InputSymmetricSecondRankTensorType &) const |
|
virtual OutputSymmetricSecondRankTensorType | TransformSymmetricSecondRankTensor (const InputSymmetricSecondRankTensorType &inputTensor, const InputPointType &point) const |
|
virtual OutputVectorPixelType | TransformSymmetricSecondRankTensor (const InputVectorPixelType &) const |
|
virtual OutputVectorPixelType | TransformSymmetricSecondRankTensor (const InputVectorPixelType &inputTensor, const InputPointType &point) const |
|
virtual OutputVectorPixelType | TransformVector (const InputVectorPixelType &) const |
|
virtual OutputVectorPixelType | TransformVector (const InputVectorPixelType &vector, const InputPointType &point) const |
|
virtual OutputVectorType | TransformVector (const InputVectorType &) const |
|
virtual OutputVectorType | TransformVector (const InputVectorType &vector, const InputPointType &point) const |
|
virtual OutputVnlVectorType | TransformVector (const InputVnlVectorType &) const |
|
virtual OutputVnlVectorType | TransformVector (const InputVnlVectorType &vector, const InputPointType &point) const |
|
virtual void | UpdateTransformParameters (const DerivativeType &update, ParametersValueType factor=1.0) |
|
virtual void | ComputeJacobianWithRespectToParameters (const InputPointType &, JacobianType &) const=0 |
|
virtual void | ComputeJacobianWithRespectToPosition (const InputPointType &, JacobianPositionType &) const |
|
template< typename TImage > std std::enable_if_t< TImage::ImageDimension==VInputDimension &&TImage::ImageDimension==VOutputDimension, void > | ApplyToImageMetadata (SmartPointer< TImage > image) const |
|