Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes

mitk::ImageRegistrationMethod Class Reference
[Classes related to rigid registration]

Main class for the rigid registration pipeline. More...

#include <mitkImageRegistrationMethod.h>

Inheritance diagram for mitk::ImageRegistrationMethod:
Inheritance graph
[legend]
Collaboration diagram for mitk::ImageRegistrationMethod:
Collaboration graph
[legend]

List of all members.

Public Types

typedef
itk::SingleValuedNonLinearOptimizer 
OptimizerType
typedef
itk::ImageMaskSpatialObject< 3 > 
MaskType
typedef ImageRegistrationMethod Self
typedef ImageToImageFilter Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
void SetObserver (RigidRegistrationObserver::Pointer observer)
void SetInterpolator (int interpolator)
virtual void GenerateData ()
 A version of GenerateData() specific for image processing filters.
virtual void SetReferenceImage (Image::Pointer fixedImage)
virtual void SetFixedMask (Image::Pointer fixedMask)
virtual void SetMovingMask (Image::Pointer movingMask)
void SetOptimizerScales (itk::Array< double > scales)
void SetTransform (itk::Object::Pointer transform)
void SetMetric (itk::Object::Pointer metric)
void SetOptimizer (itk::Object::Pointer optimizer)

Static Public Member Functions

static Pointer New ()

Static Public Attributes

static const int LINEARINTERPOLATOR = 0
static const int NEARESTNEIGHBORINTERPOLATOR = 1

Protected Member Functions

 ImageRegistrationMethod ()
virtual ~ImageRegistrationMethod ()
template<typename TPixel , unsigned int VImageDimension>
void GenerateData2 (itk::Image< TPixel, VImageDimension > *itkImage1)
virtual void GenerateOutputInformation ()

Protected Attributes

RigidRegistrationObserver::Pointer m_Observer
int m_Interpolator
Image::Pointer m_ReferenceImage
Image::Pointer m_FixedMask
Image::Pointer m_MovingMask

Detailed Description

Main class for the rigid registration pipeline.

Author:
Daniel Stein

Definition at line 42 of file mitkImageRegistrationMethod.h.


Member Typedef Documentation

typedef itk::SmartPointer<const Self> mitk::ImageRegistrationMethod::ConstPointer

Definition at line 50 of file mitkImageRegistrationMethod.h.

typedef itk::ImageMaskSpatialObject< 3 > mitk::ImageRegistrationMethod::MaskType

Definition at line 48 of file mitkImageRegistrationMethod.h.

typedef itk::SingleValuedNonLinearOptimizer mitk::ImageRegistrationMethod::OptimizerType

Definition at line 47 of file mitkImageRegistrationMethod.h.

typedef itk::SmartPointer<Self> mitk::ImageRegistrationMethod::Pointer

Definition at line 50 of file mitkImageRegistrationMethod.h.

Definition at line 50 of file mitkImageRegistrationMethod.h.

Definition at line 50 of file mitkImageRegistrationMethod.h.


Constructor & Destructor Documentation

mitk::ImageRegistrationMethod::ImageRegistrationMethod (  ) [protected]

Definition at line 21 of file mitkImageRegistrationMethod.cpp.

References mitk::Image::New().

               {

  ImageRegistrationMethod::ImageRegistrationMethod() 
  : m_Interpolator(0)
  {
    m_ReferenceImage = Image::New();
mitk::ImageRegistrationMethod::~ImageRegistrationMethod (  ) [protected, virtual]

Definition at line 28 of file mitkImageRegistrationMethod.cpp.

  {

Member Function Documentation

void mitk::ImageRegistrationMethod::GenerateData (  ) [virtual]

A version of GenerateData() specific for image processing filters.

This implementation will split the processing across multiple threads. The buffer is allocated by this method. Then the BeforeThreadedGenerateData() method is called (if provided). Then, a series of threads are spawned each calling ThreadedGenerateData(). After all the threads have completed processing, the AfterThreadedGenerateData() method is called (if provided). If an image processing filter cannot be threaded, the filter should provide an implementation of GenerateData(). That implementation is responsible for allocating the output buffer. If a filter an be threaded, it should NOT provide a GenerateData() method but should provide a ThreadedGenerateData() instead.

See also:
ThreadedGenerateData()

Reimplemented from mitk::ImageSource.

Definition at line 33 of file mitkImageRegistrationMethod.cpp.

  {
    if (this->GetInput())
    {
      AccessByItk(this->GetInput(), GenerateData2);
template<typename TPixel , unsigned int VImageDimension>
void mitk::ImageRegistrationMethod::GenerateData2 ( itk::Image< TPixel, VImageDimension > *  itkImage1 ) [protected]

Definition at line 39 of file mitkImageRegistrationMethod.txx.

References mitk::CastToItkImage(), LINEARINTERPOLATOR, m_FixedMask, m_Interpolator, m_MovingMask, m_Observer, m_ReferenceImage, NEARESTNEIGHBORINTERPOLATOR, and New().

  {    
    //convert mitk masks to itk masks
    typedef typename itk::Image<TPixel, VImageDimension> FixedImageType;
    typedef typename itk::Image<TPixel, VImageDimension> MovingImageType;      
    typedef typename itk::Image< unsigned char, VImageDimension >  MaskImageType;
    typedef typename itk::ImageMaskSpatialObject< VImageDimension > ImageMaskType;
    typename ImageMaskType::Pointer movingImageMask;
    if(m_MovingMask.IsNotNull())
    {
      typename MovingImageType::Pointer movingMask = MovingImageType::New();
      mitk::CastToItkImage(m_MovingMask, movingMask); 
      typename itk::CastImageFilter<MovingImageType, MaskImageType>::Pointer maskImageCaster = itk::CastImageFilter<MovingImageType, MaskImageType>::New();
      maskImageCaster->SetInput(movingMask);
      maskImageCaster->UpdateLargestPossibleRegion();
      movingImageMask = ImageMaskType::New();
      movingImageMask->SetImage(maskImageCaster->GetOutput());          
    }
    typename ImageMaskType::Pointer fixedImageMask;
    if(m_FixedMask.IsNotNull())
    {
      typename FixedImageType::Pointer fixedMask = FixedImageType::New();  
      mitk::CastToItkImage(m_FixedMask, fixedMask); 
      typename itk::CastImageFilter<FixedImageType, MaskImageType>::Pointer maskImageCaster = itk::CastImageFilter<FixedImageType, MaskImageType>::New();
      maskImageCaster->SetInput(fixedMask);
      maskImageCaster->UpdateLargestPossibleRegion();   
      fixedImageMask = ImageMaskType::New();
      fixedImageMask->SetImage(maskImageCaster->GetOutput());           
    }     
    // typedefs
    typedef typename itk::Image<TPixel, VImageDimension> FixedImageType;
    typedef typename itk::Image<TPixel, VImageDimension> MovingImageType;
    typedef typename itk::LinearInterpolateImageFunction<MovingImageType, double> InterpolatorType;
    typedef itk::NearestNeighborInterpolateImageFunction<MovingImageType, double> InterpolatorType2;
    typedef typename itk::ImageRegistrationMethod<FixedImageType, MovingImageType> RegistrationType;
    typedef typename itk::Transform< double, VImageDimension, VImageDimension >    TransformType;
    typedef typename TransformType::Pointer                TransformPointer;
    typedef typename itk::ImageToImageMetric<FixedImageType, MovingImageType>    MetricType;
    typedef typename MetricType::Pointer                MetricPointer;
    typedef typename itk::SingleValuedNonLinearOptimizer OptimizerType;
    // the fixed and the moving image
    typename FixedImageType::Pointer fixedImage = FixedImageType::New();
    typename MovingImageType::Pointer movingImage = itkImage1;
    mitk::CastToItkImage(m_ReferenceImage, fixedImage); 
    // the metric
    MetricPointer metric = dynamic_cast<MetricType*>(m_Metric.GetPointer());
    if(movingImageMask.IsNotNull())
      metric->SetMovingImageMask(movingImageMask);
    if(fixedImageMask.IsNotNull())
      metric->SetFixedImageMask(fixedImageMask);
    // the transform
    TransformPointer transform = dynamic_cast<TransformType*>(m_Transform.GetPointer());
    // the optimizer
    typename OptimizerType::Pointer optimizer = dynamic_cast<OptimizerType*>(m_Optimizer.GetPointer());
    // optimizer scales
    if (m_OptimizerScales.Size() != 0)
    {
      typename OptimizerType::ScalesType scales( transform->GetNumberOfParameters() );
      for (unsigned int i = 0; i < scales.Size(); i++)
      {
        scales[i] = m_OptimizerScales[i];
      }
      optimizer->SetScales( scales );
    }
    // the registration method
    typename RegistrationType::Pointer registration = RegistrationType::New();
    registration->SetMetric(metric);
    registration->SetOptimizer(optimizer);
    registration->SetTransform(transform);
    registration->SetFixedImage(fixedImage);
    registration->SetMovingImage(movingImage);
    registration->SetFixedImageRegion(fixedImage->GetBufferedRegion());
//     if(transFac->GetTransformParameters()->GetInitialParameters().size())
//     {
//       registration->SetInitialTransformParameters( transFac->GetTransformParameters()->GetInitialParameters() );
//     }
//     else
//     {
      itk::Array<double> zeroInitial;
      zeroInitial.set_size(transform->GetNumberOfParameters());
      zeroInitial.fill(0.0);
      if (zeroInitial.size() >= 1)
      {
        zeroInitial[0] = 1.0;
      }
      if (zeroInitial.size() >= 5)
      {
        zeroInitial[4] = 1.0;
      }
      if (zeroInitial.size() >= 9)
      {
        zeroInitial[8] = 1.0;
      }
      registration->SetInitialTransformParameters( zeroInitial );   
      optimizer->SetInitialPosition( zeroInitial );
//    }
    if (m_Interpolator == LINEARINTERPOLATOR)
    {
      typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
      registration->SetInterpolator(interpolator);
    }
    else if (m_Interpolator == NEARESTNEIGHBORINTERPOLATOR)
    {
      typename InterpolatorType2::Pointer interpolator = InterpolatorType2::New();
      registration->SetInterpolator(interpolator);
    }
    // registering command observer with the optimizer
    if (m_Observer.IsNotNull())
    {
      m_Observer->AddStepsToDo(20);
      optimizer->AddObserver(itk::AnyEvent(), m_Observer);
      registration->AddObserver(itk::AnyEvent(), m_Observer);
      transform->AddObserver(itk::AnyEvent(), m_Observer);
    }
    registration->Update();
    if (m_Observer.IsNotNull())
    {
      optimizer->RemoveAllObservers();
      registration->RemoveAllObservers();
      transform->RemoveAllObservers();
      m_Observer->SetRemainingProgress(15);
    }
    if (m_Observer.IsNotNull())
    {
      m_Observer->SetRemainingProgress(5);
    }
  } 
virtual void mitk::ImageRegistrationMethod::GenerateOutputInformation ( void   ) [inline, protected, virtual]

Definition at line 90 of file mitkImageRegistrationMethod.h.

{};
virtual const char* mitk::ImageRegistrationMethod::GetClassName (  ) const [virtual]
static Pointer mitk::ImageRegistrationMethod::New (  ) [static]

Method for creation through the object factory.

Reimplemented from mitk::ImageToImageFilter.

Referenced by QmitkRigidRegistrationSelectorView::CalculateTransformation(), and GenerateData2().

void mitk::ImageRegistrationMethod::SetFixedMask ( Image::Pointer  fixedMask ) [virtual]

Definition at line 65 of file mitkImageRegistrationMethod.cpp.

  {
    m_FixedMask = FixedMask;
    SetNthInput(4, m_FixedMask);
void mitk::ImageRegistrationMethod::SetInterpolator ( int  interpolator )

Definition at line 46 of file mitkImageRegistrationMethod.cpp.

  {
void mitk::ImageRegistrationMethod::SetMetric ( itk::Object::Pointer  metric )

Definition at line 77 of file mitkImageRegistrationMethod.cpp.

  {
void mitk::ImageRegistrationMethod::SetMovingMask ( Image::Pointer  movingMask ) [virtual]

Definition at line 58 of file mitkImageRegistrationMethod.cpp.

  {
    m_MovingMask = movingMask;
    SetNthInput(3, m_MovingMask);
void mitk::ImageRegistrationMethod::SetObserver ( RigidRegistrationObserver::Pointer  observer )

Definition at line 41 of file mitkImageRegistrationMethod.cpp.

  {
void mitk::ImageRegistrationMethod::SetOptimizer ( itk::Object::Pointer  optimizer )

Definition at line 82 of file mitkImageRegistrationMethod.cpp.

  {
void mitk::ImageRegistrationMethod::SetOptimizerScales ( itk::Array< double >  scales )

Definition at line 87 of file mitkImageRegistrationMethod.cpp.

  {
void mitk::ImageRegistrationMethod::SetReferenceImage ( Image::Pointer  fixedImage ) [virtual]

Definition at line 51 of file mitkImageRegistrationMethod.cpp.

  {
    m_ReferenceImage = fixedImage;
    SetNthInput(1, m_ReferenceImage);
void mitk::ImageRegistrationMethod::SetTransform ( itk::Object::Pointer  transform )

Definition at line 72 of file mitkImageRegistrationMethod.cpp.

  {

Member Data Documentation

Definition at line 54 of file mitkImageRegistrationMethod.h.

Referenced by GenerateData2().

Definition at line 87 of file mitkImageRegistrationMethod.h.

Referenced by GenerateData2().

Definition at line 85 of file mitkImageRegistrationMethod.h.

Referenced by GenerateData2().

Definition at line 88 of file mitkImageRegistrationMethod.h.

Referenced by GenerateData2().

Definition at line 84 of file mitkImageRegistrationMethod.h.

Referenced by GenerateData2().

Definition at line 86 of file mitkImageRegistrationMethod.h.

Referenced by GenerateData2().

Definition at line 55 of file mitkImageRegistrationMethod.h.

Referenced by GenerateData2().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines