[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
>