template<typename TFixedImage, typename TMovingImage, typename TDisplacementField>
class itk::VariationalSymmetricDiffeomorphicRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >
Symmetric diffeomorphic deformable registration of two images using static velocity fields.
VariationalSymmetricDiffeomorphicRegistrationFilter is derived from VariationalRegistrationFilter and aims to minimize the functional
with
and
is a static velocity field. Let
denote the force term corresponding to the similarity measure
and
denote the linear differential operator associated with the regularization term
, VariationalSymmetricDiffeomorphicRegistrationFilter implements the following iterative scheme to compute
(and
):
- initialize
(default
),
and 
- do
- compute the forward update field
using
and the warped image 
- compute the backward update field
using the warped image
and 
- compute the next velocity field by

- compute the next transformation
and the inverse 
- until
is fulfilled or 
The force term
is implemented in a subclass of VariationalRegistrationFunction. The computation of the regularization with
is implemented in a subclass of VariationalRegistrationRegularizer. The exponentiation of the velocity field
is done using the ExponentialDisplacementFieldImageFilter.
You can set SmoothUpdateFieldOn() to smooth the velocity field before exponentiation.
- See Also
- VariationalRegistrationFilter
-
VariationalDiffeomorphicRegistrationFilter
-
VariationalRegistrationFunction
-
VariationalRegistrationRegularizer
-
ExponentialDisplacementFieldImageFilter
-
DenseFiniteDifferenceImageFilter
- Note
- This class was developed with funding from the German Research Foundation (DFG: EH 224/3-1 and HA 235/9-1).
- Author
- Alexander Schmidt-Richberg
-
Rene Werner
-
Jan Ehrhardt
For details see:
- Alexander Schmidt-Richberg, Rene Werner, Heinz Handels and Jan Ehrhardt: A Flexible Variational Registration Framework, Insight Journal, 2014 http://hdl.handle.net/10380/3460
- Rene Werner, Alexander Schmidt-Richberg, Heinz Handels and Jan Ehrhardt: Estimation of lung motion fields in 4D CT data by variational non-linear intensity-based registration: A comparison and evaluation study, Phys. Med. Biol., 2014
- Jan Ehrhardt, Rene Werner, Alexander Schmidt-Richberg and Heinz Handels: Statistical modeling of 4D respiratory lung motion using diffeomorphic image registration. IEEE Trans. Med. Imaging, 30(2), 2011
Definition at line 90 of file itkVariationalSymmetricDiffeomorphicRegistrationFilter.h.
|
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | DisplacementFieldPointer = typename DisplacementFieldType::Pointer |
| |
| using | DisplacementFieldType = TDisplacementField |
| |
| using | FixedImageConstPointer = typename FixedImageType::ConstPointer |
| |
| using | FixedImagePointer = typename FixedImageType::Pointer |
| |
| using | FixedImageType = TFixedImage |
| |
| using | MovingImageConstPointer = typename MovingImageType::ConstPointer |
| |
| using | MovingImagePointer = typename MovingImageType::Pointer |
| |
| using | MovingImageType = TMovingImage |
| |
| using | OutputImageType = typename Superclass::OutputImageType |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | RegistrationFunctionType = typename Superclass::RegistrationFunctionType |
| |
| using | RegularizerType = typename Superclass::RegularizerType |
| |
| using | Self = VariationalSymmetricDiffeomorphicRegistrationFilter |
| |
| using | Superclass = VariationalDiffeomorphicRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField > |
| |
| using | TimeStepType = typename Superclass::TimeStepType |
| |
| using | UpdateBufferType = OutputImageType |
| |
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | DisplacementFieldPointer = typename DisplacementFieldType::Pointer |
| |
| using | DisplacementFieldType = TDisplacementField |
| |
| using | FixedImageConstPointer = typename FixedImageType::ConstPointer |
| |
| using | FixedImagePointer = typename FixedImageType::Pointer |
| |
| using | FixedImageType = TFixedImage |
| |
| using | MovingImageConstPointer = typename MovingImageType::ConstPointer |
| |
| using | MovingImagePointer = typename MovingImageType::Pointer |
| |
| using | MovingImageType = TMovingImage |
| |
| using | OutputImageType = typename Superclass::OutputImageType |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | RegistrationFunctionType = typename Superclass::RegistrationFunctionType |
| |
| using | RegularizerType = typename Superclass::RegularizerType |
| |
| using | Self = VariationalDiffeomorphicRegistrationFilter |
| |
| using | Superclass = VariationalRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField > |
| |
| using | TimeStepType = typename Superclass::TimeStepType |
| |
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | DefaultRegistrationFunctionType = VariationalRegistrationDemonsFunction< FixedImageType, MovingImageType, DisplacementFieldType > |
| |
| using | DefaultRegularizerType = VariationalRegistrationDiffusionRegularizer< DisplacementFieldType > |
| |
| using | DisplacementFieldPointer = typename DisplacementFieldType::Pointer |
| |
| using | DisplacementFieldType = TDisplacementField |
| |
| using | FixedImageConstPointer = typename FixedImageType::ConstPointer |
| |
| using | FixedImagePointer = typename FixedImageType::Pointer |
| |
| using | FixedImageType = TFixedImage |
| |
| using | MaskImageConstPointer = typename MaskImageType::ConstPointer |
| |
| using | MaskImagePixelType = unsigned char |
| |
| using | MaskImagePointer = typename MaskImageType::Pointer |
| |
| using | MaskImageType = Image< MaskImagePixelType, ImageDimension > |
| |
| using | MovingImageConstPointer = typename MovingImageType::ConstPointer |
| |
| using | MovingImagePointer = typename MovingImageType::Pointer |
| |
| using | MovingImageType = TMovingImage |
| |
| using | OutputImageType = typename Superclass::OutputImageType |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | RegistrationFunctionType = VariationalRegistrationFunction< FixedImageType, MovingImageType, DisplacementFieldType > |
| |
| using | RegularizerPointer = typename RegularizerType::Pointer |
| |
| using | RegularizerType = VariationalRegistrationRegularizer< DisplacementFieldType > |
| |
| using | Self = VariationalRegistrationFilter |
| |
| using | Superclass = DenseFiniteDifferenceImageFilter< TDisplacementField, TDisplacementField > |
| |
| using | TimeStepType = typename Superclass::TimeStepType |
| |
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | FiniteDifferenceFunctionType = typename Superclass::FiniteDifferenceFunctionType |
| |
| using | InputImageType = typename Superclass::InputImageType |
| |
| using | OutputImageType = typename Superclass::OutputImageType |
| |
| using | PixelType = typename Superclass::PixelType |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | Self = DenseFiniteDifferenceImageFilter |
| |
| using | Superclass = FiniteDifferenceImageFilter< TDisplacementField, TDisplacementField > |
| |
| using | TimeStepType = typename Superclass::TimeStepType |
| |
| using | UpdateBufferType = OutputImageType |
| |
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | FiniteDifferenceFunctionType = FiniteDifferenceFunction< TDisplacementField > |
| |
| using | InputImageType = TDisplacementField |
| |
| using | InputPixelType = typename TDisplacementField::PixelType |
| |
| using | InputPixelValueType = typename NumericTraits< InputPixelType >::ValueType |
| |
| using | NeighborhoodScalesType = typename FiniteDifferenceFunctionType::NeighborhoodScalesType |
| |
| using | OutputImageType = TDisplacementField |
| |
| using | OutputPixelType = typename TDisplacementField::PixelType |
| |
| using | OutputPixelValueType = typename NumericTraits< OutputPixelType >::ValueType |
| |
| using | PixelType = OutputPixelType |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | RadiusType = typename FiniteDifferenceFunctionType::RadiusType |
| |
| using | Self = FiniteDifferenceImageFilter |
| |
| using | Superclass = InPlaceImageFilter< TDisplacementField, TDisplacementField > |
| |
| using | TimeStepType = typename FiniteDifferenceFunctionType::TimeStepType |
| |
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | InputImageConstPointer = typename InputImageType::ConstPointer |
| |
| using | InputImagePixelType = typename InputImageType::PixelType |
| |
| using | InputImagePointer = typename InputImageType::Pointer |
| |
| using | InputImageRegionType = typename InputImageType::RegionType |
| |
| using | InputImageType = TDisplacementField |
| |
| using | OutputImagePixelType = typename Superclass::OutputImagePixelType |
| |
| using | OutputImagePointer = typename Superclass::OutputImagePointer |
| |
| using | OutputImageRegionType = typename Superclass::OutputImageRegionType |
| |
| using | OutputImageType = typename Superclass::OutputImageType |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | Self = InPlaceImageFilter |
| |
| using | Superclass = ImageToImageFilter< TDisplacementField, TDisplacementField > |
| |
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | InputImageConstPointer = typename InputImageType::ConstPointer |
| |
| using | InputImagePixelType = typename InputImageType::PixelType |
| |
| using | InputImagePointer = typename InputImageType::Pointer |
| |
| using | InputImageRegionType = typename InputImageType::RegionType |
| |
| using | InputImageType = TDisplacementField |
| |
| using | OutputImagePixelType = typename Superclass::OutputImagePixelType |
| |
| using | OutputImageRegionType = typename Superclass::OutputImageRegionType |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | Self = ImageToImageFilter |
| |
| using | Superclass = ImageSource< TDisplacementField > |
| |
| using | ConstPointer = SmartPointer< const Self > |
| |
| using | DataObjectIdentifierType = Superclass::DataObjectIdentifierType |
| |
| using | DataObjectPointer = DataObject::Pointer |
| |
| using | DataObjectPointerArraySizeType = Superclass::DataObjectPointerArraySizeType |
| |
| using | OutputImagePixelType = typename OutputImageType::PixelType |
| |
| using | OutputImagePointer = typename OutputImageType::Pointer |
| |
| using | OutputImageRegionType = typename OutputImageType::RegionType |
| |
| using | OutputImageType = TDisplacementField |
| |
| using | Pointer = SmartPointer< Self > |
| |
| using | Self = ImageSource |
| |
| using | Superclass = ProcessObject |
| |
| 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 | ApplyUpdate (const TimeStepType &dt) override |
| |
| virtual void | CalcInverseDeformationFromVelocityField (const DisplacementFieldType *velocityField) |
| |
| TimeStepType | CalculateChange () override |
| |
| virtual const UpdateBufferType * | GetBackwardUpdateBuffer () const |
| |
| virtual UpdateBufferType * | GetModifiableBackwardUpdateBuffer () |
| |
| void | Initialize () override |
| |
| virtual void | InitializeBackwardIteration () |
| |
| void | PrintSelf (std::ostream &os, Indent indent) const override |
| |
| void | ThreadedApplyUpdate (const TimeStepType &dt, const ThreadRegionType ®ionToProcess, unsigned int threadId) override |
| |
| | VariationalSymmetricDiffeomorphicRegistrationFilter () |
| |
| | ~VariationalSymmetricDiffeomorphicRegistrationFilter () override |
| |
| void | ApplyUpdate (const TimeStepType &dt) override |
| |
| virtual void | CalcDeformationFromVelocityField (const DisplacementFieldType *velocityField) |
| |
| virtual FieldExponentiatorPointer | GetExponentiator () |
| |
| | VariationalDiffeomorphicRegistrationFilter () |
| |
| | ~VariationalDiffeomorphicRegistrationFilter () override |
| |
| void | ApplyUpdate (const TimeStepType &dt) override |
| |
| void | CopyInputToOutput () override |
| |
| void | GenerateInputRequestedRegion () override |
| |
| void | GenerateOutputInformation () override |
| |
| bool | Halt () override |
| |
| void | InitializeIteration () override |
| |
| | VariationalRegistrationFilter () |
| |
| void | VerifyInputInformation () const override |
| |
| | ~VariationalRegistrationFilter () override |
| |
| RegistrationFunctionType * | DownCastDifferenceFunctionType () |
| |
| const RegistrationFunctionType * | DownCastDifferenceFunctionType () const |
| |
| void | AllocateUpdateBuffer () override |
| |
| void | ApplyUpdate (const TimeStepType &dt) override |
| |
| TimeStepType | CalculateChange () override |
| |
| void | CopyInputToOutput () override |
| |
| | DenseFiniteDifferenceImageFilter () |
| |
| virtual UpdateBufferType * | GetUpdateBuffer () |
| |
| void | PrintSelf (std::ostream &os, Indent indent) const override |
| |
| virtual TimeStepType | ThreadedCalculateChange (const ThreadRegionType ®ionToProcess, ThreadIdType threadId) |
| |
| | ~DenseFiniteDifferenceImageFilter () override=default |
| |
| virtual void | ApplyUpdate (const TimeStepType &dt)=0 |
| |
| | FiniteDifferenceImageFilter () |
| |
| void | GenerateData () override |
| |
| void | GenerateInputRequestedRegion () override |
| |
| virtual void | PostProcessOutput () |
| |
| void | PrintSelf (std::ostream &os, Indent indent) const override |
| |
| virtual TimeStepType | ResolveTimeStep (const std::vector< TimeStepType > &timeStepList, const std::vector< bool > &valid) const |
| |
| virtual void | SetElapsedIterations (IdentifierType _arg) |
| |
| virtual bool | ThreadedHalt (void *) |
| |
| | ~FiniteDifferenceImageFilter () override=default |
| |
| void | AllocateOutputs () override |
| |
| virtual bool | GetRunningInPlace () const |
| |
| | InPlaceImageFilter ()=default |
| |
| void | ReleaseInputs () override |
| |
| | ~InPlaceImageFilter () override=default |
| |
| virtual void | CallCopyInputRegionToOutputRegion (OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) |
| |
| virtual void | CallCopyOutputRegionToInputRegion (InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) |
| |
| | ImageToImageFilter () |
| |
| void | VerifyInputInformation () ITKv5_CONST override |
| |
| | ~ImageToImageFilter () override |
| |
| void | PushBackInput (const DataObject *input) override |
| |
| void | PushFrontInput (const DataObject *input) override |
| |
| virtual void | AfterThreadedGenerateData () |
| |
| virtual void | BeforeThreadedGenerateData () |
| |
| void | ClassicMultiThread (ThreadFunctionType callbackFunction) |
| |
virtual const
ImageRegionSplitterBase * | GetImageRegionSplitter () const |
| |
| | ImageSource () |
| |
| virtual unsigned int | SplitRequestedRegion (unsigned int i, unsigned int pieces, OutputImageRegionType &splitRegion) |
| |
| | ~ImageSource () override=default |
| |
| virtual void | ThreadedGenerateData (const OutputImageRegionType &outputRegionForThread, ThreadIdType threadId) |
| |
| virtual void | DynamicThreadedGenerateData (const OutputImageRegionType &outputRegionForThread) |
| |
| virtual bool | GetDynamicMultiThreading () const |
| |
| virtual void | SetDynamicMultiThreading (bool _arg) |
| |
| virtual void | DynamicMultiThreadingOn () |
| |
| virtual void | DynamicMultiThreadingOff () |
| |
| 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 | 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 |
| |
| | ProcessObject () |
| |
| virtual void | PropagateResetPipeline () |
| |
| 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 num, DataObject *input) |
| |
| virtual void | SetNthOutput (DataObjectPointerArraySizeType num, DataObject *output) |
| |
| void | SetNumberOfIndexedInputs (DataObjectPointerArraySizeType num) |
| |
| void | SetNumberOfIndexedOutputs (DataObjectPointerArraySizeType num) |
| |
| virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
| |
| virtual void | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
| |
| virtual void | SetOutput (const DataObjectIdentifierType &key, DataObject *output) |
| |
| virtual void | SetPrimaryInput (DataObject *input) |
| |
| virtual void | SetPrimaryOutput (DataObject *output) |
| |
| void | SetRequiredInputNames (const NameArray &) |
| |
| virtual void | VerifyPreconditions () ITKv5_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 idx) |
| |
| const DataObject * | GetOutput (DataObjectPointerArraySizeType idx) const |
| |
| DataObject * | GetPrimaryOutput () |
| |
| const DataObject * | GetPrimaryOutput () const |
| |
| | Object () |
| |
| bool | PrintObservers (std::ostream &os, Indent indent) const |
| |
| virtual void | SetTimeStamp (const TimeStamp &time) |
| |
| | ~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 () |
| |