[Insight-developers] Registration classes
Luis Ibanez
ibanez@cs.unc.edu
Fri, 15 Dec 2000 09:32:58 -0500 (EST)
Hi,
We checked in some classes that could support a full
hierarchy for registration. They are described in
"RegisrationArchitecture.doc" in the repository's
Document directory.
The basic class is called:
RegistrationMethod
It is intended to support registration of any kind
of objects, no only images.
It groups the basic elements of a registration
problem:
- a RegistrationMetric to evaluate the match between
the objects to be registered (target and reference)
- a RegistrationTransformation that defines how the
reference object will be mapped on top of the target
- a RegistrationMapper that having access to the
transformation will pass information back and forth
between the reference and target space. Eventually
doing some interpolation on the way.
- an RegistrationOptimizer that search for the optimum
transformation.
The Optimizer is expected to be only a light wrapper of an
already existing optimization class. The first candidates
to wrap are the vxl algorithms:
vnl_nonlinear_minimizer (the generic api)
vnl_conjugate_gradient
vnl_levenberg_marquardt
vnl_amoeba
and then, some genetic (or evolutionary) algorithms.
The optimizer's search space is the one defined by the
transformation parameters. That allows to separate the
implementation of the transformation from its definition.
For example a 2D rigid transformation can be implemented
as a 3x3 matrix in homogeneous coordinates, but it is
defined by just three numbers (parameters) that represent:
( rotation, translation x, translation y).
The Metric will evaluate how much the transformed reference
match the target objet. Possible Metrics to implement are:
Intensity Correlation (for images)
Intensity based Mutual Information
Intensity Squared differences (for images)
Sum of squared distances (for point sets)
On the same spirit, the RegistrationTransformation will be
a light wrap for geometric transformations, like the already
existing itkAffineTransform. It just add some mechanism to
standarize the passing of parameters to the optimization
method. Some transformations to consider are:
Rigid
Similarity
Affine
Thin Plate Spline (defined by landmarks)
Flow
The basic objects can be used to derive from them, or can
just be used as examples of what elements the type should
have.
Some examples of how this code will look like when used
in a real registration problem are in the Testing directory,
they compile on Linux and VC++. (There are actualy not
doing any thing different than checking that all the types
are coherent). They are:
itkRegistrationImageToImageAffine.cxx
itkRegistrationModelToImage.cxx
itkRegistrationPoints3D2DAffine.cxx
itkRegistrationProcrustes.cxx
-----
Thanks
Luis
--
-----------------------------------------------------------
Luis Ibanez
Research Assistant Professor - Division of NeuroSurgery
University of North Carolina at Chapel Hill
Chapel Hill, NC, 27599 http://www.cs.un.edu/~ibanez
------------------------------------------------------------