template<typename TFixedImage, typename TMovingImage, typename TDisplacementField>
class itk::LevelSetMotionRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField >
Deformably register two images using level set motion.
LevelSetMotionFilter implements a deformable registration algorithm that aligns a fixed and a moving image under level set motion. The equations of motion are similar to those of the DemonsRegistrationFilter. The main differences are: (1) Gradients of the moving image are calculated on a smoothed image while intensity difference are measured on the original images (2) Magnitude of the motion vector is a function of the differences in intensity between the fixed and moving pixel. An adaptive timestep is calculated based on the maximum motion vector over the entire field to ensure stability. The timestep also implictly converts the motion vector measured in units of intensity to a vector measured in physical units. Demons, on the other hand, defines its motion vectors as function of both the intensity differences and gradient magnitude at each respective pixel. Consider two separate pixels with the same intensity differences between the corresponding fixed and moving pixel pairs. In demons, the motion vector of the pixel over a low gradient region will be larger than the motion vector of the pixel over a large gradient region. This leads to an unstable vector field. In the levelset approach, the motion vectors will be proportional to the gradients, scaled by the maximum gradient over the entire field. The pixel with at the lower gradient position will more less than the pixel at the higher gradient position. (3) Gradients are calculated using minmod finite difference instead of using central differences.
A deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.
This class is templated over the fixed image type, moving image type and the deformation field type.
The input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.
The algorithm has one parameters: the number of iteration to be performed.
The output deformation field can be obtained via methods GetOutput or GetDisplacementField.
This class make use of the finite difference solver hierarchy. Update for each iteration is computed in LevelSetMotionFunction.
- Warning
- This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.
Ref: B.C. Vemuri, J. Ye, Y. Chen, C.M. Leonard. "Image registration via level-set motion: applications to atlas-based segmentation". Medical Image Analysis. Vol. 7. pp. 1-20. 2003.
- See also
- LevelSetMotionRegistrationFunction
-
DemonsRegistrationFilter
- Examples:
- Examples/RegistrationITKv3/DeformableRegistration5.cxx, and Examples/RegistrationITKv4/DeformableRegistration5.cxx.
Definition at line 91 of file itkLevelSetMotionRegistrationFilter.h.
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef Superclass::DisplacementFieldPointer | DisplacementFieldPointer |
|
typedef Superclass::DisplacementFieldType | DisplacementFieldType |
|
typedef Superclass::FiniteDifferenceFunctionType | FiniteDifferenceFunctionType |
|
typedef Superclass::FixedImagePointer | FixedImagePointer |
|
typedef Superclass::FixedImageType | FixedImageType |
|
typedef LevelSetMotionRegistrationFunction< FixedImageType, MovingImageType, DisplacementFieldType > | LevelSetMotionFunctionType |
|
typedef Superclass::MovingImagePointer | MovingImagePointer |
|
typedef Superclass::MovingImageType | MovingImageType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef LevelSetMotionRegistrationFilter | Self |
|
typedef PDEDeformableRegistrationFilter< TFixedImage, TMovingImage, TDisplacementField > | Superclass |
|
typedef Superclass::TimeStepType | TimeStepType |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef DisplacementFieldType::Pointer | DisplacementFieldPointer |
|
typedef TDisplacementField | DisplacementFieldType |
|
typedef Superclass::FiniteDifferenceFunctionType | FiniteDifferenceFunctionType |
|
typedef FixedImageType::ConstPointer | FixedImageConstPointer |
|
typedef FixedImageType::Pointer | FixedImagePointer |
|
typedef TFixedImage | FixedImageType |
|
typedef MovingImageType::ConstPointer | MovingImageConstPointer |
|
typedef MovingImageType::Pointer | MovingImagePointer |
|
typedef TMovingImage | MovingImageType |
|
typedef Superclass::OutputImageType | OutputImageType |
|
typedef PDEDeformableRegistrationFunction< FixedImageType, MovingImageType, DisplacementFieldType > | PDEDeformableRegistrationFunctionType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef PDEDeformableRegistrationFilter | Self |
|
typedef FixedArray< double, ImageDimension > | StandardDeviationsType |
|
typedef DenseFiniteDifferenceImageFilter< TDisplacementField, TDisplacementField > | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef Superclass::FiniteDifferenceFunctionType | FiniteDifferenceFunctionType |
|
typedef Superclass::InputImageType | InputImageType |
|
typedef Superclass::OutputImageType | OutputImageType |
|
typedef Superclass::PixelType | PixelType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef DenseFiniteDifferenceImageFilter | Self |
|
typedef FiniteDifferenceImageFilter< TDisplacementField, TDisplacementField > | Superclass |
|
typedef Superclass::TimeStepType | TimeStepType |
|
typedef OutputImageType | UpdateBufferType |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef FiniteDifferenceFunction< TDisplacementField > | FiniteDifferenceFunctionType |
|
typedef TDisplacementField | InputImageType |
|
typedef TDisplacementField::PixelType | InputPixelType |
|
typedef NumericTraits< InputPixelType >::ValueType | InputPixelValueType |
|
typedef FiniteDifferenceFunctionType::NeighborhoodScalesType | NeighborhoodScalesType |
|
typedef TDisplacementField | OutputImageType |
|
typedef TDisplacementField::PixelType | OutputPixelType |
|
typedef NumericTraits< OutputPixelType >::ValueType | OutputPixelValueType |
|
typedef OutputPixelType | PixelType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef FiniteDifferenceFunctionType::RadiusType | RadiusType |
|
typedef FiniteDifferenceImageFilter | Self |
|
typedef InPlaceImageFilter< TDisplacementField, TDisplacementField > | Superclass |
|
typedef FiniteDifferenceFunctionType::TimeStepType | TimeStepType |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef InputImageType::ConstPointer | InputImageConstPointer |
|
typedef InputImageType::PixelType | InputImagePixelType |
|
typedef InputImageType::Pointer | InputImagePointer |
|
typedef InputImageType::RegionType | InputImageRegionType |
|
typedef TDisplacementField | InputImageType |
|
typedef Superclass::OutputImagePixelType | OutputImagePixelType |
|
typedef Superclass::OutputImagePointer | OutputImagePointer |
|
typedef Superclass::OutputImageRegionType | OutputImageRegionType |
|
typedef Superclass::OutputImageType | OutputImageType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef InPlaceImageFilter | Self |
|
typedef ImageToImageFilter< TDisplacementField, TDisplacementField > | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef InputImageType::ConstPointer | InputImageConstPointer |
|
typedef InputImageType::PixelType | InputImagePixelType |
|
typedef InputImageType::Pointer | InputImagePointer |
|
typedef InputImageType::RegionType | InputImageRegionType |
|
typedef TDisplacementField | InputImageType |
|
typedef Superclass::OutputImagePixelType | OutputImagePixelType |
|
typedef Superclass::OutputImageRegionType | OutputImageRegionType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef ImageToImageFilter | Self |
|
typedef ImageSource< TDisplacementField > | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef Superclass::DataObjectIdentifierType | DataObjectIdentifierType |
|
typedef DataObject::Pointer | DataObjectPointer |
|
typedef Superclass::DataObjectPointerArraySizeType | DataObjectPointerArraySizeType |
|
typedef OutputImageType::PixelType | OutputImagePixelType |
|
typedef OutputImageType::Pointer | OutputImagePointer |
|
typedef OutputImageType::RegionType | OutputImageRegionType |
|
typedef TDisplacementField | OutputImageType |
|
typedef SmartPointer< Self > | Pointer |
|
typedef ImageSource | Self |
|
typedef ProcessObject | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef DataObject::DataObjectIdentifierType | DataObjectIdentifierType |
|
typedef DataObject::Pointer | DataObjectPointer |
|
typedef std::vector< DataObjectPointer > | DataObjectPointerArray |
|
typedef DataObjectPointerArray::size_type | DataObjectPointerArraySizeType |
|
typedef std::vector< DataObjectIdentifierType > | NameArray |
|
typedef SmartPointer< Self > | Pointer |
|
typedef ProcessObject | Self |
|
typedef Object | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef SmartPointer< Self > | Pointer |
|
typedef Object | Self |
|
typedef LightObject | Superclass |
|
typedef SmartPointer< const Self > | ConstPointer |
|
typedef SmartPointer< Self > | Pointer |
|
typedef LightObject | Self |
|
|
virtual void | ApplyUpdate (const TimeStepType &dt) override |
|
virtual bool | Halt () override |
|
virtual void | InitializeIteration () override |
|
| LevelSetMotionRegistrationFilter () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~LevelSetMotionRegistrationFilter () |
|
virtual void | CopyInputToOutput () override |
|
virtual void | GenerateInputRequestedRegion () override |
|
virtual void | GenerateOutputInformation () override |
|
virtual void | Initialize () override |
|
| PDEDeformableRegistrationFilter () |
|
virtual void | PostProcessOutput () override |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
virtual void | SmoothDisplacementField () |
|
virtual void | SmoothUpdateField () |
|
| ~PDEDeformableRegistrationFilter () |
|
virtual void | AllocateUpdateBuffer () override |
|
virtual TimeStepType | CalculateChange () override |
|
| DenseFiniteDifferenceImageFilter () |
|
virtual UpdateBufferType * | GetUpdateBuffer () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
virtual void | ThreadedApplyUpdate (const TimeStepType &dt, const ThreadRegionType ®ionToProcess, ThreadIdType threadId) |
|
virtual TimeStepType | ThreadedCalculateChange (const ThreadRegionType ®ionToProcess, ThreadIdType threadId) |
|
| ~DenseFiniteDifferenceImageFilter () |
|
virtual void | ApplyUpdate (const TimeStepType &dt)=0 |
|
| FiniteDifferenceImageFilter () |
|
virtual void | GenerateData () override |
|
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 *) |
|
virtual | ~FiniteDifferenceImageFilter () |
|
virtual void | AllocateOutputs () override |
|
virtual bool | GetRunningInPlace () const |
|
| InPlaceImageFilter () |
|
virtual void | ReleaseInputs () override |
|
| ~InPlaceImageFilter () |
|
virtual void | CallCopyInputRegionToOutputRegion (OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) |
|
virtual void | CallCopyOutputRegionToInputRegion (InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) |
|
| ImageToImageFilter () |
|
virtual void | VerifyInputInformation () override |
|
| ~ImageToImageFilter () |
|
void | PushBackInput (const DataObject *input) override |
|
void | PushFrontInput (const DataObject *input) override |
|
virtual void | AfterThreadedGenerateData () |
|
virtual void | BeforeThreadedGenerateData () |
|
virtual const ImageRegionSplitterBase * | GetImageRegionSplitter () const |
|
| ImageSource () |
|
virtual unsigned int | SplitRequestedRegion (unsigned int i, unsigned int pieces, OutputImageRegionType &splitRegion) |
|
virtual void | ThreadedGenerateData (const OutputImageRegionType &outputRegionForThread, ThreadIdType threadId) |
|
virtual | ~ImageSource () |
|
virtual void | AddInput (DataObject *input) |
|
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 |
|
| itkLegacyMacro (virtual void RemoveOutput(DataObject *output)) |
|
| itkLegacyMacro (void SetNumberOfOutputs(DataObjectPointerArraySizeType num)) |
|
| itkLegacyMacro (virtual void RemoveInput(DataObject *input)) |
|
| itkLegacyMacro (void SetNumberOfInputs(DataObjectPointerArraySizeType num)) |
|
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 () |
|
| ~ProcessObject () |
|
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 (void) const |
|
DataObject * | GetOutput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetOutput (const DataObjectIdentifierType &key) const |
|
virtual void | SetPrimaryOutputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryOutputName (void) 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) |
|
virtual | ~Object () |
|
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 () |
|