[Insight-users] Doubt about scales parameters in registration

SCHMID, Jerome jeromeschmid at surgery.cuhk.edu.hk
Mon May 1 23:11:09 EDT 2006


Hi,

I understand correctly the need of scaling in the registration
parameters of the transformation but I have a doubt concerning the good
passing of arguments. 

As suggested by many examples, and the wiki one has to pass a scale
parameter that will be *multiplied* to the internal data in order to put
all the parameters into a same dynamic range. E.g:

// Scale the translation components of the Transform in the Optimizer
OptimizerType::ScalesType scales( transform->GetNumberOfParameters() );
const double translationScale = 1000.0; // dynamic range of translations
const double rotationScale = 1.0; // dynamic range of rotations
scales[0] = 1.0 / rotationScale;
scales[1] = 1.0 / rotationScale;
scales[2] = 1.0 / rotationScale;
scales[3] = 1.0 / translationScale;
scales[4] = 1.0 / translationScale;
scales[5] = 1.0 / translationScale;

this is typically example for 3D rigid reg. 

But if I have a look to for instance the OnePlusOne optimizer or the
Powell one, the scales are *divided*, e.g. from powell code:

for(unsigned int i=0; i<m_SpaceDimension; i++)
    {
    m_LineDirection[i] = m_LineDirection[i] / this->GetScales()[i];
    }

A great paper of the insight journal on shape to image reg (
"Model-Image Registration of Parametric Shape Models: Fitting a Shell to
the Cochlea" ) based on the OnePlusOne optimizer, uses to set the scales
at 1000.0 instead of 1/1000.0... 

Is it done purposely, i.e. these optimizers require such choice, or it
is simply a misunderstanding on how scale must be used, i.e. divided or
multiplied?

Thanks.

Best Regards,

Jerome Schmid




More information about the Insight-users mailing list