itk registration methods

126
ITK Registration Methods Kitware Inc.

Upload: merton

Post on 05-Feb-2016

101 views

Category:

Documents


0 download

DESCRIPTION

ITK Registration Methods. Kitware Inc. Overview. Image Resampling Registration Framework Multi-Modality Multi-Resolution Deformable registration. Image Resampling. Why Resampling ?. Resampling is the Essence of Intensity-Based Image Registration. What is an Image ?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ITK Registration Methods

ITK Registration Methods

Kitware Inc.

Page 2: ITK Registration Methods

Overview

Image Resampling

Registration Framework

Multi-Modality

Multi-Resolution

Deformable registration

Page 3: ITK Registration Methods

Image Resampling

Page 4: ITK Registration Methods

Why Resampling ?

Resamplingis the Essence

of Intensity-BasedImage Registration

Page 5: ITK Registration Methods

What is an Image ?

An Image is a sampling of a continuous field

using a discrete grid

Page 6: ITK Registration Methods

Image Origin & Spacing

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

x

y

Page 7: ITK Registration Methods

Image Sampling Grid

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

Page 8: ITK Registration Methods

Image Pixel

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

Pixel Value

Pixel Region

Page 9: ITK Registration Methods

Image Indices

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

[0,0] [1,0] [2,0] [3,0] [4,0] [5,0]

[0,1]

[0,2]

[0,3]

[0,4]

[0,5]

[4,7]

[0,6]

[0,7] Pixel Index

Page 10: ITK Registration Methods

Index to Physical Coordinates

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

[0,0] [1,0] [2,0] [3,0] [4,0] [5,0]

[0,1]

[0,2]

[0,3]

[0,4]

[0,5]

[4,7]

[0,6]

[0,7] Pixel Index

P[0] = Index[0] x Spacing[0] + Origin[0]P[1] = Index[1] x Spacing[1] + Origin[1]

Index[0] = floor( ( P[0] - Origin[0] ) / Spacing[0] + 0.5 )Index[1] = floor( ( P[1] - Origin[1] ) / Spacing[1] + 0.5 )

Page 11: ITK Registration Methods

Image Region

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

Pixel Value

Pixel Region

Image Region

Page 12: ITK Registration Methods

Image Region

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

Image Region

Starting Index

Region Size

[2,3]

[3,5]

Page 13: ITK Registration Methods

Basic Resampling

ResamplingTrivial Cases

Page 14: ITK Registration Methods

Sub-Sampling by Half

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

Image Region Spacing( 2 x Sy )

Spacing ( 2 x Sx )

Page 15: ITK Registration Methods

Sub-Sampling by Half

Origin (Ox,Oy)

New Origin(O’x,O’y)

New SpacingS’y

New SpacingS’x

Page 16: ITK Registration Methods

Super-Sampling by Double

Origin (Ox,Oy)

Spacing (Sy)

Spacing (Sx)

Image RegionSpacing ( Sy/2 )

Spacing ( Sx/2 )

Page 17: ITK Registration Methods

Super-Sampling by Double

Origin (Ox,Oy)

New SpacingS’x

New SpacingS’y

New Origin(O’x,O’y)

Page 18: ITK Registration Methods

Resampling in ITK

itk::ResampleImageFilter

Page 19: ITK Registration Methods

Resampling in ITK

Transform

Interpolator

Origin

Spacing

Region Start

Region Size

Resample Filter

Input Image Output Image

Page 20: ITK Registration Methods

Resample Image Filter#include "itkImage.h"#include "itkResampleImageFilter.h"#include "itkIdentityTransform.h“#include "itkLinearInterpolateImageFunction.h"

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

ImageType::Pointer inputImage = GetImageSomeHow();

typedef itk::ResampleImageFilter< ImageType > FilterType;

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

ImageType::SizeType size;size[0] = 200;size[1] = 300;

ImageType::IndexType start; start[0] = 0;start[1] = 0;

Page 21: ITK Registration Methods

Resample Image FilterImageType::PointType origin;origin[0] = 10.0; // millimetersorigin[1] = 25.5; // millimeters

ImageType::SpacingType spacing; spacing[0] = 2.0; // millimetersspacing[1] = 1.5; // millimeters

resampler->SetOutputSpacing( spacing );resampler->SetOutputOrigin( origin );

resampler->SetSize( size );resampler->SetOutputStartIndex( start );

resampler->SetDefaultPixelValue( 100 );

resampler->SetInput( inputImage );

Page 22: ITK Registration Methods

Resample Image Filtertypedef itk::LinearInterpolateImageFunction<

ImageType, double > InterpolatorType;

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

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

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

transform->SetIdentity();

resampler->SetInterpolator( interpolator );resampler->SetTransform( transform );

resampler->Update();

const ImageType * outputImage = resampler->GetOutput();

Page 23: ITK Registration Methods

Basic Registration

Page 24: ITK Registration Methods

Coordinate System Conversions

Image Grid

j

i

y

x

Physical Coordinates

y’

x’

Physical Coordinates

Image Grid

j

i

Space Transform

x

y

Page 25: ITK Registration Methods

Things I will not do…I will not register images in pixel space

I will not register images in pixel space

I will not register images in pixel space

I will not register images in pixel space

I will not register images in pixel space

I will not register images in pix

Page 26: ITK Registration Methods

Fixed Image & Moving Image

Fixed Image Grid

j

i

y

x

Fixed ImagePhysical Coordinates

y’

x’

Moving ImagePhysical Coordinates

Moving Image Grid

j

i

Space Transform

Page 27: ITK Registration Methods

Selecting Moving & Fixed Images

In principle the denomination of

Fixed Image & Moving Image

is arbitrary

In practice the moving image

is the one that will be resampled

into the fixed image

coordinate system

Page 28: ITK Registration Methods

Quiz #1

Images provided as part of the project: “Retrospective Image Registration Evaluation”, NIH, Project No. 8R01EB002124-03, Principal Investigator, J. Michael Fitzpatrick, Vanderbilt University, Nashville,

TN.

Images from the same patient

256 x 256 pixels

MRI-T2

128 x 128 pixels

PET

Moving Image ?

Fixed Image ?

Page 29: ITK Registration Methods

Quiz #2

Images provided as part of the project: “Retrospective Image Registration Evaluation”, NIH, Project No. 8R01EB002124-03, Principal Investigator, J. Michael Fitzpatrick, Vanderbilt University, Nashville,

TN.

Images from the same patient

256 x 256 pixels

MRI-T2

Scaling Transform

What scale factor ?

a) 2.0

b) 1.0

c) 0.5 128 x 128 pixels

PET

Page 30: ITK Registration Methods

Things I will not do…I will not register images in pixel space

I will not register images in pixel space

I will not register images in pixel space

I will not register images in pixel space

I will not register images in pixel space

I will not register images in pix

Page 31: ITK Registration Methods

Registration in ITK

ImageRegistrationFramework

MultiResolution

RegistrationFramework

PDEBased

Registration

FEMBased

Registration

Components

Page 32: ITK Registration Methods

Registration Framework

Page 33: ITK Registration Methods

Components

FixedImage

MovingImage

Metric

Transform

Interpolator

Optimizer

Registration Method

Page 34: ITK Registration Methods

Image Metrics

Mean Squares Normalized Correlation Mean Reciprocal Square Difference Mutual Information

- Viola-Wells- Mattes- Histogram based- Histogram normalized

Page 35: ITK Registration Methods

Transforms

Translation Scaling Rotation Rigid3D Rigid2D Affine BSplines Splines: TPS, EBS, VS

Page 36: ITK Registration Methods

Optimizers

Gradient Descent Regular Step Gradient Descent Conjugate Gradient Levenberg-Marquardt One plus One Evolutionary Algorithm

Page 37: ITK Registration Methods

Interpolators

Nearest Neighbor Linear BSpline

Page 38: ITK Registration Methods

Exercise 20

Page 39: ITK Registration Methods

Image Registration

Fixed Image Moving Image Registered Moving Image

Page 40: ITK Registration Methods

Image Registration

#include ”itkImageRegistrationMethod.h”#include ”itkTranslationTransform.h”#include ”itkMeanSquaresImageToImageMetric.h”#include ”itkLinearInterpolateImageFunction.h”#include ”itkRegularStepGradientDescentOptimizer.h”#include ”itkImage.h”#include ”itkImageFileReader.h”#include ”itkImageFileWriter.h”#include ”itkResampleImageFilter.h”

Page 41: ITK Registration Methods

Image Registration

const unsigned int Dimension = 2;

typedef unsigned char PixelType;

typedef itk::Image< PixelType , Dimension > FixedImageType;

typedef itk::Image< PixelType , Dimension > MovingImageType;

typedef itk::TranslationTransform< double, Dimension > TransformType;

typedef itk::RegularStepGradientDescentOptimizer OptimizerType;

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

typedef itk::MeanSquaresImageToImageMetric< FixedImageType , MovingImageType > MetricType;

typedef itk::ImageRegistrationMethod< FixedImageType , MovingImageType > RegistrationType;

Page 42: ITK Registration Methods

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

OptimizerType::Pointer optimizer = OptimizerType::New();

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

MetricType::Pointer metric = MetricType::New();

RegistrationType::Pointer registrator = RegistrationType::New();

registrator->SetTransform( transform );

registrator->SetOptimizer( optimizer );

registrator->SetInterpolator( interpolator );

registrator->SetMetric( metric );

registrator->SetFixedImage( fixedImageReader->GetOutput() );

registrator->SetMovingImage( movingImageReader->GetOutput() );

Page 43: ITK Registration Methods

Image Registrationregistrator->SetFixedImageRegion( fixedImageReader->GetOutput()->GetBufferedRegion() );

typedef RegistrationType::ParametersType ParametersType;

transform->SetIdentity();

registrator->SetInitialTransformParameters( transform->GetParameters() );

optimizer->SetMaximumStepLength( 4.00 );

optimizer->SetMinimumStepLength( 0.01 );

optimizer->SetNumberOfIterations( 100 );

optimizer->MaximizeOff();

Page 44: ITK Registration Methods

Image Registration

try { registrator->StartRegistration (); }catch( itk::ExceptionObject & excp ) { std::cerr << “Error in registration” << std::endl; std::cerr << excp << std::endl; }

transform->SetParameters( registrator->GetLastTransformParameters() );

Page 45: ITK Registration Methods

Image Registrationtypedef itk::ResampleImageFilter< FixedImageType , MovingImageType > ResamplerType;

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

resampler->SetTransform ( transform );

resampler->SetInput( movingImageReader->GetOutput() );

FixedImageType ::Pointer fixedImage = fixedImageReader->GetOutput();

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

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

resampler->SetSize( fixedImage->GetLargestPossibleRegion()->GetSize() );

resampler->Update();

Page 46: ITK Registration Methods

Tracking theRegistration Process

Page 47: ITK Registration Methods

Observing Registration#include ”itkCommand.h”

class CommandIteration : public itk::Command {

public: typedef CommandIteration Self;

typedef itk::Command SuperClass;

typedef itk::SmartPointer< Self > Pointer;

itkNewMacro( Self );

protected:

CommandIteration() {};

public:

typedef itk::RegularStepGradientDescentOptimizer OptimizerType;

typedef const OptimizerType * OptimizerPointer;

Page 48: ITK Registration Methods

Observing Registrationvoid Execute( itk::Object * caller, const itk::EventObject & event ) { this-> Execute( (const itk::Object *) caller, event ); }

void Execute( const itk::Object * caller, const itk::EventObject & event ) { OptimizerPointer optimizer = dynamic_cast< OptimizerPointer >( caller );

if( typeid( event ) == typeid( itk::IterationEvent ) ) { std::cout << optimizer->GetCurrentIteration() << “ : “; std::cout << optimizer->GetValue() << “ : “; std::cout << optimizer->GetCurrentPosition() << std::endl; } }

Page 49: ITK Registration Methods

Image Registration

CommandIteration::Pointer observer = CommandIteration::New();

optimizer->AddObserver( itk::IterationEvent(), observer )

try { registrator->StartRegistration (); }catch( itk::ExceptionObject & excp ) { std::cerr << “Error in registration” << std::endl; std::cerr << excp << std::endl; }

Page 50: ITK Registration Methods

Image Similarity Metrics

Page 51: ITK Registration Methods

Image Metrics

How similar is

image A to image B ?

Page 52: ITK Registration Methods

Image Metrics

Does Image B

matches Image A better

than Image C ?

Page 53: ITK Registration Methods

Image Metrics

Image A Image CImage B

Match( A , B ) Match( A , C )><

Page 54: ITK Registration Methods

Image Metrics

Match( A , B )

Simplest Metric

Mean Squared Differences

Page 55: ITK Registration Methods

Mean Squared Differences

Image A Image B

For each pixel in A

Difference( index ) = A( index ) – B( index )

Sum += Difference( index ) 2

Match( A , B ) = Sum / numberOfPixels

Page 56: ITK Registration Methods

For each pixel in the Fixed Image

Fixed Image Grid

j

i

y

x

Fixed ImagePhysical Coordinates

y’

x’

Moving ImagePhysical Coordinates

Moving Image Grid

j

i

Space Transform

Page 57: ITK Registration Methods

Image Metrics

FixedImage

MovingImage

Metric

Transform

Interpolator

Value

Parameters

Page 58: ITK Registration Methods

Mean Squared Differences#include "itkImage.h"#include "itkMeanSquaresImageToImageMetric.h"#include "itkLinearInterpolateImageFunction.h"#include "itkTranslationTransform.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::TranslationTransform< double, 2 > TransformType;

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

Page 59: ITK Registration Methods

Mean Squared Differencestypedef itk::MeanSquaresImageToImageMetric<

ImageType, ImageType > MetricType;

MetricType::Pointer metric = MetricType::New();

metric->SetInterpolator( interpolator );metric->SetTransform( transform );

metric->SetFixedImage( fixedImage );metric->SetMovingImage( movingImage );

MetricType::TransformParametersType translation( Dimension );

translation[0] = 12;translation[1] = 27;

double value = metric->GetValue( translation );

Page 60: ITK Registration Methods

Mean Squared Differences

MetricType::TransformParametersType translation( Dimension );

double value[21][21];

for( int dx = 0; dx <= 20; dx++) {

for( int dy = 0; dy <= 20; dy++) {

translation[0] = dx;translation[1] = dy;

value[dx][dy] = metric->GetValue( translation );

}}

Page 61: ITK Registration Methods

Evaluating many matches

y

Fixed Image

Transform

x

y

Moving Image

x

Page 62: ITK Registration Methods

Plotting the MetricMean Squared Differences

Transform Parametric Space

Page 63: ITK Registration Methods

Plotting the MetricMean Squared Differences

Transform Parametric Space

Page 64: ITK Registration Methods

Evaluating many matches

y

Fixed Image

Transform

x

y

Moving Image

x

(-15,-25) mm

Page 65: ITK Registration Methods

Plotting the MetricMean Squared Differences

Transform Parametric Space

Page 66: ITK Registration Methods

Plotting the MetricMean Squared Differences

Transform Parametric Space

Page 67: ITK Registration Methods

The Best Transform Parameters

Evaluation of thefull parameter space

is equivalent to performingoptimization by

exhaustive search

Page 68: ITK Registration Methods

The Best Transform Parameters

Very Safe

but

Very Slow

Page 69: ITK Registration Methods

The Best Transform Parameters

Better Optimization Methods

for example

Gradient Descent

Page 70: ITK Registration Methods

Image Registration Framework

FixedImage

MovingImage

Metric

Transform

Interpolator Optimizer

Parameters

Page 71: ITK Registration Methods

Gradient Descent Optimizerf( x , y )

S = L ∙ G( x , y )f( x , y )

G( x , y ) =

S = Step

L = LearningRate

Page 72: ITK Registration Methods

Gradient Descent Optimizerf( x , y )

S = L ∙ G( x , y )f( x , y )

G( x , y ) =

Page 73: ITK Registration Methods

Gradient Descent Optimizerf( x , y )

S = L ∙ G( x , y )f( x , y )

G( x , y ) =

L too large

Page 74: ITK Registration Methods

Gradient Descent Optimizerf( x , y )

S = L ∙ G( x , y )f( x , y )

G( x , y ) =

L too small

Page 75: ITK Registration Methods

Gradient Descent Optimizer

What’s wrong with this algorithm ?

Page 76: ITK Registration Methods

Gradient Descent Optimizer

S Units ? = millimeters

f(x,y) Units ? = intensity

G(x,y) Units ? = intensity / millimeters

L Units ? = millimeters2 / intensity

S = L ∙ G( x , y )

Page 77: ITK Registration Methods

Gradient Descent Optimizerf( x )S = L ∙ G( x )

1

1

Page 78: ITK Registration Methods

Gradient Descent Optimizerf( x )

1 1

S = L ∙ G( x )

S = Large in high gradients

S = Small in low gradients

Page 79: ITK Registration Methods

Gradient Descent Optimizerf( x )S = L ∙ G( x )

Works great with this function

Works badly with this function

Page 80: ITK Registration Methods

Gradient Descent Variant

Driving Safe !

Page 81: ITK Registration Methods

Regular Step Gradient Descent f( x )

S = D ∙ G( x )^

Di = Di-1 / 2.0

D1

If G changes direction

D1

D1

D2

Page 82: ITK Registration Methods

Regular Step Gradient Descent f( x )

S = D ∙ G( x )^

D1

User Selects D1

D1

D1

D2

User Selects Dstop

User Selects Gstop

Page 83: ITK Registration Methods

Optimizers are like a car

Watch while you are driving !

Page 84: ITK Registration Methods

Watch over your optimizer

Example:

Optimizer registering an image with itself starting at (-15mm, -25mm)

Page 85: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 1.0 mm

Page 86: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 2.0 mm

Page 87: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 5.0 mm

Page 88: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 10.0 mm

Page 89: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 20.0 mm

Page 90: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 40.0 mm

Page 91: ITK Registration Methods

Watch over your optimizer

Example:

Optimizer registering an image shifted by (-15mm, -25mm)

The optimizer starts at (0mm,0mm)

Page 92: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 1.0 mm

Page 93: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 2.0 mm

Page 94: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 5.0 mm

Page 95: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 10.0 mm

Page 96: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 20.0 mm

Page 97: ITK Registration Methods

Plotting the Optimizer’s PathMean Squared Differences

Step Length = 40.0 mm

Page 98: ITK Registration Methods

Multi - Modality

Page 99: ITK Registration Methods

Multi-Modality Registration

Fixed Image Moving Image Registered Moving Image

Page 100: ITK Registration Methods

Multiple Image Modalities

Number of pairs

Page 101: ITK Registration Methods

Multiple Image Modalities

More possible pairs

Page 102: ITK Registration Methods

Mutual Information

Page 103: ITK Registration Methods

Mutual Information

Page 104: ITK Registration Methods

Exercise 21

Page 105: ITK Registration Methods

Image Registration

Fixed Image Moving Image Registered Moving Image

Page 106: ITK Registration Methods

Image Registration

#include ”itkImageRegistrationMethod.h”#include ”itkTranslationTransform.h”#include ”itkMattesMutualInformationImageToImageMetric.h”#include ”itkLinearInterpolateImageFunction.h”#include ”itkRegularStepGradientDescentOptimizer.h”#include ”itkImage.h”#include ”itkImageFileReader.h”#include ”itkImageFileWriter.h”#include ”itkResampleImageFilter.h”

Page 107: ITK Registration Methods

Image Registration

const unsigned int Dimension = 2;

typedef unsigned char PixelType;

typedef itk::Image< PixelType , Dimension > FixedImageType;

typedef itk::Image< PixelType , Dimension > MovingImageType;

typedef itk::TranslationTransform< double, Dimension > TransformType;

typedef itk::RegularStepGradientDescentOptimizer OptimizerType;

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

typedef itk::MattesMutualInformationImageToImageMetric< FixedImageType , MovingImageType > MetricType;

typedef itk::ImageRegistrationMethod< FixedImageType , MovingImageType > RegistrationType;

Page 108: ITK Registration Methods

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

OptimizerType::Pointer optimizer = OptimizerType::New();

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

MetricType::Pointer metric = MetricType::New();

RegistrationType::Pointer registrator = RegistrationType::New();

registrator->SetTransform( transform );

registrator->SetOptimizer( optimizer );

registrator->SetInterpolator( interpolator );

registrator->SetMetric( metric );

registrator->SetFixedImage( fixedImageReader->GetOutput() );

registrator->SetMovingImage( movingImageReader->GetOutput() );

Page 109: ITK Registration Methods

Image Registrationregistrator->SetFixedImageRegion( fixedImageReader->GetOutput()->GetBufferedRegion() );

typedef RegistrationType::ParametersType ParametersType;

transform->SetIdentity();

registrator->SetInitialTransformParameters( transform->GetParameters() );

optimizer->SetMaximumStepLength( 4.00 );

optimizer->SetMinimumStepLength( 0.05 );

optimizer->SetNumberOfIterations( 200 );

optimizer->MaximizeOn();

Page 110: ITK Registration Methods

Image Registration

metric->SetNumberOfHistogramBins( 20 ); // Metric specificmetric->SetNumberOfSpatialSamples( 10000 ); // Metric specific try { registrator->StartRegistration (); }catch( itk::ExceptionObject & excp ) { std::cerr << “Error in registration” << std::endl; std::cerr << excp << std::endl; }

transform->SetParameters( registrator->GetLastTransformParameters() );

Page 111: ITK Registration Methods

Image Registrationtypedef itk::ResampleImageFilter< FixedImageType , MovingImageType > ResamplerType;

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

resampler->SetTransform ( transform );

resampler->SetInput( movingImageReader->GetOutput() );

FixedImageType ::Pointer fixedImage = fixedImageReader->GetOutput();

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

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

resampler->SetSize( fixedImage->GetLargestPossibleRegion()->GetSize() );

resampler->Update();

Page 112: ITK Registration Methods

Rotation – TranslationParameter Scaling

Page 113: ITK Registration Methods

Exercise 22

Page 114: ITK Registration Methods

Image Registration

Fixed Image Moving Image Registered Moving Image

Page 115: ITK Registration Methods

Image Registration

#include ”itkImageRegistrationMethod.h”#include ”itkCenteredRigid2DTransform.h”#include ”itkMeanSquaresImageToImageMetric.h”#include ”itkLinearInterpolateImageFunction.h”#include ”itkRegularStepGradientDescentOptimizer.h”#include ”itkCenteredTransformInitializer.h”#include ”itkImage.h”#include ”itkImageFileReader.h”#include ”itkImageFileWriter.h”#include ”itkResampleImageFilter.h”

Page 116: ITK Registration Methods

Image Registrationconst unsigned int Dimension = 2;typedef unsigned char PixelType;

typedef itk::Image< PixelType , Dimension > FixedImageType;typedef itk::Image< PixelType , Dimension > MovingImageType;

typedef itk::CenteredRigid2DTransform< double > TransformType;

typedef itk:: CenteredTransformInitializer< TransformType , FixedImageType , MovingImageType > InitializerType;

Page 117: ITK Registration Methods

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

InitializerType::Pointer initializer = InitializerType::New();

OptimizerType::Pointer optimizer = OptimizerType::New();

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

MetricType::Pointer metric = MetricType::New();

RegistrationType::Pointer registrator = RegistrationType::New();

registrator->SetTransform( transform );

registrator->SetOptimizer( optimizer );

registrator->SetInterpolator( interpolator );

registrator->SetMetric( metric );

registrator->SetFixedImage( fixedImageReader->GetOutput() );

registrator->SetMovingImage( movingImageReader->GetOutput() );

Page 118: ITK Registration Methods

Image Registration

registrator->SetFixedImageRegion( fixedImageReader->GetOutput()->GetBufferedRegion() );

initializer->SetTransform ( transform );

initializer->SetFixedImage( fixedImageReader->GetOutput() );

initializer->SetMovingImage( movingImageReader->GetOutput() );

initializer->MomentsOn();

initializer->InitializeTransform();

registrator->SetInitialTransformParameters( transform->GetParameters() );

Page 119: ITK Registration Methods

Image Registration

typedef OptimizerType::ScaleType OptimizerScalesType;

OptimizerScalesType optimizerScales( optimizer->SetMaximumStepLength() );

const double translationScale = 1.0 / 1000.0 ;

optimizerScales[ 0 ] = 1.0;

optimizerScales[ 1 ] = translationScale;

optimizerScales[ 2 ] = translationScale;

optimizerScales[ 3 ] = translationScale;

optimizerScales[ 4 ] = translationScale;

optimizer->SetScales( optimizerScales );

Page 120: ITK Registration Methods

Image Registration

try { registrator->StartRegistration (); }catch( itk::ExceptionObject & excp ) { std::cerr << “Error in registration” << std::endl; std::cerr << excp << std::endl; }

transform->SetParameters( registrator->GetLastTransformParameters() );

Page 121: ITK Registration Methods

Image Registrationtypedef itk::ResampleImageFilter< FixedImageType , MovingImageType > ResamplerType;

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

resampler->SetTransform ( transform );

resampler->SetInput( movingImageReader->GetOutput() );

FixedImageType ::Pointer fixedImage = fixedImageReader->GetOutput();

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

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

resampler->SetSize( fixedImage->GetLargestPossibleRegion()->GetSize() );

resampler->Update();

Page 122: ITK Registration Methods

Multi - Resolution

Page 123: ITK Registration Methods

Multi-ResolutionRegistration Framework

Improve speedAccuracyRobustness

Page 124: ITK Registration Methods

Multi-ResolutionRegistration Framework

Registration

Registration

Registration

Fixed Image Moving Image

Page 125: ITK Registration Methods

Multi-ResolutionRegistration Framework

Flexible framework allows change of

Parameters Components

between resolution levels

Page 126: ITK Registration Methods

Enjoy ITK !