Title: CSci 6971: Image Registration Lecture 10: Registration Components February 13, 2004
1CSci 6971 Image Registration Lecture 10
Registration ComponentsFebruary 13, 2004
Prof. Chuck Stewart, RPI Dr. Luis Ibanez, Kitware
2Registration Components
Basic Registration Framework
3Image Registration Framework
FixedImage
Metric
MovingImage
Interpolator
Optimizer
Transform
Parameters
4Image Registration
include itkImageRegistrationMethod.h include
itkTranslationTransform.h include
itkMeanSquaresImageToImageMetric.h include
itkLinearInterpolateImageFunction.h include
itkRegularStepGradientDescentOptimizer.h includ
e itkImage.h include itkImageFileReader.h in
clude itkImageFileWriter.h include
itkResampleImageFilter.h
5Image Registration
const unsigned int Dimension 2 typedef
unsigned char PixelType typedef itkImagelt
PixelType , Dimension gt
FixedImageType typedef itkImagelt PixelType ,
Dimension gt
MovingImageType typedef itkTranslationTransf
ormlt double, Dimension gt TransformType type
def itkRegularStepGradientDescentOptimizer
OptimizerType typedef
itkLinearInterpolateImageFunctionlt
MovingImageType ,
double gt InterpolatorType typedef
itkMeanSquaresImageToImageMetriclt
FixedImageType , MovingImageType gt
MetricType typedef itkImageRegistratio
nMethodlt FixedImageType
, MovingImageType gt RegistrationType
6Image Registration
TransformTypePointer transform
TransformTypeNew() OptimizerTypePointer
optimizer OptimizerTypeNew() Interpolato
rTypePointer interpolator
InterpolatorTypeNew() MetricTypePointer
metric MetricTypeNew() Regist
rationTypePointer registrator
RegistrationTypeNew() registrator-gtSetTransfor
m( transform ) registrator-gtSetOptimizer(
optimizer ) registrator-gtSetInterpolator(
interpolator ) registrator-gtSetMetric(
metric ) registrator-gtSetFixedImage(
fixedImageReader-gtGetOutput()
) registrator-gtSetMovingImage(
movingImageReader-gtGetOutput() )
7Image Registration
registrator-gtSetFixedImageRegion(
fixedImageReader-gtGetOutput()-gtGetBufferedR
egion() ) typedef RegistrationTypeParameters
Type ParametersType transform-gtSetIdentity()
registrator-gtSetInitialTransformParameters(
transform-gtGetParameters()
) optimizer-gtSetMaximumStepLength( 4.00 )
optimizer-gtSetMinimumStepLength( 0.01
) optimizer-gtSetNumberOfIterations( 100
) optimizer-gtMaximizeOff()
8Image Registration
try registrator-gtStartRegistrati
on () catch( itkExceptionObject excp
) stdcerr ltlt Error in
registration ltlt stdendl stdcerr
ltlt excp ltlt stdendl transform-gtSetParam
eters(
registrator-gtGetLastTransformParameters() )
9Image Registration Framework
FixedImage
Metric
MovingImage
Optimizer
Interpolator
Parameters
Transform
Resampler
MovingRegistered
10Image Registration
typedef itkResampleImageFilterlt
FixedImageType , MovingImageType gt
ResamplerType ResamplerType Pointer
resampler ResamplerTypeNew() resampler-gtSet
Transform ( transform ) resampler-gtSetInput(
movingImageReader-gtGetOutput() ) FixedImageType
Pointer fixedImage fixedImageReader-gtGetOut
put() resampler-gtSetOrigin( fixedImage-gtGetOrigin
() ) resampler-gtSetSpacing( fixedImage-gtGetSpacin
g() ) resampler-gtSetSize(
fixedImage-gtGetLargestPossibleRegion()-gtGetSize
() ) resampler-gtUpdate()
11Image Registration
Tracking the Registration Process
12Observing Registration
include itkCommand.h class CommandIteration
public itkCommand public typedef
CommandIteration Self typedef itkCommand
SuperClass typedef itkSmartPointerlt
Self gt Pointer itkNewMacro( Self
) protected CommandIteration()
public typedef itkRegularStepGradientD
escentOptimizer OptimizerType typedef
const OptimizerType
OptimizerPointer
13Observing Registration
- void Execute( itkObject caller, const
itkEventObject event ) this-gt
Execute( (const itkObject ) caller, event
) - void Execute( const itkObject caller, const
itkEventObject event )
OptimizerPointer optimizer
dynamic_castlt
OptimizerPointer gt( caller ) - if( typeid( event ) typeid(
itkIterationEvent ) ) - stdcout ltlt optimizer-gtGetCurrentIterat
ion() ltlt - stdcout ltlt optimizer-gtGetValue() ltlt
- stdcout ltlt optimizer-gtGetCurrentPositi
on() ltlt stdendl -
14Observing Registration
- CommandIterationPointer observer
CommandIterationNew() - optimizer-gtAddObserver( itkIterationEvent(),
observer ) - try registrator-gtStartRegistrati
on () - catch( itkExceptionObject excp )
- stdcerr ltlt Error in registration
ltlt stdendl stdcerr ltlt excp ltlt
stdendl
15Registration dirty little secrets
Rotation TranslationParameter Scaling
16Registration dirty little secrets
17Gradient Descent Optimizer
f( x , y )
S L G( x , y )
18Gradient Descent Optimizer
f( x , y )
S L G( x , y )
19Gradient Descent Optimizer
f( x , y )
S L G( x , y )
20Gradient Descent Optimizer
f( x , y )
S L G( x , y )
21Gradient Descent Optimizer
f( x , y )
S L G( x , y )
22Gradient Descent Optimizer
f( x , y )
How about a factor 1100 ?
S L G( x , y )
23Radians Millimeters
y
x
1.57 rad
0.0 rad
180 mm
24Radians Millimeters
y
1.57 rad
1100
180 mm
x
1.57 rad
0.0 rad
180 mm
25Other Transforms
Centered Rigid 2D
26Rotation around the Center
y
y
Transform
10o
x
x
Fixed
Moving
27Centered Rigid 2D Transform
include itkImageRegistrationMethod.h include
itkCenteredRigid2DTransform.h include
itkMeanSquaresImageToImageMetric.h include
itkLinearInterpolateImageFunction.h include
itkRegularStepGradientDescentOptimizer.h includ
e itkCenteredTransformInitializer.h include
itkImage.h include itkImageFileReader.h incl
ude itkImageFileWriter.h include
itkResampleImageFilter.h
28Centered Rigid 2D Transform
const unsigned int Dimension 2 typedef
unsigned char PixelType typedef itkImagelt
PixelType , Dimension gt
FixedImageType typedef itkImagelt PixelType ,
Dimension gt MovingImageType typedef
itkCenteredRigid2DTransformlt double gt
TransformType typedef itk
CenteredTransformInitializerlt
TransformType ,
FixedImageType ,
MovingImageType
gt InitializerType
29Centered Rigid 2D Transform
TransformTypePointer transform
TransformTypeNew() InitializerTypePointer
initializer InitializerTypeNew() Opt
imizerTypePointer optimizer
OptimizerTypeNew() InterpolatorTypePointer
interpolator InterpolatorTypeNew() MetricTy
pePointer metric
MetricTypeNew() RegistrationTypePointer
registrator RegistrationTypeNew() regist
rator-gtSetTransform( transform )
registrator-gtSetOptimizer( optimizer )
registrator-gtSetInterpolator( interpolator )
registrator-gtSetMetric( metric
) registrator-gtSetFixedImage(
fixedImageReader-gtGetOutput() ) registrator-gtSetM
ovingImage( movingImageReader-gtGetOutput() )
30Centered Transform Initializer
Geometry On
y
y
Transform
x
x
Fixed Image
Moving Image
31Centered Transform Initializer
Moments On
y
y
Transform
x
x
Fixed Image
Moving Image
Xm Sum( x I ) / Sum( I )
Ym Sum( y I ) / Sum( I )
32Centered Rigid 2D Transform
registrator-gtSetFixedImageRegion(
fixedImageReader-gtGetOutput()-gtGetBuffe
redRegion() ) initializer-gtSetTransform (
transform ) initializer-gtSetFixedImage(
fixedImageReader-gtGetOutput()
) initializer-gtSetMovingImage(
movingImageReader-gtGetOutput() ) initializer-gtMo
mentsOn() initializer-gtInitializeTransform() r
egistrator-gtSetInitialTransformParameters(
transform-gtGetParameters() )
33Centered Rigid 2D Transform
Array of Parameters
y
Angle Center X Center Y Trans X Trans Y
P 0 P 1 P 2 P 3 P 4
x
34Centered Rigid 2D Transform
typedef OptimizerTypeScaleType
OptimizerScalesType OptimizerScalesType
optimizerScales(
optimizer-gtSetMaximumStepLength(
) ) const double translationScale 1.0 /
1000.0 optimizerScales 0 1.0
optimizerScales 1 translationScale
optimizerScales 2 translationScale
optimizerScales 3 translationScale
optimizerScales 4 translationScale
optimizer-gtSetScales( optimizerScales )
35Centered Rigid 2D Transform
try registrator-gtStartRegistrati
on () catch( itkExceptionObject excp
) stdcerr ltlt Error in
registration ltlt stdendl stdcerr
ltlt excp ltlt stdendl transform-gtSetParam
eters(
registrator-gtGetLastTransformParameters() )
36Image Registration Framework
FixedImage
Metric
MovingImage
Optimizer
Interpolator
Parameters
Transform
Resampler
MovingRegistered
37Centered Rigid 2D Transform
typedef itkResampleImageFilterlt
FixedImageType , MovingImageType gt
ResamplerType ResamplerType Pointer
resampler ResamplerTypeNew() resampler-gtSet
Transform ( transform ) resampler-gtSetInput(
movingImageReader-gtGetOutput() ) FixedImageType
Pointer fixedImage fixedImageReader-gtGetOut
put() resampler-gtSetOrigin( fixedImage-gtGetOrigi
n() ) resampler-gtSetSpacing( fixedImage-gtGetSpaci
ng() ) resampler-gtSetSize(
fixedImage-gtGetLargestPossibleRegion()-gtGetSiz
e() ) resampler-gtUpdate()
38Other Transforms
Affine 2D
39Affine Transforms
M11 M12 T1 M21
M22 T2
40Affine Transforms
Qx M11 M12 Px
T1 Qy M21 M22
Py T2
41Affine Transform Shearing
Qx 1 a Px
T1 Qy 0
1 Py T2
42Shearing Component
y
a
( x ay , y )
1
x
(x,y)
43Shearing Component
y
y
x
x
44Affine Transform Shearing
Qx 1 0 Px
T1 Qy b
1 Py T2
45Shearing Component
y
( x , y bx )
b
(x,y)
1
x
46Shearing Component
y
y
x
x
47Coefficients - Orders of Magnitude
Qx 1.0 0.1 Px
100 Qy 0.1
1.0 Py 100
48Affine Transform Rotation
Qx cos? -sin? Px
T1 Qy sin? cos?
Py T2
49Affine Transform Scaling
Qx Sx 0 Px
T1 Qy 0
Sy Py T2
50Affine Transform - Parameterization
M11 M12 T1 M21
M22 T2
P0 P1 P2 P3 P4 P5
51Parameter 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
52Centered Affine Transform
include itkImageRegistrationMethod.h include
itkCenteredAffineTransform.h include
itkMeanSquaresImageToImageMetric.h include
itkLinearInterpolateImageFunction.h include
itkRegularStepGradientDescentOptimizer.h includ
e itkCenteredTransformInitializer.h include
itkImage.h include itkImageFileReader.h incl
ude itkImageFileWriter.h include
itkResampleImageFilter.h
53Centered Affine Transform
const unsigned int Dimension 2 typedef
unsigned char PixelType typedef itkImagelt
PixelType , Dimension gt
FixedImageType typedef itkImagelt PixelType ,
Dimension gt MovingImageType typedef
itkCenteredAffineTransformlt double gt
TransformType typedef itk
CenteredTransformInitializerlt
TransformType ,
FixedImageType ,
MovingImageType
gt InitializerType
54Centered Affine Transform
TransformTypePointer transform
TransformTypeNew() InitializerTypePointer
initializer InitializerTypeNew() Opt
imizerTypePointer optimizer
OptimizerTypeNew() InterpolatorTypePointer
interpolator InterpolatorTypeNew() MetricTy
pePointer metric
MetricTypeNew() RegistrationTypePointer
registrator RegistrationTypeNew() regist
rator-gtSetTransform( transform )
registrator-gtSetOptimizer( optimizer )
registrator-gtSetInterpolator( interpolator )
registrator-gtSetMetric( metric
) registrator-gtSetFixedImage(
fixedImageReader-gtGetOutput() ) registrator-gtSetM
ovingImage( movingImageReader-gtGetOutput() )
55Centered Transform Initializer
Geometry On
y
y
Transform
x
x
Fixed Image
Moving Image
56Centered Transform Initializer
Moments On
y
y
Transform
x
x
Fixed Image
Moving Image
Xm Sum( x I ) / Sum( I )
Ym Sum( y I ) / Sum( I )
57Centered Affine Transform
registrator-gtSetFixedImageRegion(
fixedImageReader-gtGetOutput()-gtGetBuffe
redRegion() ) initializer-gtSetTransform (
transform ) initializer-gtSetFixedImage(
fixedImageReader-gtGetOutput()
) initializer-gtSetMovingImage(
movingImageReader-gtGetOutput() ) initializer-gtMo
mentsOn() initializer-gtInitializeTransform() r
egistrator-gtSetInitialTransformParameters(
transform-gtGetParameters() )
58Affine Transform - Parameterization
M11 M12 T1 M21
M22 T2
P0 P1 P2 P3 P4 P5
59Centered Affine Transform
typedef OptimizerTypeScaleType
OptimizerScalesType OptimizerScalesType
optimizerScales(
optimizer-gtGetNumberOfParameters
() ) 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-gtSetScales(
optimizerScales )
60Centered Rigid 2D Transform
try registrator-gtStartRegistrati
on () catch( itkExceptionObject excp
) stdcerr ltlt Error in
registration ltlt stdendl stdcerr
ltlt excp ltlt stdendl transform-gtSetParam
eters(
registrator-gtGetLastTransformParameters() )
61Image Registration Framework
FixedImage
Metric
MovingImage
Optimizer
Interpolator
Parameters
Transform
Resampler
MovingRegistered
62Final Resampling
typedef itkResampleImageFilterlt
FixedImageType , MovingImageType gt
ResamplerType ResamplerType Pointer
resampler ResamplerTypeNew() resampler-gtSet
Transform ( transform ) resampler-gtSetInput(
movingImageReader-gtGetOutput() ) FixedImageType
Pointer fixedImage fixedImageReader-gtGetOut
put() resampler-gtSetOrigin( fixedImage-gtGetOrigin
() ) resampler-gtSetSpacing( fixedImage-gtGetSpacin
g() ) resampler-gtSetSize(
fixedImage-gtGetLargestPossibleRegion()-gtGetSize
() ) resampler-gtUpdate()
63End
Enjoy ITK !