<div dir="ltr">Hello Matt,<div><br></div><div>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.</div><div><br></div><div>I would be highly thankful to you.</div><div><font color="#0000ff"><br></font></div><div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>const    unsigned int    Dimension = 2;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>typedef  float          PixelType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>typedef itk::Image< PixelType, Dimension >  FixedImageType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>typedef itk::Image< PixelType, Dimension >  MovingImageType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>typedef itk::TranslationTransform< double, Dimension > TransformType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>typedef itk::RegularStepGradientDescentOptimizerv4<double> OptimizerType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>typedef itk::MeanSquaresImageToImageMetricv4< FixedImageType,MovingImageType > MetricType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>typedef itk::ImageRegistrationMethodv4<<span class="" style="white-space:pre">        </span>FixedImageType,<span class="" style="white-space:pre">   </span>MovingImageType, TransformType > RegistrationType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>MetricType::Pointer         metric        = MetricType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>OptimizerType::Pointer      optimizer     = OptimizerType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>RegistrationType::Pointer   registration  = RegistrationType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>registration->SetMetric(        metric        );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>registration->SetOptimizer(     optimizer     );</font></i></div><div><span style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></span></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>typedef itk::LinearInterpolateImageFunction< FixedImageType, double > FixedLinearInterpolatorType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>typedef itk::LinearInterpolateImageFunction< MovingImageType, double > MovingLinearInterpolatorType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>FixedLinearInterpolatorType::Pointer fixedInterpolator = FixedLinearInterpolatorType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>MovingLinearInterpolatorType::Pointer movingInterpolator = MovingLinearInterpolatorType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>metric->SetFixedInterpolator(  fixedInterpolator  );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>metric->SetMovingInterpolator(  movingInterpolator  );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>typedef itk::ImageFileReader< FixedImageType  >   FixedImageReaderType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>typedef itk::ImageFileReader< MovingImageType >   MovingImageReaderType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>FixedImageReaderType::Pointer   fixedImageReader     = FixedImageReaderType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>MovingImageReaderType::Pointer  movingImageReader    = MovingImageReaderType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>fixedImageReader->SetFileName(  input1 );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>movingImageReader->SetFileName( input2 );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>registration->SetFixedImage( fixedImageReader->GetOutput() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>registration->SetMovingImage( movingImageReader->GetOutput() );</font></i></div><div><span class="" style="white-space:pre;background-color:rgb(255,255,255)"><i><font color="#0000ff">      </font></i></span></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>typedef float                    OutputPixelType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>typedef itk::Image< PixelType, Dimension > OutputImageType;</font></i></div><div><span class="" style="white-space:pre;background-color:rgb(255,255,255)"><i><font color="#0000ff">  </font></i></span></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>TransformType::Pointer transform = TransformType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>transform->SetIdentity();</font></i></div><div><span class="" style="white-space:pre;background-color:rgb(255,255,255)"><i><font color="#0000ff">       </font></i></span></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>registration->SetInitialTransform( transform );</font></i></div><div><span style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></span></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>optimizer->SetLearningRate( 4 );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>optimizer->SetMinimumStepLength( 0.001 );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>optimizer->SetRelaxationFactor( 0.5 );</font></i></div><div><span style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></span></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>std::cout<<"Transform before registration: "<<transform<<endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>RegistrationType::MetricSamplingStrategyType  samplingStrategy  = RegistrationType::RANDOM;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>double samplingPercentage = 0.20;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>registration->SetMetricSamplingStrategy( samplingStrategy );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>registration->SetMetricSamplingPercentage( samplingPercentage );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>optimizer->SetNumberOfIterations( 1 );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>CommandIterationUpdate::Pointer observer = CommandIterationUpdate::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>optimizer->AddObserver( itk::IterationEvent(), observer );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>const unsigned int numberOfLevels = 1;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>registration->SetNumberOfLevels ( numberOfLevels );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>try</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>{</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">                </span>std::cout<<"Evaluating registration parameters..."<<std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">             </span>registration->Update();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">               </span>std::cout << "Optimizer stop condition: ";</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">               </span>std::cout<< registration->GetOptimizer()->GetStopConditionDescription();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">             </span>std::cout << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>}</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>catch( itk::ExceptionObject & err )</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>{</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">                </span>std::cerr << "ExceptionObject caught !" << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">              </span>std::cerr << err << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">               </span>system("pause");</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">               </span>return EXIT_FAILURE;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>}</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>TransformType::ParametersType finalParameters = registration->GetTransform()->GetParameters();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>const double TranslationAlongX = finalParameters[0];</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>const double TranslationAlongY = finalParameters[1];</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>const unsigned int numberOfIterations = optimizer->GetCurrentIteration();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>const double bestValue = optimizer->GetValue();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>std::cout << "Result = " << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>std::cout << " Translation X = " << TranslationAlongX  << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>std::cout << " Translation Y = " << TranslationAlongY  << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>std::cout << " Iterations    = " << numberOfIterations << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>std::cout << " Metric value  = " << bestValue          << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>typedef itk::ResampleImageFilter< MovingImageType, FixedImageType > ResampleFilterType;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>ResampleFilterType::Pointer resampler = ResampleFilterType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>resampler->SetInput( movingImageReader->GetOutput() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>resampler->SetTransform( registration->GetTransform() );</font></i></div><div><span class="" style="white-space:pre;background-color:rgb(255,255,255)"><i><font color="#0000ff">             </font></i></span></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre"> </span>FixedImageType::Pointer fixedImage = fixedImageReader->GetOutput();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>resampler->SetSize( fixedImage->GetLargestPossibleRegion().GetSize() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>resampler->SetOutputOrigin(  fixedImage->GetOrigin() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>resampler->SetOutputSpacing( fixedImage->GetSpacing() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>resampler->SetOutputDirection( fixedImage->GetDirection() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>resampler->SetDefaultPixelValue( 0 );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>////////////////////////////////////////////////////////////////////////////////////////////</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>std::cout<<"Transform after registration: "<<transform<<endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>MetricType::Pointer metric2 = MetricType::New();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>TransformType::Pointer transformCopy = transform->Clone();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>std::cout << "Transform copy: " << transformCopy << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>metric2->SetFixedImage( fixedImageReader->GetOutput() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">   </span>metric2->SetMovingImage(movingImageReader->GetOutput() );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>metric2->SetFixedInterpolator(  fixedInterpolator  );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>metric2->SetMovingInterpolator(  movingInterpolator  );</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>metric2->SetTransform(transformCopy);</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>try</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">      </span>{</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">                </span>metric2->Initialize();</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>}</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">        </span>catch( itk::ExceptionObject & err )</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">  </span>{</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">                </span>std::cerr << "ExceptionObject caught !" << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">              </span>std::cerr << err << std::endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">       </span>}</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">     </span>cout<<endl<<"Metric Value (Mean Square Image to Image): "<<metric2->GetValue()<<endl;</font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><span class="" style="white-space:pre">    </span>////////////////////////////////////////////////////////////////////////////////////////////</font></i></div></div><div><i style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></i></div><div><span style="background-color:rgb(255,255,255)"><font color="#000000">Best Regards,</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#000000">Suneeza</font></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 6, 2016 at 11:53 PM, suneeza hanif <span dir="ltr"><<a href="mailto:suneezahanif02@gmail.com" target="_blank">suneezahanif02@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Matt,<div><br></div><div>Thanks a lot for your help. </div><div><br></div><div>I am still unable to get same metric even after using this. </div><div><br></div><div>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.</div><div><br></div><div>Best Regards,</div><div>Suneeza</div><div><br></div></div>
</blockquote></div><br></div>