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:
- RegistrationITKv3/DeformableRegistration5.cxx, and 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) |
|
virtual bool | Halt () |
|
virtual void | InitializeIteration () |
|
| LevelSetMotionRegistrationFilter () |
|
void | PrintSelf (std::ostream &os, Indent indent) const |
|
| ~LevelSetMotionRegistrationFilter () |
|
virtual void | CopyInputToOutput () |
|
virtual void | GenerateInputRequestedRegion () |
|
virtual void | GenerateOutputInformation () |
|
virtual void | Initialize () |
|
| PDEDeformableRegistrationFilter () |
|
virtual void | PostProcessOutput () |
|
void | PrintSelf (std::ostream &os, Indent indent) const |
|
virtual void | SmoothDisplacementField () |
|
virtual void | SmoothUpdateField () |
|
| ~PDEDeformableRegistrationFilter () |
|
virtual void | AllocateUpdateBuffer () |
|
virtual TimeStepType | CalculateChange () |
|
| DenseFiniteDifferenceImageFilter () |
|
virtual UpdateBufferType * | GetUpdateBuffer () |
|
void | PrintSelf (std::ostream &os, Indent indent) const |
|
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 () |
|
void | PrintSelf (std::ostream &os, Indent indent) const |
|
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 () |
|
virtual bool | GetRunningInPlace () const |
|
| InPlaceImageFilter () |
|
virtual void | ReleaseInputs () |
|
| ~InPlaceImageFilter () |
|
virtual void | CallCopyInputRegionToOutputRegion (OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) |
|
virtual void | CallCopyOutputRegionToInputRegion (InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) |
|
| ImageToImageFilter () |
|
virtual void | VerifyInputInformation () |
|
| ~ImageToImageFilter () |
|
void | PushBackInput (const DataObject *input) |
|
void | PushFrontInput (const DataObject *input) |
|
virtual void | AfterThreadedGenerateData () |
|
virtual void | BeforeThreadedGenerateData () |
|
virtual const
ImageRegionSplitterBase * | GetImageRegionSplitter (void) 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) |
|
virtual void | CacheInputReleaseDataFlags () |
|
virtual void | GenerateOutputRequestedRegion (DataObject *output) |
|
virtual const
DataObjectPointerArraySizeType & | GetNumberOfRequiredOutputs () const |
|
bool | IsIndexedInputName (const DataObjectIdentifierType &) const |
|
bool | IsIndexedOutputName (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) |
|
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 | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
|
virtual void | SetOutput (const DataObjectIdentifierType &key, DataObject *output) |
|
virtual void | SetPrimaryInput (DataObject *input) |
|
virtual void | SetPrimaryOutput (DataObject *output) |
|
virtual void | VerifyPreconditions () |
|
| ~ProcessObject () |
|
DataObject * | GetInput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetInput (const DataObjectIdentifierType &key) const |
|
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 |
|
virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
|
virtual const
DataObjectPointerArraySizeType & | GetNumberOfRequiredInputs () const |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
bool | RemoveRequiredInputName (const DataObjectIdentifierType &) |
|
bool | IsRequiredInputName (const DataObjectIdentifierType &) const |
|
void | SetRequiredInputNames (const NameArray &) |
|
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 () |
|