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 "QmitkEuler3DTransformView.h"
00019 #include "mitkImageAccessByItk.h"
00020 #include <itkEuler3DTransform.h>
00021 #include <itkCenteredTransformInitializer.h>
00022 #include <QValidator>
00023
00024 QmitkEuler3DTransformView::QmitkEuler3DTransformView(QWidget* parent, Qt::WindowFlags f ) : QmitkRigidRegistrationTransformsGUIBase(parent, f),
00025 m_CenterX(0), m_CenterY(0), m_CenterZ(0)
00026 {
00027 }
00028
00029 QmitkEuler3DTransformView::~QmitkEuler3DTransformView()
00030 {
00031 }
00032
00033 itk::Object::Pointer QmitkEuler3DTransformView::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 QmitkEuler3DTransformView::GetTransform2(itk::Image<TPixelType, VImageDimension>* )
00045 {
00046 if (VImageDimension == 3)
00047 {
00048 typename itk::Euler3DTransform< double >::Pointer transformPointer = itk::Euler3DTransform< double >::New();
00049 transformPointer->SetIdentity();
00050 m_CenterX = transformPointer->GetCenter()[0];
00051 m_CenterY = transformPointer->GetCenter()[1];
00052 m_CenterZ = transformPointer->GetCenter()[2];
00053 m_TransformObject = transformPointer.GetPointer();
00054 return transformPointer.GetPointer();
00055 }
00056 return NULL;
00057 }
00058
00059 itk::Array<double> QmitkEuler3DTransformView::GetTransformParameters()
00060 {
00061 itk::Array<double> transformValues;
00062 transformValues.SetSize(9);
00063 transformValues.fill(0);
00064 transformValues[0] = m_Controls.m_UseOptimizerScalesEuler3D->isChecked();
00065 transformValues[1] = m_Controls.m_ScalesEuler3DTransformScale1->text().toDouble();
00066 transformValues[2] = m_Controls.m_ScalesEuler3DTransformScale2->text().toDouble();
00067 transformValues[3] = m_Controls.m_ScalesEuler3DTransformScale3->text().toDouble();
00068 transformValues[4] = m_Controls.m_ScalesEuler3DTransformScaleTranslationX->text().toDouble();
00069 transformValues[5] = m_Controls.m_ScalesEuler3DTransformScaleTranslationY->text().toDouble();
00070 transformValues[6] = m_Controls.m_ScalesEuler3DTransformScaleTranslationZ->text().toDouble();
00071 transformValues[7] = m_Controls.m_CenterForInitializerEuler3D->isChecked();
00072 transformValues[8] = m_Controls.m_MomentsEuler3D->isChecked();
00073 return transformValues;
00074 }
00075
00076 void QmitkEuler3DTransformView::SetTransformParameters(itk::Array<double> transformValues)
00077 {
00078 m_Controls.m_UseOptimizerScalesEuler3D->setChecked(transformValues[0]);
00079 m_Controls.m_ScalesEuler3DTransformScale1->setText(QString::number(transformValues[1]));
00080 m_Controls.m_ScalesEuler3DTransformScale2->setText(QString::number(transformValues[2]));
00081 m_Controls.m_ScalesEuler3DTransformScale3->setText(QString::number(transformValues[3]));
00082 m_Controls.m_ScalesEuler3DTransformScaleTranslationX->setText(QString::number(transformValues[4]));
00083 m_Controls.m_ScalesEuler3DTransformScaleTranslationY->setText(QString::number(transformValues[5]));
00084 m_Controls.m_ScalesEuler3DTransformScaleTranslationZ->setText(QString::number(transformValues[6]));
00085 m_Controls.m_CenterForInitializerEuler3D->setChecked(transformValues[7]);
00086 m_Controls.m_MomentsEuler3D->setChecked(transformValues[8]);
00087 m_Controls.m_GeometryEuler3D->setChecked(!transformValues[8]);
00088 }
00089
00090 QString QmitkEuler3DTransformView::GetName()
00091 {
00092 return "Euler3D";
00093 }
00094
00095 void QmitkEuler3DTransformView::SetupUI(QWidget* parent)
00096 {
00097 m_Controls.setupUi(parent);
00098 QValidator* validatorLineEditInputFloat = new QDoubleValidator(0, 20000000, 8, this);
00099 m_Controls.m_ScalesEuler3DTransformScale1->setValidator(validatorLineEditInputFloat);
00100 m_Controls.m_ScalesEuler3DTransformScale2->setValidator(validatorLineEditInputFloat);
00101 m_Controls.m_ScalesEuler3DTransformScale3->setValidator(validatorLineEditInputFloat);
00102 m_Controls.m_ScalesEuler3DTransformScaleTranslationX->setValidator(validatorLineEditInputFloat);
00103 m_Controls.m_ScalesEuler3DTransformScaleTranslationY->setValidator(validatorLineEditInputFloat);
00104 m_Controls.m_ScalesEuler3DTransformScaleTranslationZ->setValidator(validatorLineEditInputFloat);
00105 }
00106
00107 itk::Array<double> QmitkEuler3DTransformView::GetScales()
00108 {
00109 itk::Array<double> scales;
00110 scales.SetSize(6);
00111 scales.Fill(1.0);
00112 if (m_Controls.m_UseOptimizerScalesEuler3D->isChecked())
00113 {
00114 scales[0] = m_Controls.m_ScalesEuler3DTransformScale1->text().toDouble();
00115 scales[1] = m_Controls.m_ScalesEuler3DTransformScale2->text().toDouble();
00116 scales[2] = m_Controls.m_ScalesEuler3DTransformScale3->text().toDouble();
00117 scales[3] = m_Controls.m_ScalesEuler3DTransformScaleTranslationX->text().toDouble();
00118 scales[4] = m_Controls.m_ScalesEuler3DTransformScaleTranslationY->text().toDouble();
00119 scales[5] = m_Controls.m_ScalesEuler3DTransformScaleTranslationZ->text().toDouble();
00120 }
00121 return scales;
00122 }
00123
00124 vtkTransform* QmitkEuler3DTransformView::Transform(vtkMatrix4x4* , vtkTransform* vtktransform, itk::Array<double> transformParams)
00125 {
00126 if (m_MovingImage.IsNotNull())
00127 {
00128 mitk::ScalarType angleX = transformParams[0] * 45.0 / atan(1.0);
00129 mitk::ScalarType angleY = transformParams[1] * 45.0 / atan(1.0);
00130 mitk::ScalarType angleZ = transformParams[2] * 45.0 / atan(1.0);
00131 vtktransform->PostMultiply();
00132 vtktransform->Translate(-m_CenterX, -m_CenterY, -m_CenterZ);
00133 vtktransform->RotateX(angleX);
00134 vtktransform->RotateY(angleY);
00135 vtktransform->RotateZ(angleZ);
00136 vtktransform->Translate(m_CenterX, m_CenterY, m_CenterZ);
00137 vtktransform->Translate(transformParams[3], transformParams[4], transformParams[5]);
00138 vtktransform->PreMultiply();
00139 }
00140 return vtktransform;
00141 }
00142
00143 int QmitkEuler3DTransformView::GetNumberOfTransformParameters()
00144 {
00145 if (m_FixedImage.IsNotNull())
00146 {
00147 if (m_FixedImage->GetDimension() == 2)
00148 return 4;
00149 else
00150 return 6;
00151 }
00152 else
00153 return 0;
00154 }