[Insight-users] Understanding OptimizerScales in its entirety

Wolf, Levin Levin.Wolf at haw-hamburg.de
Thu Aug 11 20:09:57 EDT 2011


Hi everybody,

i´m working on an 3D multisresolution Mutual Information registration and i would really like to understand the mechanism of the OptimizerScales in its entirety.
I know, why I need them and how to use them. But I´m still not able to retrace the way of my scaling. How are they really working...

In my case, I´m using:

itk::MattesMutualInformationImageToImageMetric
itk::VersorRigid3DTransform
itk::VersorRigid3DTransformOptimizer
itk::CenteredTransformInitializer

and for example  the following settings:


typedef OptimizerType::ScalesType       OptimizerScalesType;
  OptimizerScalesType optimizerScales( transform->GetNumberOfParameters() );
  const double translationScale = 1.0 / 2000.0;

  optimizerScales[0] = 1.0;
  optimizerScales[1] = 1.0;
  optimizerScales[2] = 1.0;
  optimizerScales[3] = translationScale;
  optimizerScales[4] = translationScale;
  optimizerScales[5] = translationScale;



    if ( registration->GetCurrentLevel() == 0 )
      {
      optimizer->SetMaximumStepLength( 8.0 ); 
      optimizer->SetMinimumStepLength( 1.0 );
      }
    else
      {
      optimizer->SetMaximumStepLength( optimizer->GetCurrentStepLength() / 2.0);
      optimizer->SetMinimumStepLength( optimizer->GetMinimumStepLength() / 10.0 );
      }

What happens to the Scales??? Are they getting normalized somehow? Or is the steplength simply devided by the Scale? 

So how big would my first step be with these settings?


I would be very grateful if someone could help me to understand the inside of the scaling.



Thanks a lot

Levin







More information about the Insight-users mailing list