18 #ifndef itkBSplineBaseTransform_h
19 #define itkBSplineBaseTransform_h
33 template <
typename TParametersValueType =
double,
unsigned int VDimension = 3,
unsigned int VSplineOrder = 3>
49 static constexpr
unsigned int SpaceDimension = VDimension;
52 static constexpr
unsigned int SplineOrder = VSplineOrder;
61 using typename Superclass::FixedParametersType;
62 using typename Superclass::ParametersType;
70 using typename Superclass::TransformCategoryEnum;
73 using typename Superclass::NumberOfParametersType;
111 SetParameters(
const ParametersType & parameters)
override;
136 SetFixedParameters(
const FixedParametersType & parameters)
override = 0;
156 SetParametersByValue(
const ParametersType & parameters)
override;
170 const ParametersType &
171 GetParameters()
const override;
174 const FixedParametersType &
175 GetFixedParameters()
const override;
201 return this->m_CoefficientImages;
204 using typename Superclass::DerivativeType;
217 UpdateTransformParameters(
const DerivativeType & update, TParametersValueType factor = 1.0)
override;
239 static constexpr
unsigned int NumberOfWeights{ WeightsFunctionType::NumberOfWeights };
257 bool & inside)
const = 0;
259 #if !defined(ITK_LEGACY_REMOVE)
261 itkLegacyMacro(
unsigned long GetNumberOfWeights()
const)
263 return m_WeightsFunction->GetNumberOfWeights();
269 using Superclass::TransformVector;
273 itkExceptionMacro(
"Method not applicable for deformable transform.");
282 itkExceptionMacro(
"Method not applicable for deformable transform. ");
287 using Superclass::TransformCovariantVector;
288 OutputCovariantVectorType
291 itkExceptionMacro(
"Method not applicable for deformable transform. ");
297 ComputeJacobianFromBSplineWeightsWithRespectToPosition(
const InputPointType &,
299 ParameterIndexArrayType &)
const;
302 ComputeJacobianWithRespectToParameters(
const InputPointType &, JacobianType &)
const override = 0;
307 itkExceptionMacro(
"ComputeJacobianWithRespectToPosition not yet implemented "
311 using Superclass::ComputeJacobianWithRespectToPosition;
314 NumberOfParametersType
315 GetNumberOfParameters()
const override = 0;
318 virtual NumberOfParametersType
319 GetNumberOfParametersPerDimension()
const = 0;
321 TransformCategoryEnum
324 return Self::TransformCategoryEnum::BSpline;
328 GetNumberOfAffectedWeights()
const;
336 NumberOfParametersType
339 return this->GetNumberOfParameters();
345 PrintSelf(std::ostream & os,
Indent indent)
const override;
351 itkSetObjectMacro(WeightsFunction, WeightsFunctionType);
352 itkGetModifiableObjectMacro(WeightsFunction, WeightsFunctionType);
362 SetFixedParametersFromTransformDomainInformation()
const;
366 SetFixedParametersGridSizeFromTransformDomainInformation()
const = 0;
370 SetFixedParametersGridOriginFromTransformDomainInformation()
const = 0;
374 SetFixedParametersGridSpacingFromTransformDomainInformation()
const = 0;
378 SetFixedParametersGridDirectionFromTransformDomainInformation()
const = 0;
382 SetCoefficientImageInformationFromFixedParameters() = 0;
386 InsideValidRegion(ContinuousIndexType &)
const = 0;
405 ParametersType m_InternalParametersBuffer{};
411 static CoefficientImageArray
412 ArrayOfImagePointerGeneratorHelper();
416 #ifndef ITK_MANUAL_INSTANTIATION
417 # include "itkBSplineBaseTransform.hxx"