17 #ifndef __itkImageToSpatialObjectRegistrationMethod_txx
18 #define __itkImageToSpatialObjectRegistrationMethod_txx
26 template <
typename TFixedImage,
typename TMovingSpatialObject >
30 this->SetNumberOfRequiredOutputs( 1 );
33 m_MovingSpatialObject = 0;
43 m_InitialTransformParameters.Fill( 0.0f );
44 m_LastTransformParameters.Fill( 0.0f );
49 this->MakeOutput(0).GetPointer() );
56 template <
typename TFixedImage,
typename TMovingSpatialObject >
64 itkExceptionMacro(<<
"FixedImage is not present");
67 if( !m_MovingSpatialObject )
69 itkExceptionMacro(<<
"MovingSpatialObject is not present");
74 itkExceptionMacro(<<
"Metric is not present" );
79 itkExceptionMacro(<<
"Optimizer is not present" );
84 itkExceptionMacro(<<
"Transform is not present");
89 itkExceptionMacro(<<
"Interpolator is not present");
92 m_Interpolator->SetInputImage( m_FixedImage );
95 m_Metric->SetFixedImage( m_FixedImage );
96 m_Metric->SetMovingSpatialObject( m_MovingSpatialObject );
97 m_Metric->SetTransform( m_Transform );
98 m_Metric->SetInterpolator( m_Interpolator );
99 m_Metric->Initialize();
102 m_Optimizer->SetCostFunction( m_Metric );
105 if ( m_InitialTransformParameters.Size() != m_Metric->GetNumberOfParameters() )
107 itkWarningMacro( <<
" WARNING : Size mismatch between initial parameter and transform" );
108 itkWarningMacro( <<
"Resizing m_InitialTransformParameters to " << m_Transform->GetNumberOfParameters() );
109 m_InitialTransformParameters.set_size(m_Transform->GetNumberOfParameters());
110 m_InitialTransformParameters.Fill( 0.0f );
113 if ( m_LastTransformParameters.Size() != m_Transform->GetNumberOfParameters() )
115 m_LastTransformParameters.set_size(m_Transform->GetNumberOfParameters());
116 m_LastTransformParameters.Fill( 0.0f );
119 m_Optimizer->SetInitialPosition( m_InitialTransformParameters );
127 transformOutput->
Set( m_Transform.GetPointer() );
132 template <
typename TFixedImage,
typename TMovingSpatialObject >
168 m_Optimizer->StartOptimization();
174 m_LastTransformParameters = m_Optimizer->GetCurrentPosition();
180 m_LastTransformParameters = m_Optimizer->GetCurrentPosition();
187 template <
typename TFixedImage,
typename TMovingSpatialObject >
192 Superclass::PrintSelf( os, indent );
193 os << indent <<
"Metric: " << m_Metric.GetPointer() << std::endl;
194 os << indent <<
"Optimizer: " << m_Optimizer.GetPointer() << std::endl;
195 os << indent <<
"Transform: " << m_Transform.GetPointer() << std::endl;
196 os << indent <<
"Interpolator: " << m_Interpolator.GetPointer() << std::endl;
197 os << indent <<
"Fixed Image: " << m_FixedImage.GetPointer() << std::endl;
198 os << indent <<
"Moving SpatialObject: " << m_MovingSpatialObject.GetPointer() << std::endl;
199 os << indent <<
"Initial Transform Parameters: " << m_InitialTransformParameters << std::endl;
200 os << indent <<
"Last Transform Parameters: " << m_LastTransformParameters << std::endl;
207 template <
typename TFixedImage,
typename TMovingSpatialObject >
212 this->StartRegistration();
218 template <
typename TFixedImage,
typename TMovingSpatialObject >
226 template <
typename TFixedImage,
typename TMovingSpatialObject >
234 return static_cast<DataObject*
>(TransformOutputType::New().GetPointer());
237 itkExceptionMacro(
"MakeOutput request for an output number larger than the expected number of outputs");
246 template <
typename TFixedImage,
typename TMovingSpatialObject >
251 unsigned long mtime = Superclass::GetMTime();
260 m = m_Transform->GetMTime();
261 mtime = (m > mtime ? m : mtime);
266 m = m_Interpolator->GetMTime();
267 mtime = (m > mtime ? m : mtime);
272 m = m_Metric->GetMTime();
273 mtime = (m > mtime ? m : mtime);
278 m = m_Optimizer->GetMTime();
279 mtime = (m > mtime ? m : mtime);
284 m = m_FixedImage->GetMTime();
285 mtime = (m > mtime ? m : mtime);
288 if (m_MovingSpatialObject)
290 m = m_MovingSpatialObject->GetMTime();
291 mtime = (m > mtime ? m : mtime);