itk deformable registration demons methods. deformable registration

Post on 27-Mar-2015

247 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ITK Deformable Registration

DemonsMethods

Deformable Registration

Deformable Registration

Deformable Transforms

Deformable Transforms

Deformable Transformation

y

Fixed Image

Transform

x

y

Moving Image

x

Deformable Transformation

y

Fixed Image

Transform

x

y

Moving Image

x

Deformable Transformation

y

Fixed Image

Transform

x

y

Moving Image

x

Image Resampling

FixedImage

MovingImage

Transform

Interpolator

ResampleImageFilter

DeformedImage

Image Resampling

FixedImage

MovingImage

Transform

Interpolator

ResampleImageFilter

DeformedImage

High OrderPolynomialsOrthogonal

BasisSplines

Explicit VectorField

Kernel Splines Transforms

SourceLandmarks

TargetLandmarks

DisplacementVectors

InterpolatedValues

Kernel Spline Transforms

• Thin Plates

• Thin Plates R2 log R

• Elastic Body

• Elastic Body Reciprocal

• Volume

Kernel Spline Transforms

InsightApplications / ThinPlateSplines

Resampling: Kernel Spline Transform

#include "itkImage.h"#include "itkResampleImageFilter.h"#include "itkLinearInterpolateImageFunction.h"#include "itkElasticBodySplineKernelTransform.h"

typedef itk::Image< char, 2 > ImageType;

ImageType::ConstPointer fixedImage = GetFixedImage(); ImageType::ConstPointer movingImage = GetMovingImage();

typedef itk::LinearInterpolateImageFunction< ImageType, double > InterpolatorType;

InterpolatorType::Pointer interpolator = InterpolatorType::New();

typedef itk::ResampleImageFilter< ImageType, ImageType > FilterType;

FilterType::Pointer resampler = FilterType::New();

Resampling: Kernel Spline Transform

typedef itk::ElasticBodySplineKernelTransform< double, 2 > TransformType;

TransformType::Pointer transform = TransformType::New();

resampler->SetInterpolator( interpolator );

resampler->SetInput( movingImage );

ImageType::RegionType region = fixedImage->GetBufferedRegion();

resampler->SetSize( region->GetSize() );resampler->SetOutputStartIndex( region->GetIndex() );

resampler->SetOutputSpacing( fixedImage->GetSpacing() );

resampler->SetOutputOrigin( fixedImage->GetOrigin() );

Resampling: Kernel Spline Transform

resampler->SetTransform( transform );

typedef TransformType::PointSetType PointSetType;

PointSetType::Pointer sourceLandmarks = PointSetType::New();PointSetType::Pointer targetLandmarks = PointSetType::New();

transform->SetSourceLandmarks( sourceLandmarks );transform->SetTargetLandmarks( targetLandmarks );

typedef PointSetType::PointsContainer PointsContainer;

PointsContainer::Pointer sources = sourceLandmarks->GetPoints();PointsContainer::Pointer targets = targetLandmarks->GetPoints();

Resampling: Kernel Spline Transformsources->Reserve( numberOfLandmarks );targets->Reserve( numberOfLandmarks );

typedef PointSetType::PointType PointType;PointType source;PointType target;

for( int i = 0; i < numberOfLandmarks; i++ ){

inputFile >> source; inputFile >> target;

sources->InsertElement( i, source );targets->InsertElement( i, target );}

transform->ComputeWMatrix();

resampler->Update(); // Finally !!

ImageType::ConstPointer deformedImage = resampler->GetOutput();

Kernel Spline Transforms

VolView : ITK Plugin

Kernel Spline Transforms

VolView : ITK Plugin

Deformable Transforms

Deformation Fields

Deformation Vector Field

ParaView: http://www.paraview.org

Warp Image Filter#include "itkImage.h"#include "itkWarpImageFilter.h"#include "itkLinearInterpolateImageFunction.h"

typedef itk::Image< char, 2 > ImageType;

ImageType::ConstPointer fixedImage = GetFixedImage(); ImageType::ConstPointer movingImage = GetMovingImage();

typedef itk::LinearInterpolateImageFunction< ImageType, double > InterpolatorType;

InterpolatorType::Pointer interpolator = InterpolatorType::New();

typedef itk::Vector< float, 2 > VectorType;typedef itk::Image< VectorType , 2 > VectorFieldType;

VectorFieldType::Pointer vectorField = GetVectorField();

Warp Image Filtertypedef itk::WarpImageFilter< ImageType,

ImageType, VectorFieldType > WarpFilterType;

WarpFilterType::Pointer warpFilter = WarpFilterType::New();

warpFilter->SetInterpolator( interpolator );

warpFilter->SetInput( movingImage );

warpFilter->SetOutputSpacing( fixedImage->GetSpacing() );

warpFilter->SetOutputOrigin( fixedImage->GetOrigin() );

warpFilter->SetDeformationField( vectorField );

warpFilter->Update();

ImageType::ConstPointer deformedImage = warpFilter->GetOutput();

Demons Registration

Demons Registration

Demons Registration

Demons is a Family

of Algorithms

Demons Registration

Demons Type 0

Demons Registration: Type 0

Scene

Model

Transform

Demons Registration: Type 0

Scene

Model

Transform

Gradients

Demons Registration: Type 0

Scene

Model

Transform

Forces

Demons Registration

Demons Type 1

Demons Registration: Type 1

Scene Model

Transform

Vector Field

Demons Registration: Type 1

Scene Model

Transform

Vector Field

Demons Registration: Type 1

Scene Model

Transform

Vector Field

Demons Registration: Type 1

Scene Model

Transform

Vector Field

Demons Registration: Type 1

Scene

Gradient

Demons Registration: Type 1

Scene

Gradient

Intensity

Space

Desired Displacement

CurrentEstimation

Demons Registration: Type 1

Scene Model

Transform

Vector Field

Demons Registration: Type 1

Scene

Demons Registration: Type 1

Previous Field Incremental Field Next Field

Iterations

GaussianSmoothing

Demons Registration: Type 1

V =( s – m ) . Grad(s)

Grad(s)2

V =( s – m ) . Grad(s)

Grad(s)2 + (s-m)2 K

Image Registration Framework

FixedImage

MovingImage

IncrementComputation

Transform

InterpolatorPDE

Solver

DeformationField

Demons Registration: Type 1

#include "itkImage.h"#include "itkDemonsRegistrationFilter.h"

typedef itk::Image< char, 2 > ImageType;

ImageType::ConstPointer fixedImage = GetFixedImage(); ImageType::ConstPointer movingImage = GetMovingImage();

typedef itk::Vector< float, 2 > VectorType;typedef itk::Image< VectorType , 2 > VectorFieldType;

typedef itk::DemonsRegistrationFilter< ImageType, ImageType, VectorFieldType > DemonsType;

DemonsType::Pointer demons = DemonsType::New();

Demons Registration: Type 1

demons->SetFixedImage( fixedImage );

demons->SetMovingImage( movingImage );

demons->SetNumberOfIterations( 200 );

demons->SetStandardDeviations( 1.0 );

demons->Update();

ImageType::ConstPointer vectorField = demons->GetOutput();

Demons Registration: Type 1

Scene

Demons Registration: Type 1

Model

Demons Registration: Type 1

After

Registration

Demons Registration: Type 1

Scene

Demons Registration: Type 1

Scene

Requirements

Fixed and Moving images should have

the same intensity distribution !

Eventual Preprocessing

- Histogram Matching Filter

- Anisotropic Diffusion Filtering

Image Registration Framework

FixedImage

MovingImage

IncrementComputation

Transform

InterpolatorPDE

Solver

Resampler

MovingRegistered

DeformationField

Enjoy ITK !

top related