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 "QmitkRigid3DTransformView.h"
00019 #include "mitkImageAccessByItk.h"
00020 #include <itkRigid3DTransform.h>
00021 #include <itkCenteredTransformInitializer.h>
00022 #include <QValidator>
00023
00024 QmitkRigid3DTransformView::QmitkRigid3DTransformView(QWidget* parent, Qt::WindowFlags f ) : QmitkRigidRegistrationTransformsGUIBase(parent, f),
00025 m_CenterX(0), m_CenterY(0), m_CenterZ(0)
00026 {
00027 }
00028
00029 QmitkRigid3DTransformView::~QmitkRigid3DTransformView()
00030 {
00031 }
00032
00033 itk::Object::Pointer QmitkRigid3DTransformView::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 QmitkRigid3DTransformView::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::Rigid3DTransform< double >::Pointer transformPointer = itk::Rigid3DTransform< 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> QmitkRigid3DTransformView::GetTransformParameters()
00062 {
00063 itk::Array<double> transformValues;
00064 transformValues.SetSize(15);
00065 transformValues.fill(0);
00066 transformValues[0] = m_Controls.m_UseOptimizerScalesRigid3D->isChecked();
00067 transformValues[1] = m_Controls.m_ScalesRigid3DTransformScale1->text().toDouble();
00068 transformValues[2] = m_Controls.m_ScalesRigid3DTransformScale2->text().toDouble();
00069 transformValues[3] = m_Controls.m_ScalesRigid3DTransformScale3->text().toDouble();
00070 transformValues[4] = m_Controls.m_ScalesRigid3DTransformScale4->text().toDouble();
00071 transformValues[5] = m_Controls.m_ScalesRigid3DTransformScale5->text().toDouble();
00072 transformValues[6] = m_Controls.m_ScalesRigid3DTransformScale6->text().toDouble();
00073 transformValues[7] = m_Controls.m_ScalesRigid3DTransformScale7->text().toDouble();
00074 transformValues[8] = m_Controls.m_ScalesRigid3DTransformScale8->text().toDouble();
00075 transformValues[9] = m_Controls.m_ScalesRigid3DTransformScale9->text().toDouble();
00076 transformValues[10] = m_Controls.m_ScalesRigid3DTransformScaleTranslationX->text().toDouble();
00077 transformValues[11] = m_Controls.m_ScalesRigid3DTransformScaleTranslationY->text().toDouble();
00078 transformValues[12] = m_Controls.m_ScalesRigid3DTransformScaleTranslationZ->text().toDouble();
00079 transformValues[13] = m_Controls.m_CenterForInitializerRigid3D->isChecked();
00080 transformValues[14] = m_Controls.m_MomentsRigid3D->isChecked();
00081 return transformValues;
00082 }
00083
00084 void QmitkRigid3DTransformView::SetTransformParameters(itk::Array<double> transformValues)
00085 {
00086 m_Controls.m_UseOptimizerScalesRigid3D->setChecked(transformValues[0]);
00087 m_Controls.m_ScalesRigid3DTransformScale1->setText(QString::number(transformValues[1]));
00088 m_Controls.m_ScalesRigid3DTransformScale2->setText(QString::number(transformValues[2]));
00089 m_Controls.m_ScalesRigid3DTransformScale3->setText(QString::number(transformValues[3]));
00090 m_Controls.m_ScalesRigid3DTransformScale4->setText(QString::number(transformValues[4]));
00091 m_Controls.m_ScalesRigid3DTransformScale5->setText(QString::number(transformValues[5]));
00092 m_Controls.m_ScalesRigid3DTransformScale6->setText(QString::number(transformValues[6]));
00093 m_Controls.m_ScalesRigid3DTransformScale7->setText(QString::number(transformValues[7]));
00094 m_Controls.m_ScalesRigid3DTransformScale8->setText(QString::number(transformValues[8]));
00095 m_Controls.m_ScalesRigid3DTransformScale9->setText(QString::number(transformValues[9]));
00096 m_Controls.m_ScalesRigid3DTransformScaleTranslationX->setText(QString::number(transformValues[10]));
00097 m_Controls.m_ScalesRigid3DTransformScaleTranslationY->setText(QString::number(transformValues[11]));
00098 m_Controls.m_ScalesRigid3DTransformScaleTranslationZ->setText(QString::number(transformValues[12]));
00099 m_Controls.m_CenterForInitializerRigid3D->setChecked(transformValues[13]);
00100 m_Controls.m_MomentsRigid3D->setChecked(transformValues[14]);
00101 m_Controls.m_GeometryRigid3D->setChecked(!transformValues[14]);
00102 }
00103
00104 QString QmitkRigid3DTransformView::GetName()
00105 {
00106 return "Rigid3D";
00107 }
00108
00109 void QmitkRigid3DTransformView::SetupUI(QWidget* parent)
00110 {
00111 m_Controls.setupUi(parent);
00112 QValidator* validatorLineEditInputFloat = new QDoubleValidator(0, 20000000, 8, this);
00113 m_Controls.m_ScalesRigid3DTransformScale1->setValidator(validatorLineEditInputFloat);
00114 m_Controls.m_ScalesRigid3DTransformScale2->setValidator(validatorLineEditInputFloat);
00115 m_Controls.m_ScalesRigid3DTransformScale3->setValidator(validatorLineEditInputFloat);
00116 m_Controls.m_ScalesRigid3DTransformScale4->setValidator(validatorLineEditInputFloat);
00117 m_Controls.m_ScalesRigid3DTransformScale5->setValidator(validatorLineEditInputFloat);
00118 m_Controls.m_ScalesRigid3DTransformScale6->setValidator(validatorLineEditInputFloat);
00119 m_Controls.m_ScalesRigid3DTransformScale7->setValidator(validatorLineEditInputFloat);
00120 m_Controls.m_ScalesRigid3DTransformScale8->setValidator(validatorLineEditInputFloat);
00121 m_Controls.m_ScalesRigid3DTransformScale9->setValidator(validatorLineEditInputFloat);
00122 m_Controls.m_ScalesRigid3DTransformScaleTranslationX->setValidator(validatorLineEditInputFloat);
00123 m_Controls.m_ScalesRigid3DTransformScaleTranslationY->setValidator(validatorLineEditInputFloat);
00124 m_Controls.m_ScalesRigid3DTransformScaleTranslationZ->setValidator(validatorLineEditInputFloat);
00125 }
00126
00127 itk::Array<double> QmitkRigid3DTransformView::GetScales()
00128 {
00129 itk::Array<double> scales;
00130 scales.SetSize(12);
00131 scales.Fill(1.0);
00132 if (m_Controls.m_UseOptimizerScalesRigid3D->isChecked())
00133 {
00134 scales[0] = m_Controls.m_ScalesRigid3DTransformScale1->text().toDouble();
00135 scales[1] = m_Controls.m_ScalesRigid3DTransformScale2->text().toDouble();
00136 scales[2] = m_Controls.m_ScalesRigid3DTransformScale3->text().toDouble();
00137 scales[3] = m_Controls.m_ScalesRigid3DTransformScale4->text().toDouble();
00138 scales[4] = m_Controls.m_ScalesRigid3DTransformScale5->text().toDouble();
00139 scales[5] = m_Controls.m_ScalesRigid3DTransformScale6->text().toDouble();
00140 scales[6] = m_Controls.m_ScalesRigid3DTransformScale7->text().toDouble();
00141 scales[7] = m_Controls.m_ScalesRigid3DTransformScale8->text().toDouble();
00142 scales[8] = m_Controls.m_ScalesRigid3DTransformScale9->text().toDouble();
00143 scales[9] = m_Controls.m_ScalesRigid3DTransformScaleTranslationX->text().toDouble();
00144 scales[10] = m_Controls.m_ScalesRigid3DTransformScaleTranslationY->text().toDouble();
00145 scales[11] = m_Controls.m_ScalesRigid3DTransformScaleTranslationZ->text().toDouble();
00146 }
00147 return scales;
00148 }
00149
00150 vtkTransform* QmitkRigid3DTransformView::Transform(vtkMatrix4x4* vtkmatrix, vtkTransform* vtktransform, itk::Array<double> transformParams)
00151 {
00152 if (m_MovingImage.IsNotNull())
00153 {
00154 int m = 0;
00155 for (int i = 0; i < 3; i++)
00156 {
00157 for (int j = 0; j < 3; j++)
00158 {
00159 vtkmatrix->SetElement(i, j, transformParams[m]);
00160 m++;
00161 }
00162 }
00163 float center[4];
00164 float translation[4];
00165 center[0] = m_CenterX;
00166 center[1] = m_CenterY;
00167 center[2] = m_CenterZ;
00168 center[3] = 1;
00169 vtkmatrix->MultiplyPoint(center, translation);
00170 vtkmatrix->SetElement(0, 3, -translation[0] + center[0] + transformParams[9]);
00171 vtkmatrix->SetElement(1, 3, -translation[1] + center[1] + transformParams[10]);
00172 vtkmatrix->SetElement(2, 3, -translation[2] + center[2] + transformParams[11]);
00173 vtktransform->SetMatrix(vtkmatrix);
00174 }
00175 return vtktransform;
00176 }
00177
00178 int QmitkRigid3DTransformView::GetNumberOfTransformParameters()
00179 {
00180 if (m_FixedImage.IsNotNull())
00181 {
00182 if (m_FixedImage->GetDimension() == 2)
00183 return 6;
00184 else
00185 return 12;
00186 }
00187 else
00188 return 0;
00189 }