template<typename TFixedImage, typename TMovingImage, typename TOutputTransform = TimeVaryingBSplineVelocityFieldTransform<double, TFixedImage::ImageDimension>, typename TVirtualImage = TFixedImage, typename TPointSet = PointSet<unsigned int, TFixedImage::ImageDimension>>
class itk::TimeVaryingBSplineVelocityFieldImageRegistrationMethod< TFixedImage, TMovingImage, TOutputTransform, TVirtualImage, TPointSet >
Interface method for the current registration framework using the time varying velocity field transform.
Output: The output is the updated transform which has been added to the composite transform.
This derived class from the SimpleImageRegistrationMethod class is specialized to handle time-varying velocity field transforms of which there are currently 3:
- TimeVaryingDisplacementFieldTransform
- GaussianSmoothingOnUpdateTimeVaryingDisplacementFieldTransform
- BSplineSmoothingOnUpdateTimeVaryingDisplacementFieldTransform
The latter is derived from the former and performs an optional spatial and temporal smoothing on the update and total velocity fields. Integration of the velocity field is performed using 4th order Runge Kutta and is performed using the class itkTimeVaryingBSplineVelocityFieldIntegrationImageFilter.
Optimization occurs in an iterative fashion where for each sample time point, t, in the velocity field, we integrate the velocity field in the range [0, t] to yield the displacement field which warps fixed image to time point t. Simultaneously, we integrate the velocity field in the range [t, 1] to yield the displacement field transform which warps the moving image to time point t. The metric derivative for each time point of the velocity field calculated in this way produces the normalized update field (or gradient) of the velocity field to be added to the total field at each iteration after being multiplied by the learning rate and optionally smoothed. Mathematically, this can be described as
\[ v_{total} = B_1( v_{total} + \lambda * B_2( v_{update} ) ) \]
where
\( B_1 = \) bspline smoothing on the total field \( B_2 = \) bspline smoothing on the update field \( \lambda = \) learning rate \( v_{update} = \) the normalized velocity field where we normalize the velocity field at each time point separately by the max norm of the field at that time point. This is done due to a weakly necessary (but not sufficient) condition being that the velocity field have a constant norm for all time points.
- Author
- Nick Tustison
-
Brian Avants
Definition at line 91 of file itkTimeVaryingBSplineVelocityFieldImageRegistrationMethod.h.
|
using | BSplineFilterType = BSplineScatteredDataPointSetToImageFilter< VelocityFieldPointSetType, TimeVaryingVelocityFieldType > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | ContinuousIndexType = ContinuousIndex< typename DisplacementFieldPointType::CoordRepType, ImageDimension > |
|
using | DecoratedOutputTransformPointer = typename DecoratedOutputTransformType::Pointer |
|
using | DerivativeType = typename OutputTransformType::DerivativeType |
|
using | DerivativeValueType = typename DerivativeType::ValueType |
|
using | DisplacementFieldPointType = typename DisplacementFieldType::PointType |
|
using | DisplacementFieldTransformPointer = typename DisplacementFieldTransformType::Pointer |
|
using | DisplacementFieldTransformType = DisplacementFieldTransform< RealType, ImageDimension > |
|
using | DisplacementFieldType = typename OutputTransformType::DisplacementFieldType |
|
using | DisplacementVectorType = typename TimeVaryingVelocityFieldControlPointLatticeType::PixelType |
|
using | FixedImagePointer = typename FixedImageType::Pointer |
|
using | FixedImageType = TFixedImage |
|
using | FixedMaskImageType = typename ImageMaskSpatialObjectType::ImageType |
|
using | ImageMaskSpatialObjectType = ImageMaskSpatialObject< ImageDimension > |
|
using | ImageMetricPointer = typename ImageMetricType::Pointer |
|
using | InputPointSetPointer = typename InputPointSetType::Pointer |
|
using | InputPointSetType = TPointSet |
|
using | MaskImageType = typename ImageMaskSpatialObjectType::ImageType |
|
using | MeasureType = typename ImageMetricType::MeasureType |
|
using | MetricDerivativeType = typename ImageMetricType::DerivativeType |
|
using | MetricPointer = typename MetricType::Pointer |
|
using | MovingImagePointer = typename MovingImageType::Pointer |
|
using | MovingImageType = TMovingImage |
|
using | MovingMaskImageType = typename ImageMaskSpatialObjectType::ImageType |
|
using | NumberOfIterationsArrayType = Array< SizeValueType > |
|
using | OutputTransformPointer = typename OutputTransformType::Pointer |
|
using | OutputTransformType = TOutputTransform |
|
using | Pointer = SmartPointer< Self > |
|
using | RealType = typename OutputTransformType::ScalarType |
|
using | Self = TimeVaryingBSplineVelocityFieldImageRegistrationMethod |
|
using | Superclass = ImageRegistrationMethodv4< TFixedImage, TMovingImage, TOutputTransform, TVirtualImage, TPointSet > |
|
using | TimeVaryingVelocityFieldControlPointLatticePointer = typename OutputTransformType::TimeVaryingVelocityFieldControlPointLatticePointer |
|
using | TimeVaryingVelocityFieldControlPointLatticeType = typename OutputTransformType::TimeVaryingVelocityFieldControlPointLatticeType |
|
using | TimeVaryingVelocityFieldPointer = typename OutputTransformType::TimeVaryingVelocityFieldControlPointLatticePointer |
|
using | TimeVaryingVelocityFieldType = typename OutputTransformType::TimeVaryingVelocityFieldControlPointLatticeType |
|
using | TimeVaryingWeightedMaskImageType = Image< WeightsElementType, ImageDimension+1 > |
|
using | TransformBaseType = typename CompositeTransformType::TransformType |
|
using | VelocityFieldPointSetPointer = typename VelocityFieldPointSetType::Pointer |
|
using | VelocityFieldPointSetType = PointSet< DisplacementVectorType, ImageDimension+1 > |
|
using | VirtualImageType = typename Superclass::VirtualImageType |
|
using | WeightedMaskImageType = Image< WeightsElementType, ImageDimension > |
|
using | WeightsContainerType = typename BSplineFilterType::WeightsContainerType |
|
using | WeightsElementType = typename WeightsContainerType::Element |
|
using | CompositeTransformPointer = typename CompositeTransformType::Pointer |
|
using | CompositeTransformType = CompositeTransform< RealType, ImageDimension > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DataObjectPointerArraySizeType = ProcessObject::DataObjectPointerArraySizeType |
|
using | DecoratedInitialTransformPointer = typename DecoratedInitialTransformType::Pointer |
|
using | DecoratedInitialTransformType = DataObjectDecorator< InitialTransformType > |
|
using | DecoratedOutputTransformPointer = typename DecoratedOutputTransformType::Pointer |
|
using | DecoratedOutputTransformType = DataObjectDecorator< OutputTransformType > |
|
using | DerivativeType = typename OutputTransformType::DerivativeType |
|
using | DerivativeValueType = typename DerivativeType::ValueType |
|
using | FixedImageConstPointer = typename FixedImageType::ConstPointer |
|
using | FixedImageMaskConstPointer = typename FixedImageMaskType::ConstPointer |
|
using | FixedImageMasksContainerType = std::vector< FixedImageMaskConstPointer > |
|
using | FixedImageMaskType = typename ImageMetricType::FixedImageMaskType |
|
using | FixedImagePointer = typename FixedImageType::Pointer |
|
using | FixedImagesContainerType = std::vector< FixedImageConstPointer > |
|
using | FixedImageType = TFixedImage |
|
using | ImageMetricType = ImageToImageMetricv4< FixedImageType, MovingImageType, VirtualImageType, RealType > |
|
using | InitialTransformPointer = typename InitialTransformType::Pointer |
|
using | InitialTransformType = Transform< RealType, ImageDimension, ImageDimension > |
|
using | MetricPointer = typename MetricType::Pointer |
|
using | MetricSamplePointSetType = typename ImageMetricType::FixedSampledPointSetType |
|
using | MetricSamplingPercentageArrayType = Array< RealType > |
|
using | MetricSamplingStrategyEnum = ImageRegistrationMethodv4Enums::MetricSamplingStrategy |
|
using | MetricType = ObjectToObjectMetricBaseTemplate< RealType > |
|
using | MovingImageConstPointer = typename MovingImageType::ConstPointer |
|
using | MovingImageMaskConstPointer = typename MovingImageMaskType::ConstPointer |
|
using | MovingImageMasksContainerType = std::vector< MovingImageMaskConstPointer > |
|
using | MovingImageMaskType = typename ImageMetricType::MovingImageMaskType |
|
using | MovingImagePointer = typename MovingImageType::Pointer |
|
using | MovingImagesContainerType = std::vector< MovingImageConstPointer > |
|
using | MovingImageType = TMovingImage |
|
using | MultiMetricType = ObjectToObjectMultiMetricv4< ImageDimension, ImageDimension, VirtualImageType, RealType > |
|
using | OptimizerPointer = typename OptimizerType::Pointer |
|
using | OptimizerType = ObjectToObjectOptimizerBaseTemplate< RealType > |
|
using | OptimizerWeightsType = typename OptimizerType::ScalesType |
|
using | OutputTransformPointer = typename OutputTransformType::Pointer |
|
using | OutputTransformType = TOutputTransform |
|
using | Pointer = SmartPointer< Self > |
|
using | PointSetConstPointer = typename PointSetType::ConstPointer |
|
using | PointSetMetricType = PointSetToPointSetMetricWithIndexv4< PointSetType, PointSetType, RealType > |
|
using | PointSetsContainerType = std::vector< PointSetConstPointer > |
|
using | PointSetType = TPointSet |
|
using | RealType = typename OutputTransformType::ScalarType |
|
using | Self = ImageRegistrationMethodv4 |
|
using | ShrinkFactorsArrayType = Array< SizeValueType > |
|
using | ShrinkFactorsPerDimensionContainerType = typename ShrinkFilterType::ShrinkFactorsType |
|
using | ShrinkFilterType = ShrinkImageFilter< FixedImageType, VirtualImageType > |
|
using | SmoothingSigmasArrayType = Array< RealType > |
|
using | Superclass = ProcessObject |
|
using | TransformParametersAdaptorPointer = typename TransformParametersAdaptorType::Pointer |
|
using | TransformParametersAdaptorsContainerType = std::vector< TransformParametersAdaptorPointer > |
|
using | TransformParametersAdaptorType = TransformParametersAdaptorBase< InitialTransformType > |
|
using | VectorType = Vector< RealType, ImageDimension > |
|
using | VirtualImageBaseConstPointer = typename VirtualImageBaseType::ConstPointer |
|
using | VirtualImageBaseType = ImageBase< ImageDimension > |
|
using | VirtualImagePointer = typename VirtualImageType::Pointer |
|
using | VirtualImageType = TVirtualImage |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DataObjectIdentifierType = DataObject::DataObjectIdentifierType |
|
using | DataObjectPointer = DataObject::Pointer |
|
using | DataObjectPointerArray = std::vector< DataObjectPointer > |
|
using | DataObjectPointerArraySizeType = DataObjectPointerArray::size_type |
|
using | MultiThreaderType = MultiThreaderBase |
|
using | NameArray = std::vector< DataObjectIdentifierType > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ProcessObject |
|
using | Superclass = Object |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = Object |
|
using | Superclass = LightObject |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = LightObject |
|
|
void | AttachMetricGradientPointSetAtSpecificTimePoint (const RealType, VelocityFieldPointSetType *, WeightsContainerType *, const FixedImagesContainerType, const PointSetsContainerType, const TransformBaseType *, const MovingImagesContainerType, const PointSetsContainerType, const TransformBaseType *, const FixedImageMasksContainerType) |
|
void | GenerateData () override |
|
void | GetMetricDerivativePointSetForAllTimePoints (VelocityFieldPointSetType *, WeightsContainerType *) |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
virtual void | StartOptimization () |
|
| TimeVaryingBSplineVelocityFieldImageRegistrationMethod () |
|
| ~TimeVaryingBSplineVelocityFieldImageRegistrationMethod () override=default |
|
virtual void | AllocateOutputs () |
|
virtual VirtualImageBaseConstPointer | GetCurrentLevelVirtualDomainImage () |
|
| ImageRegistrationMethodv4 () |
|
virtual void | InitializeRegistrationAtEachLevel (const SizeValueType) |
|
virtual void | SetMetricSamplePoints () |
|
| ~ImageRegistrationMethodv4 () override=default |
|
virtual void | AddInput (DataObject *input) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | AddOutput (DataObject *output) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | CacheInputReleaseDataFlags () |
|
virtual void | GenerateInputRequestedRegion () |
|
virtual void | GenerateOutputInformation () |
|
virtual void | GenerateOutputRequestedRegion (DataObject *output) |
|
DataObject * | GetInput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetInput (const DataObjectIdentifierType &key) const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredInputs () const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredOutputs () const |
|
bool | IsIndexedInputName (const DataObjectIdentifierType &) const |
|
bool | IsIndexedOutputName (const DataObjectIdentifierType &) const |
|
bool | IsRequiredInputName (const DataObjectIdentifierType &) const |
|
DataObjectPointerArraySizeType | MakeIndexFromInputName (const DataObjectIdentifierType &name) const |
|
DataObjectPointerArraySizeType | MakeIndexFromOutputName (const DataObjectIdentifierType &name) const |
|
DataObjectIdentifierType | MakeNameFromInputIndex (DataObjectPointerArraySizeType idx) const |
|
DataObjectIdentifierType | MakeNameFromOutputIndex (DataObjectPointerArraySizeType idx) const |
|
virtual void | PopBackInput () |
|
virtual void | PopFrontInput () |
|
| ProcessObject () |
|
virtual void | PropagateResetPipeline () |
|
virtual void | PushBackInput (const DataObject *input) |
|
virtual void | PushFrontInput (const DataObject *input) |
|
virtual void | ReleaseInputs () |
|
virtual void | RemoveInput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveInput (DataObjectPointerArraySizeType) |
|
virtual void | RemoveOutput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveOutput (DataObjectPointerArraySizeType idx) |
|
bool | RemoveRequiredInputName (const DataObjectIdentifierType &) |
|
virtual void | RestoreInputReleaseDataFlags () |
|
virtual void | SetInput (const DataObjectIdentifierType &key, DataObject *input) |
|
virtual void | SetNthInput (DataObjectPointerArraySizeType idx, DataObject *input) |
|
virtual void | SetNthOutput (DataObjectPointerArraySizeType idx, DataObject *output) |
|
void | SetNumberOfIndexedInputs (DataObjectPointerArraySizeType num) |
|
void | SetNumberOfIndexedOutputs (DataObjectPointerArraySizeType num) |
|
virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
|
virtual void | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
|
virtual void | SetOutput (const DataObjectIdentifierType &name, DataObject *output) |
|
virtual void | SetPrimaryInput (DataObject *object) |
|
virtual void | SetPrimaryOutput (DataObject *object) |
|
void | SetRequiredInputNames (const NameArray &) |
|
virtual void | VerifyInputInformation () const |
|
virtual void | VerifyPreconditions () const |
|
| ~ProcessObject () override |
|
DataObject * | GetInput (DataObjectPointerArraySizeType idx) |
|
const DataObject * | GetInput (DataObjectPointerArraySizeType idx) const |
|
DataObject * | GetPrimaryInput () |
|
const DataObject * | GetPrimaryInput () const |
|
virtual void | SetPrimaryInputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryInputName () const |
|
DataObject * | GetOutput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetOutput (const DataObjectIdentifierType &key) const |
|
virtual void | SetPrimaryOutputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryOutputName () const |
|
DataObject * | GetOutput (DataObjectPointerArraySizeType i) |
|
const DataObject * | GetOutput (DataObjectPointerArraySizeType i) const |
|
DataObject * | GetPrimaryOutput () |
|
const DataObject * | GetPrimaryOutput () const |
|
virtual bool | GetThreaderUpdateProgress () const |
|
virtual void | ThreaderUpdateProgressOn () |
|
virtual void | SetThreaderUpdateProgress (bool arg) |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
virtual void | SetTimeStamp (const TimeStamp &timeStamp) |
|
| ~Object () override |
|
virtual LightObject::Pointer | InternalClone () const |
|
| LightObject () |
|
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
|
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
|
virtual | ~LightObject () |
|