17 #ifndef __itkPointSetToPointSetRegistrationMethod_txx
18 #define __itkPointSetToPointSetRegistrationMethod_txx
29 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
33 this->SetNumberOfRequiredOutputs( 1 );
45 m_InitialTransformParameters.Fill( 0.0f );
46 m_LastTransformParameters.Fill( 0.0f );
50 this->MakeOutput(0).GetPointer() );
59 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
64 m_InitialTransformParameters = param;
71 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
77 if( !m_FixedPointSet )
79 itkExceptionMacro(<<
"FixedPointSet is not present");
82 if( !m_MovingPointSet )
84 itkExceptionMacro(<<
"MovingPointSet is not present");
89 itkExceptionMacro(<<
"Metric is not present" );
94 itkExceptionMacro(<<
"Optimizer is not present" );
99 itkExceptionMacro(<<
"Transform is not present");
103 m_Metric->SetMovingPointSet( m_MovingPointSet );
104 m_Metric->SetFixedPointSet( m_FixedPointSet );
105 m_Metric->SetTransform( m_Transform );
107 m_Metric->Initialize();
110 m_Optimizer->SetCostFunction( m_Metric );
113 if ( m_InitialTransformParameters.Size() !=
114 m_Transform->GetNumberOfParameters() )
116 itkExceptionMacro(<<
"Size mismatch between initial parameter and transform");
119 m_Optimizer->SetInitialPosition( m_InitialTransformParameters );
127 transformOutput->
Set( m_Transform.GetPointer() );
134 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
165 m_LastTransformParameters.Fill( 0.0f );
175 m_Optimizer->StartOptimization();
181 m_LastTransformParameters = m_Optimizer->GetCurrentPosition();
189 m_LastTransformParameters = m_Optimizer->GetCurrentPosition();
191 m_Transform->SetParameters( m_LastTransformParameters );
199 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
204 Superclass::PrintSelf( os, indent );
205 os << indent <<
"Metric: " << m_Metric.GetPointer() << std::endl;
206 os << indent <<
"Optimizer: " << m_Optimizer.GetPointer() << std::endl;
207 os << indent <<
"Transform: " << m_Transform.GetPointer() << std::endl;
208 os << indent <<
"Fixed PointSet: " << m_FixedPointSet.GetPointer() << std::endl;
209 os << indent <<
"Moving PointSet: " << m_MovingPointSet.GetPointer() << std::endl;
210 os << indent <<
"Initial Transform Parameters: " << m_InitialTransformParameters << std::endl;
211 os << indent <<
"Last Transform Parameters: " << m_LastTransformParameters << std::endl;
215 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
220 this->StartRegistration();
226 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
235 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
243 return static_cast<DataObject*
>(TransformOutputType::New().GetPointer());
246 itkExceptionMacro(
"MakeOutput request for an output number larger than the expected number of outputs");
255 template <
typename TFixedPo
intSet,
typename TMovingPo
intSet >
260 unsigned long mtime = Superclass::GetMTime();
269 m = m_Transform->GetMTime();
270 mtime = (m > mtime ? m : mtime);
275 m = m_Metric->GetMTime();
276 mtime = (m > mtime ? m : mtime);
281 m = m_Optimizer->GetMTime();
282 mtime = (m > mtime ? m : mtime);
287 m = m_FixedPointSet->GetMTime();
288 mtime = (m > mtime ? m : mtime);
291 if (m_MovingPointSet)
293 m = m_MovingPointSet->GetMTime();
294 mtime = (m > mtime ? m : mtime);