[ITK-users] ExhaustiveOptimizerv4 not working as expected
Jan Bergmeier
jan.bergmeier at imes.uni-hannover.de
Thu Apr 30 04:26:50 EDT 2015
Hello everyone,
I am trying to get the ExhaustiveOptimizerv4 to work. Therefore I built a
minimal example:
typedef itk::Image< double, 2 > ImageType;
typedef itk::ImageFileReader< ImageType > ReaderType;
typedef itk::MeanSquaresImageToImageMetricv4< ImageType, ImageType >
MetricType;
typedef itk::ExhaustiveOptimizerv4< double > OptimizerType;
typedef itk::TranslationTransform< double, 2 >TransformType;
typedef itk::LinearInterpolateImageFunction< ImageType, double >
LinearInterpolatorType;
typedef itk::ImageRegistrationMethodv4< ImageType, ImageType,
TransformType > RegistrationType;
ReaderType::Pointer fixedReader = ReaderType::New();
ReaderType::Pointer movingReader = ReaderType::New();
MetricType::Pointer metric = MetricType::New();
OptimizerType::Pointer optimizer = OptimizerType::New();
TransformType::Pointer identityTransform = TransformType::New();
LinearInterpolatorType::Pointer fixedInterpolator =
LinearInterpolatorType::New();
LinearInterpolatorType::Pointer movingInterpolator =
LinearInterpolatorType::New();
RegistrationType::Pointer registration = RegistrationType::New();
fixedReader->SetFileName( "fixedImage.png" );
movingReader->SetFileName( "movingImage.png" );
metric->SetFixedInterpolator( fixedInterpolator );
metric->SetMovingInterpolator( movingInterpolator );
identityTransform->SetIdentity();
OptimizerType::StepsType steps(
identityTransform->GetNumberOfParameters() );
steps[1] = 10;
steps[2] = 50;
optimizer->SetNumberOfSteps( steps );
optimizer->SetStepLength( 1 );
registration->SetMetric( metric );
registration->SetOptimizer( optimizer );
registration->SetFixedImage( fixedReader->GetOutput() );
registration->SetMovingImage( movingReader->GetOutput() );
registration->SetFixedInitialTransform( identityTransform );
registration->SetMovingInitialTransform( identityTransform );
registration->Update();
std::cout << "Best value: " << registration->GetOptimizer()->GetValue()
<< std::endl;
std::cout << "Number of iterations: " <<
optimizer->GetCurrentIteration() << std::endl;
When I run this code, the number of iterations are 21. I would expect them
to be 10*50 = 500, but the second steps entry seems to have no effect.
Furthermore, the output from the registration metric is always 0, while it
isn't if I use different optimizers.
I hope anyone can help me.
Thanks in advance!
Jan
--
View this message in context: http://itk-users.7.n7.nabble.com/ExhaustiveOptimizerv4-not-working-as-expected-tp35618.html
Sent from the ITK - Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list