[Insight-users] re gistration error RegularStepGradientDescentOptimizer
EsmeRuiz
esmeralda.ruizpujadas at gmail.com
Tue Feb 22 04:48:10 EST 2011
Hello, thanks for your answer. I found this error because the exception
returns this error in the screen. So I don't understand because as
you say theoptimizer has 6 parameters but the metric It is set up by
default.
Thanks !!
Luis Ibanez wrote:
>
> Hi Esme,
>
> The CenteredSimilarity2DTransform has six parameters:
>
> * The serialization of the optimizable parameters is an array of 6
> elements
> * ordered as follows:
> * p[0] = scale
> * p[1] = angle
> * p[2] = x coordinate of the center
> * p[3] = y coordinate of the center
> * p[4] = x component of the translation
> * p[5] = y component of the translation
>
> http://www.itk.org/Doxygen/html/classitk_1_1CenteredSimilarity2DTransform.html
>
>
> How do you arrive to find that the CostFunction (The metric ?) has
> a NumberOfParameters = 3 ?
>
> The Metric and the Optimizer normally get their number of parameters from
> the
> transform at run time.
>
>
> Luis
>
>
> ------------------------------------------------------------------------
> On Mon, Feb 21, 2011 at 5:56 AM, EsmeRuiz
> <esmeralda.ruizpujadas at gmail.com> wrote:
>>
>> Hello, I am new with ITK. And I have tried to do a model based
>> registration
>> using regular step gradient descent optimizer and I get this error
>>
>> The size of Scales 6, but the NumberOfParameters for the CostFunction is
>> 3.
>>
>> I don't understand what it means.
>>
>> The code is:
>>
>> void registrations::modelBasedRegistration(float **imgFIXED, int
>> size_row,
>> int size_col, int absFrame){
>>
>>
>> typedef itk::GroupSpatialObject< 2 > GroupType;
>> typedef itk::EllipseSpatialObject< 2 > EllipseType;
>> typedef itk::Image< float, 2 > ImageType;
>>
>> EllipseType::Pointer ellipse1 = EllipseType::New();
>> EllipseType::Pointer ellipse2 = EllipseType::New();
>> //EllipseType::Pointer ellipse3 = EllipseType::New();
>>
>>
>> ellipse1->SetRadius( 1.0 );
>> ellipse2->SetRadius( 2.0 );
>>
>>
>> // Software Guide : BeginCodeSnippet
>> EllipseType::TransformType::OffsetType offset;
>> offset[ 0 ] = (int)size_col/2.0;
>> offset[ 1 ] = (int)size_row/2.0;
>>
>> ellipse1->GetObjectToParentTransform()->SetOffset(offset);
>> ellipse1->ComputeObjectToWorldTransform();
>>
>>
>> offset[ 0 ] = (int)size_col/2.0;
>> offset[ 1 ] = (int)size_row/2.0;
>>
>> ellipse2->GetObjectToParentTransform()->SetOffset(offset);
>> ellipse2->ComputeObjectToWorldTransform();
>>
>> // Software Guide : BeginCodeSnippet
>> GroupType::Pointer group = GroupType::New();
>> group->AddSpatialObject( ellipse1 );
>> group->AddSpatialObject( ellipse2 );
>>
>>
>> // Software Guide : BeginCodeSnippet
>> typedef itk::SpatialObjectToImageFilter< GroupType, ImageType >
>> SpatialObjectToImageFilterType;
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> SpatialObjectToImageFilterType::Pointer imageFilter =
>> SpatialObjectToImageFilterType::New();
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> imageFilter->SetInput( group );
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> ImageType::SizeType size;
>> size[ 0 ] = 200;
>> size[ 1 ] = 200;
>> imageFilter->SetSize( size );
>>
>>
>> // Software Guide : BeginCodeSnippet
>> imageFilter->Update();
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> typedef itk::DiscreteGaussianImageFilter< ImageType, ImageType >
>> GaussianFilterType;
>> GaussianFilterType::Pointer gaussianFilter =
>> GaussianFilterType::New();
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> gaussianFilter->SetInput( imageFilter->GetOutput() );
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> const double variance = 20;
>> gaussianFilter->SetVariance(variance);
>> gaussianFilter->Update();
>> // Software Guide : EndCodeSnippet
>>
>>
>> // Software Guide : BeginCodeSnippet
>> typedef itk::ImageToSpatialObjectRegistrationMethod< ImageType,
>> GroupType
>>> RegistrationType;
>> RegistrationType::Pointer registration =
>> RegistrationType::New();
>>
>> typedef SimpleImageToSpatialObjectMetric< ImageType, GroupType >
>> MetricType;
>> MetricType::Pointer metric = MetricType::New();
>> // Software Guide : EndCodeSnippet
>>
>>
>>
>> // Software Guide : BeginCodeSnippet
>> typedef itk::LinearInterpolateImageFunction< ImageType, double >
>> InterpolatorType;
>> InterpolatorType::Pointer interpolator =
>> InterpolatorType::New();
>> // Software Guide : EndCodeSnippet
>>
>>
>>
>> typedef itk::RegularStepGradientDescentOptimizer
>> OptimizerType;
>> OptimizerType::Pointer optimizer =
>> OptimizerType::New();
>>
>>
>>
>> typedef itk::CenteredSimilarity2DTransform< double >
>> TransformType;
>> TransformType::Pointer transform = TransformType::New();
>>
>>
>>
>>
>>
>> double steplength = 0.1; // 1.0
>> optimizer->SetMaximumStepLength( steplength );
>> optimizer->SetMinimumStepLength( 0.0001 );
>>
>> optimizer->SetNumberOfIterations( 500 );
>> typedef OptimizerType::ScalesType OptimizerScalesType;
>> int numOfParameters = transform->GetNumberOfParameters();
>> OptimizerScalesType optimizerScales(
>> transform->GetNumberOfParameters()
>> );
>> const double translationScale = 1.0 / 100.0;
>>
>> optimizerScales[0] = 10.0;
>> optimizerScales[1] = 1.0;
>> optimizerScales[2] = translationScale;
>> optimizerScales[3] = translationScale;
>> optimizerScales[4] = translationScale;
>> optimizerScales[5] = translationScale;
>>
>> optimizer->SetScales( optimizerScales );
>>
>> CommandIterationUpdate::Pointer observer =
>> CommandIterationUpdate::New();
>> optimizer->AddObserver( itk::IterationEvent(), observer );
>>
>>
>> registration->SetFixedImage( gaussianFilter->GetOutput() );
>> registration->SetMovingSpatialObject( group );
>> registration->SetTransform( transform );
>> registration->SetInterpolator( interpolator );
>> registration->SetOptimizer( optimizer );
>> registration->SetMetric( metric );
>>
>> typedef float InputPixelType;
>> typedef itk::Image< InputPixelType, 2 > InputImageType;
>>
>> typedef itk::CenteredTransformInitializer<
>>
>> TransformType,
>>
>> InputImageType,
>>
>> ImageType > TransformInitializerType;
>>
>> TransformInitializerType::Pointer initializer =
>> TransformInitializerType::New();
>>
>> initializer->SetTransform( transform );
>> FixedImageType::Pointer fixedImageReader =
>> FixedImageType::New();
>> CreateImage(fixedImageReader, size_row, size_col,imgFIXED);
>> initializer->SetFixedImage( fixedImageReader );
>> initializer->SetMovingImage( imageFilter->GetOutput() );
>>
>> initializer->MomentsOn();
>>
>> initializer->InitializeTransform();
>>
>> double initialScale = 1.0;
>>
>> double initialAngle = 0.5;
>>
>> transform->SetScale( initialScale );
>> transform->SetAngle( initialAngle );
>>
>>
>>
>> registration->SetInitialTransformParameters(
>> transform->GetParameters()
>> );
>> //optimizer->MaximizeOn();
>>
>> //Finally, we trigger the execution of the registration process
>> with the
>> // \code{StartRegistration()} method. We place this call in a
>> // \code{try/catch} block in case any exception is thrown
>> during the
>> // process.
>>
>> try
>> {
>> registration->StartRegistration();
>> }
>> catch( itk::ExceptionObject & err )
>> {
>> std::cerr << "ExceptionObject caught !" << std::endl;
>> std::cerr << err << std::endl;
>> return ;
>> }
>>
>>
>> // Software Guide : BeginCodeSnippet
>> RegistrationType::ParametersType finalParameters
>> = registration->GetLastTransformParameters();
>>
>> std::cout << "Final Solution is : " << finalParameters <<
>> std::endl;
>> // Software Guide : EndCodeSnippet
>>
>>
>>
>>
>>
>>
>>
>> typedef itk::ResampleImageFilter<ImageType,
>>
>> FixedImageType > ResampleFilterType;
>>
>> TransformType::Pointer finalTransform = TransformType::New();
>>
>> finalTransform->SetParameters( finalParameters );
>>
>> ResampleFilterType::Pointer resampler =
>> ResampleFilterType::New();
>>
>> resampler->SetTransform( finalTransform );
>> resampler->SetInput( imageFilter->GetOutput() );
>>
>> ImageType::Pointer fixedImage = fixedImageReader;
>>
>> resampler->SetSize(
>> fixedImage->GetLargestPossibleRegion().GetSize()
>> );
>> resampler->SetOutputOrigin( fixedImage->GetOrigin() );
>> resampler->SetOutputSpacing( fixedImage->GetSpacing() );
>> resampler->SetDefaultPixelValue( 0 );
>>
>> typedef unsigned char OutputPixelType;
>>
>> typedef itk::Image< OutputPixelType, 2> OutputImageType;
>>
>> typedef itk::CastImageFilter< FixedImageType, OutputImageType >
>> CastFilterType;
>>
>> typedef itk::ImageFileWriter< OutputImageType > writerType;
>>
>>
>> writerType::Pointer writer2 = writerType::New();
>> CastFilterType::Pointer caster = CastFilterType::New();
>>
>> writer2->SetFileName( "reg.jpg" );
>>
>> caster->SetInput( resampler->GetOutput() );
>> writer2->SetInput( caster->GetOutput() );
>> try
>> {
>> writer2->Update();
>> }
>> catch( itk::ExceptionObject & err )
>> {
>> std::cerr << "ExceptionObject caught !" << std::endl;
>> std::cerr << err << std::endl;
>> return ;
>> }
>>
>>
>> return;
>>
>> }
>>
>> Thank you very much !!
>> --
>> View this message in context:
>> http://old.nabble.com/registration-error-RegularStepGradientDescentOptimizer-tp30976153p30976153.html
>> Sent from the ITK - Users mailing list archive at Nabble.com.
>>
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>
>
--
View this message in context: http://old.nabble.com/registration-error-RegularStepGradientDescentOptimizer-tp30976153p30984242.html
Sent from the ITK - Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list