[Insight-users] Re: VersorRigid3DTransform

Luis Ibanez luis.ibanez at kitware.com
Fri, 02 Jan 2004 13:44:56 -0500


Hi Radhika,

1) The RegularStepGradientDescentOptimizer is not appropriate
    for performing optimization in the parameter space of the
    VersorRigid3DTransform.  An optimizer for this purpose is
    missing in ITK. This issue has been logged as Bug # 475 and
    will be resolved shortly.

2) About the scale factors, here is a rule of thumb for setting
    their values:

    The rotation parameters are scaled by

                              1.0

    The translation parametes are scaled by

              1.0 / ( 10 * spacing * numberOfPixels )

    something like:

    scale[0] = 1.0;
    scale[1] = 1.0;
    scale[2] = 1.0;
    scale[3] = 1.0 / (10.0 * spacing[0] * size[0] );
    scale[4] = 1.0 / (10.0 * spacing[1] * size[1] );
    scale[5] = 1.0 / (10.0 * spacing[2] * size[2] );

    where "spacing" is the distance between pixel centers
    measured in millimeters and "size" is the number
    of pixels along each dimension of the image.


3) You want to start the MaximumStepLength as a small
    value compared to 1.0. For example start with 0.1.
    The MinimumStepLength is a stopping criteria. You
    should set it as a factor of the MaximumStepLength.
    Let's say you dont' care for having precision under
    0.5 degrees, this is equivalent to 0.00872 radians,
    therefore you could say that your want to stop when
    the optimizer is making steps under 0.01.  That is,
    your MinimumStepLength is 0.01.   Note that the more
    exigent you become with this value, the longer it
    will take to complete the registration.

    For the MaximumStepLength you should start with a
    low value and look at the evolution of the optimization,
    if you notice that the metric values are quite steady
    and monotonic you can then take the risk of taking
    larger steps and therefore reduce the total time of
    the optimization.

4) Yeap, if the metric is not changing at all, that's
    a clear indication that your optimization step is
    too small.  When the metric is changing too much and
    having increases and decreases, that's an indication
    that your optmization step is too large.



Regards,


    Luis


-------------------------------------------
Radhika Sivaramakrishna wrote:

> Hi Luis,
> I decided to run the example in ImageRegistration8.cxx under examples to
> register two 3D images where the moving image is created from the fixed one
> by rotating by 10 degrees about the slice direction (so effectively, every
> slice is rotated by 10 degrees). When creating the second image, I chose the
> goemetircal center as the center of rotation and not the center of mass.
> 
> My question was related to the parameters set for the optimizer.
> 
> 1)  Is the RegularStepGradientDescentOptimizer the correct one for this
> problem.
> 
> 2)  Is the optimizerScales set correctly? How do  I decide what factor of
> division to use for the translation parameters and center of rotation? How
> is this related to the amount of translation and rotation expected in my
> cases? What else does it depend on?
> 
> 3) How do I decide what values to use for SetMaximumStepLength and
> SetMinimumStepLength?
> For example in my case, the rotation was 10 degrees. What would have been
> the appropriate values to set in this case?
> 
> 4) I am currently running this and I find even after 7 iterations (each
> iteration is very slow on my computer), the metric value has not changed at
> all and the other parameters marginally, so its obvious that the parameters
> to optimizer are probably not set correctly, though I am not sure how to set
> them optimally.
> 
> Thanks
> Radhika
>