17 #ifndef __itkImageRegistrationMethod_txx
18 #define __itkImageRegistrationMethod_txx
29 template <
typename TFixedImage,
typename TMovingImage >
34 this->SetNumberOfRequiredOutputs( 1 );
47 m_InitialTransformParameters.Fill( 0.0f );
48 m_LastTransformParameters.Fill( 0.0f );
50 m_FixedImageRegionDefined =
false;
55 this->MakeOutput(0).GetPointer() );
59 #ifdef ITK_USE_OPTIMIZED_REGISTRATION_METHODS
60 this->SetNumberOfThreads( this->GetMultiThreader()->GetNumberOfThreads() );
62 this->SetNumberOfThreads( 1 );
63 this->GetMultiThreader()->SetNumberOfThreads( this->GetNumberOfThreads() );
71 template <
typename TFixedImage,
typename TMovingImage >
76 unsigned long mtime = Superclass::GetMTime();
85 m = m_Transform->GetMTime();
86 mtime = (m > mtime ? m : mtime);
91 m = m_Interpolator->GetMTime();
92 mtime = (m > mtime ? m : mtime);
97 m = m_Metric->GetMTime();
98 mtime = (m > mtime ? m : mtime);
103 m = m_Optimizer->GetMTime();
104 mtime = (m > mtime ? m : mtime);
109 m = m_FixedImage->GetMTime();
110 mtime = (m > mtime ? m : mtime);
115 m = m_MovingImage->GetMTime();
116 mtime = (m > mtime ? m : mtime);
126 template <
typename TFixedImage,
typename TMovingImage >
131 m_InitialTransformParameters = param;
140 template <
typename TFixedImage,
typename TMovingImage >
145 m_FixedImageRegion = region;
146 m_FixedImageRegionDefined =
true;
154 template <
typename TFixedImage,
typename TMovingImage >
162 itkExceptionMacro(<<
"FixedImage is not present");
167 itkExceptionMacro(<<
"MovingImage is not present");
172 itkExceptionMacro(<<
"Metric is not present" );
177 itkExceptionMacro(<<
"Optimizer is not present" );
182 itkExceptionMacro(<<
"Transform is not present");
191 transformOutput->
Set( m_Transform.GetPointer() );
194 if( !m_Interpolator )
196 itkExceptionMacro(<<
"Interpolator is not present");
200 #ifdef ITK_USE_OPTIMIZED_REGISTRATION_METHODS
201 this->GetMultiThreader()->SetNumberOfThreads( this->GetNumberOfThreads() );
202 this->m_Metric->SetNumberOfThreads( this->GetNumberOfThreads() );
204 m_Metric->SetMovingImage( m_MovingImage );
205 m_Metric->SetFixedImage( m_FixedImage );
206 m_Metric->SetTransform( m_Transform );
207 m_Metric->SetInterpolator( m_Interpolator );
209 if( m_FixedImageRegionDefined )
211 m_Metric->SetFixedImageRegion( m_FixedImageRegion );
215 m_Metric->SetFixedImageRegion( m_FixedImage->GetBufferedRegion() );
218 m_Metric->Initialize();
221 m_Optimizer->SetCostFunction( m_Metric );
224 if ( m_InitialTransformParameters.Size() !=
225 m_Transform->GetNumberOfParameters() )
227 itkExceptionMacro(<<
"Size mismatch between initial parameters and transform." <<
228 "Expected " << m_Transform->GetNumberOfParameters() <<
" parameters and received "
229 << m_InitialTransformParameters.Size() <<
" parameters");
232 m_Optimizer->SetInitialPosition( m_InitialTransformParameters );
240 template <
typename TFixedImage,
typename TMovingImage >
272 m_LastTransformParameters = empty;
278 this->StartOptimization();
286 template <
typename TFixedImage,
typename TMovingImage >
295 m_Optimizer->StartOptimization();
301 m_LastTransformParameters = m_Optimizer->GetCurrentPosition();
308 m_LastTransformParameters = m_Optimizer->GetCurrentPosition();
309 m_Transform->SetParameters( m_LastTransformParameters );
316 template <
typename TFixedImage,
typename TMovingImage >
321 Superclass::PrintSelf( os, indent );
322 os << indent <<
"Metric: " << m_Metric.GetPointer() << std::endl;
323 os << indent <<
"Optimizer: " << m_Optimizer.GetPointer() << std::endl;
324 os << indent <<
"Transform: " << m_Transform.GetPointer() << std::endl;
325 os << indent <<
"Interpolator: " << m_Interpolator.GetPointer() << std::endl;
326 os << indent <<
"Fixed Image: " << m_FixedImage.GetPointer() << std::endl;
327 os << indent <<
"Moving Image: " << m_MovingImage.GetPointer() << std::endl;
328 os << indent <<
"Fixed Image Region Defined: " << m_FixedImageRegionDefined << std::endl;
329 os << indent <<
"Fixed Image Region: " << m_FixedImageRegion << std::endl;
330 os << indent <<
"Initial Transform Parameters: " << m_InitialTransformParameters << std::endl;
331 os << indent <<
"Last Transform Parameters: " << m_LastTransformParameters << std::endl;
337 template <
typename TFixedImage,
typename TMovingImage >
342 this->StartRegistration();
349 template <
typename TFixedImage,
typename TMovingImage >
357 template <
typename TFixedImage,
typename TMovingImage >
365 return static_cast<DataObject*
>(TransformOutputType::New().GetPointer());
368 itkExceptionMacro(
"MakeOutput request for an output number larger than the expected number of outputs");
374 template <
typename TFixedImage,
typename TMovingImage >
379 itkDebugMacro(
"setting Fixed Image to " << fixedImage );
381 if (this->m_FixedImage.GetPointer() != fixedImage )
383 this->m_FixedImage = fixedImage;
387 const_cast< FixedImageType *>( fixedImage ) );
393 template <
typename TFixedImage,
typename TMovingImage >
398 itkDebugMacro(
"setting Moving Image to " << movingImage );
400 if (this->m_MovingImage.GetPointer() != movingImage )
402 this->m_MovingImage = movingImage;
406 const_cast< MovingImageType *>( movingImage ) );