[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