Public Slots | Public Member Functions | Protected Attributes

QmitkDemonsRegistrationView Class Reference

Widget for deformable demons registration. More...

#include <QmitkDemonsRegistrationView.h>

Collaboration diagram for QmitkDemonsRegistrationView:
Collaboration graph
[legend]

List of all members.

Public Slots

void CalculateTransformation ()

Public Member Functions

 QmitkDemonsRegistrationView (QWidget *parent=0, Qt::WindowFlags f=0)
 ~QmitkDemonsRegistrationView ()
int GetNumberOfIterations ()
float GetStandardDeviation ()
void SetFixedNode (mitk::DataNode *fixedNode)
void SetMovingNode (mitk::DataNode *movingNode)
void UseHistogramMatching (bool useHM)
mitk::Image::Pointer GetResultImage ()
mitk::Image::Pointer GetResultDeformationfield ()

Protected Attributes

Ui::QmitkDemonsRegistrationViewControls m_Controls
mitk::DataNode::Pointer m_FixedNode
mitk::DataNode::Pointer m_MovingNode
mitk::Image::Pointer m_ResultImage
mitk::Image::Pointer m_ResultDeformationField

Detailed Description

Widget for deformable demons registration.

Displays options for demons registration.

Definition at line 31 of file QmitkDemonsRegistrationView.h.


Constructor & Destructor Documentation

QmitkDemonsRegistrationView::QmitkDemonsRegistrationView ( QWidget *  parent = 0,
Qt::WindowFlags  f = 0 
)

Definition at line 32 of file QmitkDemonsRegistrationView.cpp.

References m_Controls, Ui_QmitkDemonsRegistrationViewControls::m_Iterations, Ui_QmitkDemonsRegistrationViewControls::m_NumberOfHistogramLevels, Ui_QmitkDemonsRegistrationViewControls::m_NumberOfMatchPoints, Ui_QmitkDemonsRegistrationViewControls::m_StandardDeviation, and Ui_QmitkDemonsRegistrationViewControls::setupUi().

                                                                                          : QWidget( parent, f ),
m_FixedNode(NULL), m_MovingNode(NULL), m_ResultImage(NULL), m_ResultDeformationField(NULL)
{
  m_Controls.setupUi(parent);

  QValidator* validatorHistogramLevels = new QIntValidator(1, 20000000, this);
  m_Controls.m_NumberOfHistogramLevels->setValidator(validatorHistogramLevels);

  QValidator* validatorMatchPoints = new QIntValidator(1, 20000000, this);
  m_Controls.m_NumberOfMatchPoints->setValidator(validatorMatchPoints);

  QValidator* validatorIterations = new QIntValidator(1, 20000000, this);
  m_Controls.m_Iterations->setValidator(validatorIterations);

  QValidator* validatorStandardDeviation = new QDoubleValidator(0, 20000000, 2, this);
  m_Controls.m_StandardDeviation->setValidator(validatorStandardDeviation);
}
QmitkDemonsRegistrationView::~QmitkDemonsRegistrationView (  )

Definition at line 50 of file QmitkDemonsRegistrationView.cpp.

{
}

Member Function Documentation

void QmitkDemonsRegistrationView::CalculateTransformation (  ) [slot]

Definition at line 75 of file QmitkDemonsRegistrationView.cpp.

References mitk::ProgressBar::GetInstance(), mitk::SlicedData::GetLargestPossibleRegion(), mitk::ImportItkImage(), m_Controls, m_FixedNode, Ui_QmitkDemonsRegistrationViewControls::m_Iterations, m_MovingNode, Ui_QmitkDemonsRegistrationViewControls::m_NumberOfHistogramLevels, Ui_QmitkDemonsRegistrationViewControls::m_NumberOfMatchPoints, Ui_QmitkDemonsRegistrationViewControls::m_RegistrationSelection, m_ResultDeformationField, m_ResultImage, Ui_QmitkDemonsRegistrationViewControls::m_StandardDeviation, Ui_QmitkDemonsRegistrationViewControls::m_ThresholdAtMeanIntensity, Ui_QmitkDemonsRegistrationViewControls::m_UseHistogramMatching, mitk::SymmetricForcesDemonsRegistration::New(), mitk::HistogramMatching::New(), and mitk::DemonsRegistration::New().

Referenced by QmitkDeformableRegistrationView::Calculate().

{
  if (m_FixedNode.IsNotNull() && m_MovingNode.IsNotNull())
  {
    mitk::Image::Pointer fimage = dynamic_cast<mitk::Image*>(m_FixedNode->GetData());
    mitk::Image::Pointer mimage = dynamic_cast<mitk::Image*>(m_MovingNode->GetData());
    // workaround to ensure that fimage covers a bigger region than mimage
    mitk::Image::RegionType fimageRegion = fimage->GetLargestPossibleRegion();
    mitk::Image::RegionType mimageRegion = mimage->GetLargestPossibleRegion();
    if (!((fimageRegion.GetSize(0)>=mimageRegion.GetSize(0))&&(fimageRegion.GetSize(1)>=mimageRegion.GetSize(1))
        &&(fimageRegion.GetSize(2)>=mimageRegion.GetSize(2))))
    {
      QMessageBox::information(NULL,"Registration","Fixed image must be equal or bigger in size than moving image.");
      return;
    }
    if ( m_Controls.m_RegistrationSelection->currentIndex() == 0)
    {
      mitk::DemonsRegistration::Pointer registration = mitk::DemonsRegistration::New();
      registration->SetSaveDeformationField(false);
      registration->SetSaveResult(false);
      registration->SetReferenceImage(fimage);
      registration->SetNumberOfIterations(atoi(m_Controls.m_Iterations->text().toLatin1()));
      registration->SetStandardDeviation(atof(m_Controls.m_StandardDeviation->text().toLatin1()));
      if (m_Controls.m_UseHistogramMatching->isChecked())
      {
        mitk::HistogramMatching::Pointer histogramMatching = mitk::HistogramMatching::New();
        histogramMatching->SetReferenceImage(fimage);
        histogramMatching->SetInput(mimage);
        histogramMatching->SetNumberOfHistogramLevels(atoi(m_Controls.m_NumberOfHistogramLevels->text().toLatin1()));
        histogramMatching->SetNumberOfMatchPoints(atoi(m_Controls.m_NumberOfMatchPoints->text().toLatin1()));
        histogramMatching->SetThresholdAtMeanIntensity(m_Controls.m_ThresholdAtMeanIntensity->isChecked());
        histogramMatching->Update();
        mitk::Image::Pointer histimage = histogramMatching->GetOutput();
        if (histimage.IsNotNull())
        {
          registration->SetInput(histimage);
        }
        else
        {
          registration->SetInput(mimage);
        }
      }
      else
      {
        registration->SetInput(mimage);
      }
      try
      {
        registration->Update();
      }
      catch (itk::ExceptionObject& excpt)
      {
        QMessageBox::information( this, "Registration exception", excpt.GetDescription(), QMessageBox::Ok );
        mitk::ProgressBar::GetInstance()->Progress(4);
        return;
      }
      m_ResultImage = registration->GetOutput();
      typedef itk::Image<itk::Vector<float,3>, 3> VectorImageType;
      VectorImageType::Pointer deformationField = registration->GetDeformationField();
      m_ResultDeformationField = mitk::ImportItkImage(deformationField);
    }
    else if(m_Controls.m_RegistrationSelection->currentIndex() == 1)
    {
      mitk::SymmetricForcesDemonsRegistration::Pointer registration = mitk::SymmetricForcesDemonsRegistration::New();
      registration->SetSaveDeformationField(false);
      registration->SetSaveResult(false);
      registration->SetReferenceImage(fimage);
      registration->SetNumberOfIterations(atoi(m_Controls.m_Iterations->text().toLatin1()));
      registration->SetStandardDeviation(atof(m_Controls.m_StandardDeviation->text().toLatin1()));
      if (m_Controls.m_UseHistogramMatching->isChecked())
      {
        mitk::HistogramMatching::Pointer histogramMatching = mitk::HistogramMatching::New();
        histogramMatching->SetReferenceImage(fimage);
        histogramMatching->SetInput(mimage);
        histogramMatching->SetNumberOfHistogramLevels(atoi(m_Controls.m_NumberOfHistogramLevels->text().toLatin1()));
        histogramMatching->SetNumberOfMatchPoints(atoi(m_Controls.m_NumberOfMatchPoints->text().toLatin1()));
        histogramMatching->SetThresholdAtMeanIntensity(m_Controls.m_ThresholdAtMeanIntensity->isChecked());
        histogramMatching->Update();
        mitk::Image::Pointer histimage = histogramMatching->GetOutput();
        if (histimage.IsNotNull())
        {
          registration->SetInput(histimage);
        }
        else
        {
          registration->SetInput(mimage);
        }
      }
      else
      {
        registration->SetInput(mimage);
      }
      try
      {
        registration->Update();
      }
      catch (itk::ExceptionObject& excpt)
      {
        QMessageBox::information( this, "Registration exception", excpt.GetDescription(), QMessageBox::Ok );
        mitk::ProgressBar::GetInstance()->Progress(4);
        return;
      }
      m_ResultImage = registration->GetOutput();
      typedef itk::Image<itk::Vector<float,3>, 3> VectorImageType;
      VectorImageType::Pointer deformationField = registration->GetDeformationField();
      m_ResultDeformationField = mitk::ImportItkImage(deformationField);
    }
  }
}
int QmitkDemonsRegistrationView::GetNumberOfIterations (  )

Definition at line 55 of file QmitkDemonsRegistrationView.cpp.

References m_Controls, and Ui_QmitkDemonsRegistrationViewControls::m_Iterations.

{
  return atoi(m_Controls.m_Iterations->text().toLatin1());
}
mitk::Image::Pointer QmitkDemonsRegistrationView::GetResultDeformationfield (  )
mitk::Image::Pointer QmitkDemonsRegistrationView::GetResultImage (  )

Definition at line 65 of file QmitkDemonsRegistrationView.cpp.

References m_ResultImage.

Referenced by QmitkDeformableRegistrationView::Calculate().

{
  return m_ResultImage;
}
float QmitkDemonsRegistrationView::GetStandardDeviation (  )

Definition at line 60 of file QmitkDemonsRegistrationView.cpp.

References m_Controls, and Ui_QmitkDemonsRegistrationViewControls::m_StandardDeviation.

{
  return atof(m_Controls.m_StandardDeviation->text().toLatin1());
}
void QmitkDemonsRegistrationView::SetFixedNode ( mitk::DataNode fixedNode )

Definition at line 185 of file QmitkDemonsRegistrationView.cpp.

References m_FixedNode.

Referenced by QmitkDeformableRegistrationView::Calculate().

{
  m_FixedNode = fixedNode;
}
void QmitkDemonsRegistrationView::SetMovingNode ( mitk::DataNode movingNode )

Definition at line 190 of file QmitkDemonsRegistrationView.cpp.

References m_MovingNode.

Referenced by QmitkDeformableRegistrationView::Calculate().

{
  m_MovingNode = movingNode;
}
void QmitkDemonsRegistrationView::UseHistogramMatching ( bool  useHM )

Member Data Documentation

Definition at line 53 of file QmitkDemonsRegistrationView.h.

Referenced by CalculateTransformation(), and SetFixedNode().

Definition at line 54 of file QmitkDemonsRegistrationView.h.

Referenced by CalculateTransformation(), and SetMovingNode().

Definition at line 55 of file QmitkDemonsRegistrationView.h.

Referenced by CalculateTransformation(), and GetResultImage().


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