[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