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