[Insight-users] Registration

Luis Ibanez luis.ibanez@kitware.com
Thu, 31 Oct 2002 11:38:43 -0500


Hi Suresh,

The Optimizer scales are used to bring all the parameters
to a similar scale range.

Here is the problem: imagine that you are registering
in 2D using a rigid transform. This transform is fully
defined by 3 paramters = { x, y } translation and an
angle for rotation. So the optimizer will be exploring
a 3-D parametric space. (If you were using rigid in 3D,
the parametric space will be 7-D).

The three parameters passed to the optimizer do not have
the same scale range. You could expect translation to be
in the order of the image size (in millimeters, not pixels)
while the rotation angle is expressed in radians which
means a range around -1.5 to 1.5.   Tranlations could be
maybe in the range 100 ~ 300. This huge difference of scale
is bad for the optimizer because it will try to do enormous
rotations or extremly small translations.

The optimizer scale is used to bring the paramters to a similar
scale. Knowing the order in which the parameters are exported
from the AffineTransfom, allow you to set up the scales.

e.g. for an 3D AffineTransform, you get 12 parameters: the
first 9 are the coefficients of the matrix (representing
rotation, scale and shearing) the last 3 are the components
of a translation vector.  You want then to provide an
array of 12 values with the first 9 being =1.0 and the last
three being on the range of 1.0 / the image size (in millimeters).


--

For the MutualInformation metrics, the number of samples can
very safely be fixed at 50. There are both, theoretical and
practical information supporting that the metric is insensitive
to this number.

The initial parameters of the transformation can be taken from
an actual affine transform. By default you can take an affine
transform, set it to Identity and then extract its parameters
with GetParameters().  However, if you have a good guess of an
initial translation and rotation that roughtly aling your images,
it may be convenient to set this values on an AffineTransform
and then extract its parameters.

Note that this is just an auxiliary transform. It doesn't have
to be the same transform that you plug in into the registration
method. This is only a trick to get the initial parameters
formatted correctly with minimum effort.


Please let us know if you find any problems,


   Thanks

     Luis


==============================================================

suresh wrote:
> Hi all,
> 
> I'm working on a SPECT to MRI regsitration problem.
> The components i'm using are
> AffineTransform,
> LinearInterpolateFunction,
> RegularStepGradientDescentOptimizer
> ImageRegistrationMethod
> MutualInformationImageToImageMetric
> 
> I'm clue less about the the various parametrs these components need.
> like..
> the OptimizerScales,
>    optimizer iterations,
> the No of Spatial Samples for the Metric,
> and the Initial Transform parameters for the registration method.
> 
> I tried with these following values
> 
>        ScalesType parametersScales( transform->GetNumberOfParameters() );
>        parametersScales.Fill( 1.0 );
>        double scale = 1.0 / vnl_math_sqr( 500);
>        for (int  j = 9; j < 12; j++ )
>        {
>         parametersScales[j] = scale;
>        }
>        optimizer->SetScales( parametersScales );
> 
> 
>        metric->SetNumberOfSpatialSamples( 50);
>        
> registration->SetInitialTransformParameters(transform->GetParameters());
>            optimizer->SetNumberOfIterations(400);
> 
> 
> But i failed to get the desired results.
> I worked with AVW image processing library.Where ,there are very less 
> parametrs for Registration.
> The results were as desired.
> 
> Please can any body help in approaching this registration problem..
> 
> 
> Thanks,
> 
> suresh
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-users
>