Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkCenteredSimilarity2DTransformView.h"
00019 #include "mitkImageAccessByItk.h"
00020 #include <itkCenteredSimilarity2DTransform.h>
00021 #include <itkCenteredTransformInitializer.h>
00022 #include <QValidator>
00023
00024 QmitkCenteredSimilarity2DTransformView::QmitkCenteredSimilarity2DTransformView(QWidget* parent, Qt::WindowFlags f ) : QmitkRigidRegistrationTransformsGUIBase(parent, f),
00025 m_CenterX(0), m_CenterY(0), m_CenterZ(0)
00026 {
00027 }
00028
00029 QmitkCenteredSimilarity2DTransformView::~QmitkCenteredSimilarity2DTransformView()
00030 {
00031 }
00032
00033 itk::Object::Pointer QmitkCenteredSimilarity2DTransformView::GetTransform()
00034 {
00035 if (m_FixedImage.IsNotNull())
00036 {
00037 AccessByItk(m_FixedImage, GetTransform2);
00038 return m_TransformObject;
00039 }
00040 return NULL;
00041 }
00042
00043 template < class TPixelType, unsigned int VImageDimension >
00044 itk::Object::Pointer QmitkCenteredSimilarity2DTransformView::GetTransform2(itk::Image<TPixelType, VImageDimension>* )
00045 {
00046 if (VImageDimension == 2)
00047 {
00048 typedef typename itk::Image< TPixelType, 2 > FixedImage2DType;
00049 typedef typename itk::Image< TPixelType, 2 > MovingImage2DType;
00050 typename FixedImage2DType::Pointer fixedImage2D;
00051 mitk::CastToItkImage(m_FixedImage, fixedImage2D);
00052 typename MovingImage2DType::Pointer movingImage2D;
00053 mitk::CastToItkImage(m_MovingImage, movingImage2D);
00054
00055 typename itk::CenteredSimilarity2DTransform< double >::Pointer transformPointer = itk::CenteredSimilarity2DTransform< double >::New();
00056 transformPointer->SetIdentity();
00057 if (m_Controls.m_CenterForInitializerCenteredSimilarity2D->isChecked())
00058 {
00059 typedef typename itk::CenteredSimilarity2DTransform< double > CenteredSimilarity2DTransformType;
00060 typedef typename itk::CenteredTransformInitializer<CenteredSimilarity2DTransformType, FixedImage2DType, MovingImage2DType> TransformInitializerType;
00061 typename TransformInitializerType::Pointer transformInitializer = TransformInitializerType::New();
00062 transformInitializer->SetFixedImage( fixedImage2D );
00063 transformInitializer->SetMovingImage( movingImage2D );
00064 transformInitializer->SetTransform( transformPointer );
00065 if (m_Controls.m_MomentsCenteredSimilarity2D->isChecked())
00066 {
00067 transformInitializer->MomentsOn();
00068 }
00069 else
00070 {
00071 transformInitializer->GeometryOn();
00072 }
00073 transformInitializer->InitializeTransform();
00074 }
00075 transformPointer->SetScale( m_Controls.m_InitialScaleCenteredSimilarity2D->text().toFloat() );
00076 transformPointer->SetAngle( m_Controls.m_AngleCenteredSimilarity2D->text().toFloat() );
00077 m_CenterX = transformPointer->GetCenter()[0];
00078 m_CenterY = transformPointer->GetCenter()[1];
00079 m_TransformObject = transformPointer.GetPointer();
00080 return transformPointer.GetPointer();
00081 }
00082 return NULL;
00083 }
00084
00085 itk::Array<double> QmitkCenteredSimilarity2DTransformView::GetTransformParameters()
00086 {
00087 itk::Array<double> transformValues;
00088 transformValues.SetSize(11);
00089 transformValues.fill(0);
00090 transformValues[0] = m_Controls.m_UseOptimizerScalesCenteredSimilarity2D->isChecked();
00091 transformValues[1] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale1->text().toDouble();
00092 transformValues[2] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale2->text().toDouble();
00093 transformValues[3] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale3->text().toDouble();
00094 transformValues[4] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale4->text().toDouble();
00095 transformValues[5] = m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationX->text().toDouble();
00096 transformValues[6] = m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationY->text().toDouble();
00097 transformValues[7] = m_Controls.m_InitialScaleCenteredSimilarity2D->text().toFloat();
00098 transformValues[8] = m_Controls.m_AngleCenteredSimilarity2D->text().toFloat();
00099 transformValues[9] = m_Controls.m_CenterForInitializerCenteredSimilarity2D->isChecked();
00100 transformValues[10] = m_Controls.m_MomentsCenteredSimilarity2D->isChecked();
00101 return transformValues;
00102 }
00103
00104 void QmitkCenteredSimilarity2DTransformView::SetTransformParameters(itk::Array<double> transformValues)
00105 {
00106 m_Controls.m_UseOptimizerScalesCenteredSimilarity2D->setChecked(transformValues[0]);
00107 m_Controls.m_ScalesCenteredSimilarity2DTransformScale1->setText(QString::number(transformValues[1]));
00108 m_Controls.m_ScalesCenteredSimilarity2DTransformScale2->setText(QString::number(transformValues[2]));
00109 m_Controls.m_ScalesCenteredSimilarity2DTransformScale3->setText(QString::number(transformValues[3]));
00110 m_Controls.m_ScalesCenteredSimilarity2DTransformScale4->setText(QString::number(transformValues[4]));
00111 m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationX->setText(QString::number(transformValues[5]));
00112 m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationY->setText(QString::number(transformValues[6]));
00113 m_Controls.m_InitialScaleCenteredSimilarity2D->setText(QString::number(transformValues[7]));
00114 m_Controls.m_AngleCenteredSimilarity2D->setText(QString::number(transformValues[8]));
00115 m_Controls.m_CenterForInitializerCenteredSimilarity2D->setChecked(transformValues[9]);
00116 m_Controls.m_MomentsCenteredSimilarity2D->setChecked(transformValues[10]);
00117 m_Controls.m_GeometryCenteredSimilarity2D->setChecked(!transformValues[10]);
00118 }
00119
00120 QString QmitkCenteredSimilarity2DTransformView::GetName()
00121 {
00122 return "CenteredSimilarity2D";
00123 }
00124
00125 void QmitkCenteredSimilarity2DTransformView::SetupUI(QWidget* parent)
00126 {
00127 m_Controls.setupUi(parent);
00128 QValidator* validatorLineEditInputFloat = new QDoubleValidator(0, 20000000, 8, this);
00129 m_Controls.m_ScalesCenteredSimilarity2DTransformScale1->setValidator(validatorLineEditInputFloat);
00130 m_Controls.m_ScalesCenteredSimilarity2DTransformScale2->setValidator(validatorLineEditInputFloat);
00131 m_Controls.m_ScalesCenteredSimilarity2DTransformScale3->setValidator(validatorLineEditInputFloat);
00132 m_Controls.m_ScalesCenteredSimilarity2DTransformScale4->setValidator(validatorLineEditInputFloat);
00133 m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationX->setValidator(validatorLineEditInputFloat);
00134 m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationY->setValidator(validatorLineEditInputFloat);
00135 }
00136
00137 itk::Array<double> QmitkCenteredSimilarity2DTransformView::GetScales()
00138 {
00139 itk::Array<double> scales;
00140 scales.SetSize(6);
00141 scales.Fill(1.0);
00142 if (m_Controls.m_UseOptimizerScalesCenteredSimilarity2D->isChecked())
00143 {
00144 scales[0] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale1->text().toDouble();
00145 scales[1] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale2->text().toDouble();
00146 scales[2] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale3->text().toDouble();
00147 scales[3] = m_Controls.m_ScalesCenteredSimilarity2DTransformScale4->text().toDouble();
00148 scales[4] = m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationX->text().toDouble();
00149 scales[5] = m_Controls.m_ScalesCenteredSimilarity2DTransformScaleTranslationY->text().toDouble();
00150 }
00151 return scales;
00152 }
00153
00154 vtkTransform* QmitkCenteredSimilarity2DTransformView::Transform(vtkMatrix4x4* , vtkTransform* vtktransform, itk::Array<double> transformParams)
00155 {
00156 if (m_MovingImage.IsNotNull())
00157 {
00158 mitk::ScalarType angle = transformParams[1] * 45.0 / atan(1.0);
00159 vtktransform->PostMultiply();
00160 vtktransform->Translate(-transformParams[2], -transformParams[3], 0);
00161 vtktransform->Scale(transformParams[0], transformParams[0], 1);
00162 vtktransform->RotateZ(angle);
00163 vtktransform->Translate(transformParams[2], transformParams[3], 0);
00164 vtktransform->Translate(transformParams[4], transformParams[5], 0);
00165 vtktransform->PreMultiply();
00166 }
00167 return vtktransform;
00168 }
00169
00170 int QmitkCenteredSimilarity2DTransformView::GetNumberOfTransformParameters()
00171 {
00172 if (m_FixedImage.IsNotNull())
00173 {
00174 if (m_FixedImage->GetDimension() == 2)
00175 return 6;
00176 else
00177 return 0;
00178 }
00179 else
00180 return 0;
00181 }