#ifndef __itkMaxPhaseCorrelationOptimizer_txx #define __itkMaxPhaseCorrelationOptimizer_txx #include "itkMaxPhaseCorrelationOptimizer.h" namespace itk { /* * Constructor */ template < typename TRegistrationMethod > MaxPhaseCorrelationOptimizer ::MaxPhaseCorrelationOptimizer() : Superclass() { m_MaxCalculator = MaxCalculatorType::New(); } /** * */ template < typename TRegistrationMethod > void MaxPhaseCorrelationOptimizer ::PrintSelf(std::ostream& os, Indent indent) const { Superclass::PrintSelf(os,indent); os << indent << "MaxCalculator: " << m_MaxCalculator << std::endl; } /** * */ template < typename TRegistrationMethod > void MaxPhaseCorrelationOptimizer ::ComputeOffset() { ImageConstPointer input = static_cast< ImageType * >(this->GetInput(0)); OffsetType offset; offset.Fill( 0 ); if (!input) return; m_MaxCalculator->SetImage( input ); try { m_MaxCalculator->ComputeMaximum(); } catch( ExceptionObject& err ) { throw err; } ImageType::IndexType index = m_MaxCalculator->GetIndexOfMaximum(); ImageType::SizeType size = input->GetLargestPossibleRegion().GetSize(); ImageType::SpacingType spacing = input->GetSpacing(); for (int i = 0; i < ImageDimension ; i++) { if ( index[i] > vcl_floor( size[i] / 2.0 ) ) { offset[i] = -1*(index[i] - size[i]) * spacing[i]; } else { offset[i] = -1*index[i] * spacing[i]; } } this->SetOffset( offset ); } /** * */ template < typename TRegistrationMethod > unsigned long MaxPhaseCorrelationOptimizer ::GetMTime() const { unsigned long mtime = Superclass::GetMTime(); unsigned long m; if (m_MaxCalculator) { m = m_MaxCalculator->GetMTime(); mtime = (m > mtime ? m : mtime); } return mtime; } } //end namespace itk #endif