[ITK-users] Fwd: Metric Evaluation

suneeza hanif suneezahanif02 at gmail.com
Thu Jan 7 04:52:11 EST 2016


Hello Matt,

Here is the full version of code. Can you please guide me where am I doing
something wrong because I am unable to get it. Even If I stop after one
iteration the values are very different.

I would be highly thankful to you.

* const    unsigned int    Dimension = 2;*
* typedef  float          PixelType;*

* typedef itk::Image< PixelType, Dimension >  FixedImageType;*
* typedef itk::Image< PixelType, Dimension >  MovingImageType;*

* typedef itk::TranslationTransform< double, Dimension > TransformType;*

* typedef itk::RegularStepGradientDescentOptimizerv4<double> OptimizerType;*

* typedef itk::MeanSquaresImageToImageMetricv4<
FixedImageType,MovingImageType > MetricType;*

* typedef itk::ImageRegistrationMethodv4< FixedImageType, MovingImageType,
TransformType > RegistrationType;*

* MetricType::Pointer         metric        = MetricType::New();*
* OptimizerType::Pointer      optimizer     = OptimizerType::New();*
* RegistrationType::Pointer   registration  = RegistrationType::New();*

* registration->SetMetric(        metric        );*
* registration->SetOptimizer(     optimizer     );*

* typedef itk::LinearInterpolateImageFunction< FixedImageType, double >
FixedLinearInterpolatorType;*

* typedef itk::LinearInterpolateImageFunction< MovingImageType, double >
MovingLinearInterpolatorType;*

* FixedLinearInterpolatorType::Pointer fixedInterpolator =
FixedLinearInterpolatorType::New();*
* MovingLinearInterpolatorType::Pointer movingInterpolator =
MovingLinearInterpolatorType::New();*

* metric->SetFixedInterpolator(  fixedInterpolator  );*
* metric->SetMovingInterpolator(  movingInterpolator  );*

* typedef itk::ImageFileReader< FixedImageType  >   FixedImageReaderType;*
* typedef itk::ImageFileReader< MovingImageType >   MovingImageReaderType;*

* FixedImageReaderType::Pointer   fixedImageReader     =
FixedImageReaderType::New();*
* MovingImageReaderType::Pointer  movingImageReader    =
MovingImageReaderType::New();*

* fixedImageReader->SetFileName(  input1 );*
* movingImageReader->SetFileName( input2 );*

* registration->SetFixedImage( fixedImageReader->GetOutput() );*
* registration->SetMovingImage( movingImageReader->GetOutput() );*
* typedef float                    OutputPixelType;*

* typedef itk::Image< PixelType, Dimension > OutputImageType;*
* TransformType::Pointer transform = TransformType::New();*

* transform->SetIdentity();*
* registration->SetInitialTransform( transform );*

* optimizer->SetLearningRate( 4 );*
* optimizer->SetMinimumStepLength( 0.001 );*
* optimizer->SetRelaxationFactor( 0.5 );*

* std::cout<<"Transform before registration: "<<transform<<endl;*
* RegistrationType::MetricSamplingStrategyType  samplingStrategy  =
RegistrationType::RANDOM;*
* double samplingPercentage = 0.20;*
* registration->SetMetricSamplingStrategy( samplingStrategy );*
* registration->SetMetricSamplingPercentage( samplingPercentage );*

* optimizer->SetNumberOfIterations( 1 );*

* CommandIterationUpdate::Pointer observer = CommandIterationUpdate::New();*
* optimizer->AddObserver( itk::IterationEvent(), observer );*

* const unsigned int numberOfLevels = 1;*
* registration->SetNumberOfLevels ( numberOfLevels );*
* try*
* {*
* std::cout<<"Evaluating registration parameters..."<<std::endl;*
* registration->Update();*
* std::cout << "Optimizer stop condition: ";*
* std::cout<< registration->GetOptimizer()->GetStopConditionDescription();*
* std::cout << std::endl;*
* }*
* catch( itk::ExceptionObject & err )*
* {*
* std::cerr << "ExceptionObject caught !" << std::endl;*
* std::cerr << err << std::endl;*
* system("pause");*
* return EXIT_FAILURE;*
* }*

* TransformType::ParametersType finalParameters =
registration->GetTransform()->GetParameters();*
* const double TranslationAlongX = finalParameters[0];*
* const double TranslationAlongY = finalParameters[1];*

* const unsigned int numberOfIterations = optimizer->GetCurrentIteration();*

* const double bestValue = optimizer->GetValue();*

* std::cout << "Result = " << std::endl;*
* std::cout << " Translation X = " << TranslationAlongX  << std::endl;*
* std::cout << " Translation Y = " << TranslationAlongY  << std::endl;*
* std::cout << " Iterations    = " << numberOfIterations << std::endl;*
* std::cout << " Metric value  = " << bestValue          << std::endl;*



* typedef itk::ResampleImageFilter< MovingImageType, FixedImageType >
ResampleFilterType;*

* ResampleFilterType::Pointer resampler = ResampleFilterType::New();*
* resampler->SetInput( movingImageReader->GetOutput() );*
* resampler->SetTransform( registration->GetTransform() );*
* FixedImageType::Pointer fixedImage = fixedImageReader->GetOutput();*

* resampler->SetSize( fixedImage->GetLargestPossibleRegion().GetSize() );*
* resampler->SetOutputOrigin(  fixedImage->GetOrigin() );*
* resampler->SetOutputSpacing( fixedImage->GetSpacing() );*
* resampler->SetOutputDirection( fixedImage->GetDirection() );*
* resampler->SetDefaultPixelValue( 0 );*


*
////////////////////////////////////////////////////////////////////////////////////////////*

* std::cout<<"Transform after registration: "<<transform<<endl;*

* MetricType::Pointer metric2 = MetricType::New();*

* TransformType::Pointer transformCopy = transform->Clone();*
* std::cout << "Transform copy: " << transformCopy << std::endl;*

* metric2->SetFixedImage( fixedImageReader->GetOutput() );*
* metric2->SetMovingImage(movingImageReader->GetOutput() );*
* metric2->SetFixedInterpolator(  fixedInterpolator  );*
* metric2->SetMovingInterpolator(  movingInterpolator  );*
* metric2->SetTransform(transformCopy);*

* try*
* {*
* metric2->Initialize();*
* }*
* catch( itk::ExceptionObject & err )*
* {*
* std::cerr << "ExceptionObject caught !" << std::endl;*
* std::cerr << err << std::endl;*
* }*

* cout<<endl<<"Metric Value (Mean Square Image to Image):
"<<metric2->GetValue()<<endl;*

*
////////////////////////////////////////////////////////////////////////////////////////////*

Best Regards,
Suneeza

On Wed, Jan 6, 2016 at 11:53 PM, suneeza hanif <suneezahanif02 at gmail.com>
wrote:

> Hello Matt,
>
> Thanks a lot for your help.
>
> I am still unable to get same metric even after using this.
>
> I am using Centered2DTransform and during registration I have not
> initialized it so it will take (0,0) as center of rotation. Then I defined
> FixedParameters again with (0,0) but metric value is still quite different.
>
> Best Regards,
> Suneeza
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20160107/ed2cb939/attachment.html>


More information about the Insight-users mailing list