Main class for the rigid registration pipeline. More...
#include <mitkImageRegistrationMethod.h>
Public Types | |
typedef itk::SingleValuedNonLinearOptimizer | OptimizerType |
typedef itk::ImageMaskSpatialObject< 3 > | MaskType |
typedef ImageRegistrationMethod | Self |
typedef ImageToImageFilter | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
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 |
Main class for the rigid registration pipeline.
Definition at line 42 of file mitkImageRegistrationMethod.h.
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.
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.
{
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.
Reimplemented from mitk::ImageSource.
Definition at line 33 of file mitkImageRegistrationMethod.cpp.
{ if (this->GetInput()) { AccessByItk(this->GetInput(), GenerateData2);
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.
{
const int mitk::ImageRegistrationMethod::LINEARINTERPOLATOR = 0 [static] |
Definition at line 54 of file mitkImageRegistrationMethod.h.
Referenced by GenerateData2().
Definition at line 87 of file mitkImageRegistrationMethod.h.
Referenced by GenerateData2().
int mitk::ImageRegistrationMethod::m_Interpolator [protected] |
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().
const int mitk::ImageRegistrationMethod::NEARESTNEIGHBORINTERPOLATOR = 1 [static] |
Definition at line 55 of file mitkImageRegistrationMethod.h.
Referenced by GenerateData2().