[ITK-users] VersorRigid3DTransformOptimizer question

Christopher Mullins christopher.mullins at kitware.com
Mon Dec 29 12:12:46 EST 2014


>From Examples/RegistrationITKv4/MultiResImageRegistration2.cxx [1]:

*The set of parameters in the AffineTransform have different dynamic
ranges. Typically the parameters associated with the matrix have values
around [-1:1], although they are not restricted to this interval.
Parameters associated with translations, on the other hand, tend to have
much higher values, typically in the order of 10.0 to 100.0. This
difference in dynamic range negatively affects the performance of gradient
descent optimizers. ITK provides a mechanism to compensate for such
differences in values among the parameters when they are passed to the
optimizer. The mechanism consists of providing an array of scale factors to
the optimizer. These factors re-normalize the gradient components before
they are used to compute the step of the optimizer at the current
iteration. In our particular case, a common choice for the scale parameters
is to set to 1.0 all those associated with the matrix coefficients, that
is, the first N x N factors. Then, we set the remaining scale factors to a
small value. The following code sets up the scale coefficients.*

>From the ImageRegistration7 example [5]:

*Keeping in mind that the scale of units in scaling, rotation
and translation are quite different, we take advantage of the
scaling functionality provided by the optimizers. We know that the first
element of the parameters array corresponds to the scale factor, the
second corresponds to the angle, third and fourth are the center of
rotation and fifth and sixth are the remaining translation. We use
henceforth small factors in the scales associated with translations and the
rotation center.*

>From the ScalesType doxygen [2]:

*Scale type. This array defines scale to be applied to parameters before
being evaluated in the cost function. This allows to map to a more
convenient space. In particular this is used to normalize parameter spaces
in which some parameters have a different dynamic range.*

[5] is the most specific I can find.  Looking at how it's used in [1] might
also be useful, as the example you mentioned doesn't provide much
explanation (perhaps I or someone else should address that soon).

>From [3] (warning, outdated (2002!)):

*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).*

Here is another useful thread which is only half a decade old [4].

Perhaps an explanation for this is deserving of better accommodations,
maybe on the wiki.

In the meantime, hope this helps!

[1]
https://github.com/InsightSoftwareConsortium/ITK/blob/master/Examples/RegistrationITKv4/MultiResImageRegistration2.cxx#L291-322

[2]
http://www.itk.org/Doxygen/html/classitk_1_1Optimizer.html#a4c2e8eb9d9390e0e2988e78ea094492a

[3]
http://public.kitware.com/pipermail/insight-users/2002-October/001400.html

[4]
http://itk-insight-users.2283740.n2.nabble.com/Confused-abour-Optimizer-Scales-td4010857.html

[5]
https://github.com/InsightSoftwareConsortium/ITK/blob/master/Examples/RegistrationITKv4/ImageRegistration7.cxx


On Mon, Dec 29, 2014 at 11:09 AM, Matias Montroull <matimontg at gmail.com>
wrote:

> Hi,
>
> What are the components or what each element represents (0 to 5) in
> the VersorRigid3DTransformOptimizer?
>
>  typedef OptimizerType::ScalesType       OptimizerScalesType;
>   OptimizerScalesType optimizerScales( transform->GetNumberOfParameters()
> );
>   const double translationScale = 1.0 / 1000.0;
>
>   optimizerScales[0] = 1.0;
>   optimizerScales[1] = 1.0;
>   optimizerScales[2] = 1.0;
>   optimizerScales[3] = translationScale;
>   optimizerScales[4] = translationScale;
>   optimizerScales[5] = translationScale;
>
> Thanks!
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
>
>


-- 
Christopher Mullins
R&D Engineer
Kitware Inc.,
919.869.8871
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20141229/fd76017c/attachment.html>


More information about the Insight-users mailing list