I am using ITK5 to build an automated multi-resolution rigid registration for multi-modality 3D MR images, basically T1 and T2 registration. As the OnePlusOne optimizer works well with mutual information metric, I am thinking to incorporated the OnePlusOne optimizer in the framework.
For gradient descent optimizer, we usually prefer the parameters to be as continuous as possible in the parameter space throughout the multi-resolution levels. How about the case of the OnePlusOne optimizer? Any comments? Is anyone willing to share his/her experience on the parameter settings?
For example, the parameters can be set as follows in an one-level rigid registration:
using OptimizerType = itk::OnePlusOneEvolutionaryOptimizerv4<double>;
using RegistrationType =
itk::ImageRegistrationMethodv4<FixedImageType, MovingImageType>;
using MetricType =
itk::MattesMutualInformationImageToImageMetricv4<FixedImageType, MovingImageType>;
OptimizerType::Pointer optimizer = OptimizerType::New();
using GeneratorType = itk::Statistics::NormalVariateGenerator;
GeneratorType::Pointer generator = GeneratorType::New();
generator->Initialize(12345);
optimizer->SetNormalVariateGenerator(generator);
optimizer->Initialize(10);
optimizer->SetEpsilon(1.0);
optimizer->SetMaximumIteration(4000);
RegistrationType::SmoothingSigmasArrayType smoothingSigmasPerLevel;
smoothingSigmasPerLevel.SetSize(1);
smoothingSigmasPerLevel[0] = 0;
How about a 3-levels multi-resolution rigid registration? Are the smoothing sigmas also important for OnePlusOne optimizer?
Thanks.
Fang