csci 6971: image registration lecture 10: registration components february 13, 2004 prof. chuck...

63
CSci 6971: Image Registration Lecture 10: Registration Components February 13, 2004 Prof. Chuck Stewart, RPI Dr. Luis Ibanez, Kitware

Post on 21-Dec-2015

216 views

Category:

Documents


0 download

TRANSCRIPT

CSci 6971: Image Registration Lecture 10: Registration Components

February 13, 2004

CSci 6971: Image Registration Lecture 10: Registration Components

February 13, 2004

Prof. Chuck Stewart, RPIDr. Luis Ibanez, KitwareProf. Chuck Stewart, RPIDr. Luis Ibanez, Kitware

Image Registration Lecture 10 2

Registration ComponentsRegistration Components

Basic Registration Framework

Image Registration Lecture 10 3

Image Registration FrameworkImage Registration Framework

FixedImage

MovingImage

Metric

Transform

Interpolator Optimizer

Parameters

Image Registration Lecture 10 4

Image RegistrationImage 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”

Image Registration Lecture 10 5

Image RegistrationImage 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;

Image Registration Lecture 10 6

Image RegistrationImage Registration

TransformType::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() );

Image Registration Lecture 10 7

Image RegistrationImage Registration

registrator->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();

Image Registration Lecture 10 8

Image RegistrationImage Registration

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

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

Image Registration Lecture 10 9

Image Registration FrameworkImage Registration Framework

FixedImage

MovingImage

Metric

Transform

Interpolator

Optimizer

Parameters

Resampler

MovingRegistered

Image Registration Lecture 10 10

Image RegistrationImage Registration

typedef 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();

Image Registration Lecture 10 11

Image RegistrationImage Registration

Tracking the

Registration Process

Image Registration Lecture 10 12

Observing RegistrationObserving 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;

Image Registration Lecture 10 13

Observing RegistrationObserving Registration

void 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; } }

Image Registration Lecture 10 14

Observing RegistrationObserving 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; }

Image Registration Lecture 10 15

Registration dirty little secretsRegistration dirty little secrets

Rotation – Translation

Parameter Scaling

Image Registration Lecture 10 16

Registration dirty little secretsRegistration dirty little secrets

Fixed Image Moving Image Registered Moving Image

Image Registration Lecture 10 17

Gradient Descent OptimizerGradient Descent Optimizer

f( x , y )

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

G( x , y ) =

Image Registration Lecture 10 18

Gradient Descent OptimizerGradient Descent Optimizer

f( x , y )

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

G( x , y ) =

Image Registration Lecture 10 19

Gradient Descent OptimizerGradient Descent Optimizer

f( x , y )

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

G( x , y ) =

Image Registration Lecture 10 20

Gradient Descent OptimizerGradient Descent Optimizer

f( x , y )

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

G( x , y ) =

Image Registration Lecture 10 21

Gradient Descent OptimizerGradient Descent Optimizer

f( x , y )

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

G( x , y ) =

Image Registration Lecture 10 22

Gradient Descent OptimizerGradient Descent Optimizer

f( x , y )

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

G( x , y ) =

How about a factor 1:100 ?

Image Registration Lecture 10 23

Radians & MillimetersRadians & Millimeters

0.0 rad x

y

1.57 rad

180 mm

Image Registration Lecture 10 24

Radians & MillimetersRadians & Millimeters

0.0 rad x

y

1.57 rad

180 mm

1.57 rad

180 mm

1:100

Image Registration Lecture 10 25

Other TransformsOther Transforms

Centered Rigid 2D

Image Registration Lecture 10 26

Rotation around the Center Rotation around the Center

y

Fixed

Transform

10o

x

y

Moving

x

Image Registration Lecture 10 27

Centered Rigid 2D TransformCentered Rigid 2D Transform

#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”

Image Registration Lecture 10 28

Centered Rigid 2D TransformCentered Rigid 2D Transform

const 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;

Image Registration Lecture 10 29

Centered Rigid 2D TransformCentered Rigid 2D Transform

TransformType::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() );

Image Registration Lecture 10 30

Centered Transform InitializerCentered Transform Initializer

y

Fixed Image

Transform

x

y

Moving Image

x

Geometry On

Image Registration Lecture 10 31

Centered Transform InitializerCentered Transform Initializer

y

Fixed Image

Transform

x

y

Moving Image

x

Moments On

Xm = Sum( x ∙ I ) / Sum( I )Ym = Sum( y ∙ I ) / Sum( I )

Image Registration Lecture 10 32

Centered Rigid 2D TransformCentered Rigid 2D Transform

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

initializer->SetTransform ( transform );

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

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

initializer->MomentsOn();

initializer->InitializeTransform();

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

Image Registration Lecture 10 33

Centered Rigid 2D TransformCentered Rigid 2D Transform

y

x

Array of

Parameters

P[ 0 ]

P[ 1 ]

P[ 2 ]

P[ 3 ]

P[ 4 ]

Angle

Center X

Center Y

Trans X

Trans Y

Image Registration Lecture 10 34

Centered Rigid 2D TransformCentered Rigid 2D Transform

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 );

Image Registration Lecture 10 35

Centered Rigid 2D TransformCentered Rigid 2D Transform

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

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

Image Registration Lecture 10 36

Image Registration FrameworkImage Registration Framework

FixedImage

MovingImage

Metric

Transform

Interpolator

Optimizer

Parameters

Resampler

MovingRegistered

Image Registration Lecture 10 37

Centered Rigid 2D TransformCentered Rigid 2D Transform

typedef 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();

Image Registration Lecture 10 38

Other TransformsOther Transforms

Affine 2D

Image Registration Lecture 10 39

Affine TransformsAffine Transforms

M11 M12 T1

M21 M22 T2

Image Registration Lecture 10 40

Affine TransformsAffine Transforms

Qx M11 M12 Px T1

Qy M21 M22 Py T2

= ∙ +

Image Registration Lecture 10 41

Affine Transform – ShearingAffine Transform – Shearing

Qx 1 a Px T1

Qy 0 1 Py T2

= ∙ +

Image Registration Lecture 10 42

Shearing ComponentShearing Component

y

x

a

1

(x,y)

( x + ay , y )

Image Registration Lecture 10 43

Shearing ComponentShearing Component

y’

x

y

x’

Image Registration Lecture 10 44

Affine Transform – ShearingAffine Transform – Shearing

Qx 1 0 Px T1

Qy b 1 Py T2

= ∙ +

Image Registration Lecture 10 45

Shearing ComponentShearing Component

y

x

b

1(x,y)

( x , y + bx )

Image Registration Lecture 10 46

Shearing ComponentShearing Component

y

x

y’

x’

Image Registration Lecture 10 47

Coefficients - Orders of MagnitudeCoefficients - Orders of Magnitude

Qx 1.0 0.1 Px 100

Qy 0.1 1.0 Py 100

= ∙ +

Image Registration Lecture 10 48

Affine Transform – RotationAffine Transform – Rotation

Qx cosθ -sinθ Px T1

Qy sinθ cosθ Py T2

= ∙ +

Image Registration Lecture 10 49

Affine Transform – ScalingAffine Transform – Scaling

Qx Sx 0 Px T1

Qy 0 Sy Py T2

= ∙ +

Image Registration Lecture 10 50

Affine Transform - ParameterizationAffine Transform - Parameterization

M11 M12 T1

M21 M22 T2

[ P0 P1 P2 P3 P4 P5 ]

Image Registration Lecture 10 51

Parameter ScalingParameter Scaling

M11 M12 T1

M21 M22 T2

[ P0 P1 P2 P3 P4 P5 ]

range [ 1.0 0.1 0.1 1.0 100 100 ]

scale [ 1.0 10 10 1.0 0.01 0.01 ]

Image Registration Lecture 10 52

Centered Affine TransformCentered Affine Transform

#include ”itkImageRegistrationMethod.h”#include ”itkCenteredAffineTransform.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”

Image Registration Lecture 10 53

Centered Affine TransformCentered Affine Transform

const unsigned int Dimension = 2;typedef unsigned char PixelType;

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

typedef itk::CenteredAffineTransform< double > TransformType;

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

Image Registration Lecture 10 54

Centered Affine TransformCentered Affine Transform

TransformType::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() );

Image Registration Lecture 10 55

Centered Transform InitializerCentered Transform Initializer

y

Fixed Image

Transform

x

y

Moving Image

x

Geometry On

Image Registration Lecture 10 56

Centered Transform InitializerCentered Transform Initializer

y

Fixed Image

Transform

x

y

Moving Image

x

Moments On

Xm = Sum( x ∙ I ) / Sum( I )Ym = Sum( y ∙ I ) / Sum( I )

Image Registration Lecture 10 57

Centered Affine TransformCentered Affine Transform

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

initializer->SetTransform ( transform );

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

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

initializer->MomentsOn();

initializer->InitializeTransform();

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

Image Registration Lecture 10 58

Affine Transform - ParameterizationAffine Transform - Parameterization

M11 M12 T1

M21 M22 T2

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

Image Registration Lecture 10 59

Centered Affine TransformCentered Affine Transform

typedef OptimizerType::ScaleType OptimizerScalesType;

OptimizerScalesType optimizerScales( optimizer->GetNumberOfParameters() );

optimizerScales[ 0 ] = 1.0;

optimizerScales[ 1 ] = 10.0;

optimizerScales[ 2 ] = 10.0;

optimizerScales[ 3 ] = 1.0;

optimizerScales[ 4 ] = 0.01;

optimizerScales[ 5 ] = 0.01;

optimizer->SetScales( optimizerScales );

Image Registration Lecture 10 60

Centered Rigid 2D TransformCentered Rigid 2D Transform

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

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

Image Registration Lecture 10 61

Image Registration FrameworkImage Registration Framework

FixedImage

MovingImage

Metric

Transform

Interpolator

Optimizer

Parameters

Resampler

MovingRegistered

Image Registration Lecture 10 62

Final ResamplingFinal Resampling

typedef 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();

Image Registration Lecture 10 63

EndEnd

Enjoy ITK !