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 "QmitkRigid2DTransformView.h"
00019 #include "mitkImageAccessByItk.h"
00020 #include <itkRigid2DTransform.h>
00021 #include <itkCenteredTransformInitializer.h>
00022 #include <QValidator>
00023
00024 QmitkRigid2DTransformView::QmitkRigid2DTransformView(QWidget* parent, Qt::WindowFlags f ) : QmitkRigidRegistrationTransformsGUIBase(parent, f),
00025 m_CenterX(0), m_CenterY(0), m_CenterZ(0)
00026 {
00027 }
00028
00029 QmitkRigid2DTransformView::~QmitkRigid2DTransformView()
00030 {
00031 }
00032
00033 itk::Object::Pointer QmitkRigid2DTransformView::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 QmitkRigid2DTransformView::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 typename itk::Rigid2DTransform< double >::Pointer transformPointer = itk::Rigid2DTransform< double >::New();
00055 transformPointer->SetIdentity();
00056 if (m_Controls.m_CenterForInitializerRigid2D->isChecked())
00057 {
00058 typedef typename itk::Rigid2DTransform< double > Rigid2DTransformType;
00059 typedef typename itk::CenteredTransformInitializer<Rigid2DTransformType, FixedImage2DType, MovingImage2DType> TransformInitializerType;
00060 typename TransformInitializerType::Pointer transformInitializer = TransformInitializerType::New();
00061 transformInitializer->SetFixedImage( fixedImage2D );
00062 transformInitializer->SetMovingImage( movingImage2D );
00063 transformInitializer->SetTransform( transformPointer );
00064 if (m_Controls.m_MomentsRigid2D->isChecked())
00065 {
00066 transformInitializer->MomentsOn();
00067 }
00068 else
00069 {
00070 transformInitializer->GeometryOn();
00071 }
00072 transformInitializer->InitializeTransform();
00073 }
00074 m_TransformObject = transformPointer.GetPointer();
00075 return transformPointer.GetPointer();
00076 }
00077 return NULL;
00078 }
00079
00080 itk::Array<double> QmitkRigid2DTransformView::GetTransformParameters()
00081 {
00082 itk::Array<double> transformValues;
00083 transformValues.SetSize(6);
00084 transformValues.fill(0);
00085 transformValues[0] = m_Controls.m_UseOptimizerScalesRigid2D->isChecked();
00086 transformValues[1] = m_Controls.m_ScalesRigid2DTransformScale1->text().toDouble();
00087 transformValues[2] = m_Controls.m_ScalesRigid2DTransformScaleTranslationX->text().toDouble();
00088 transformValues[3] = m_Controls.m_ScalesRigid2DTransformScaleTranslationY->text().toDouble();
00089 transformValues[4] = m_Controls.m_CenterForInitializerRigid2D->isChecked();
00090 transformValues[5] = m_Controls.m_MomentsRigid2D->isChecked();
00091 return transformValues;
00092 }
00093
00094 void QmitkRigid2DTransformView::SetTransformParameters(itk::Array<double> transformValues)
00095 {
00096 m_Controls.m_UseOptimizerScalesRigid2D->setChecked(transformValues[0]);
00097 m_Controls.m_ScalesRigid2DTransformScale1->setText(QString::number(transformValues[1]));
00098 m_Controls.m_ScalesRigid2DTransformScaleTranslationX->setText(QString::number(transformValues[2]));
00099 m_Controls.m_ScalesRigid2DTransformScaleTranslationY->setText(QString::number(transformValues[3]));
00100 m_Controls.m_CenterForInitializerRigid2D->setChecked(transformValues[4]);
00101 m_Controls.m_MomentsRigid2D->setChecked(transformValues[5]);
00102 m_Controls.m_GeometryRigid2D->setChecked(!transformValues[5]);
00103 }
00104
00105 QString QmitkRigid2DTransformView::GetName()
00106 {
00107 return "Rigid2D";
00108 }
00109
00110 void QmitkRigid2DTransformView::SetupUI(QWidget* parent)
00111 {
00112 m_Controls.setupUi(parent);
00113 QValidator* validatorLineEditInputFloat = new QDoubleValidator(0, 20000000, 8, this);
00114 m_Controls.m_ScalesRigid2DTransformScale1->setValidator(validatorLineEditInputFloat);
00115 m_Controls.m_ScalesRigid2DTransformScaleTranslationX->setValidator(validatorLineEditInputFloat);
00116 m_Controls.m_ScalesRigid2DTransformScaleTranslationY->setValidator(validatorLineEditInputFloat);
00117 }
00118
00119 itk::Array<double> QmitkRigid2DTransformView::GetScales()
00120 {
00121 itk::Array<double> scales;
00122 scales.SetSize(3);
00123 scales.Fill(1.0);
00124 if (m_Controls.m_UseOptimizerScalesRigid2D->isChecked())
00125 {
00126 scales[0] = m_Controls.m_ScalesRigid2DTransformScale1->text().toDouble();
00127 scales[1] = m_Controls.m_ScalesRigid2DTransformScaleTranslationX->text().toDouble();
00128 scales[2] = m_Controls.m_ScalesRigid2DTransformScaleTranslationY->text().toDouble();
00129 }
00130 return scales;
00131 }
00132
00133 vtkTransform* QmitkRigid2DTransformView::Transform(vtkMatrix4x4* , vtkTransform* vtktransform, itk::Array<double> transformParams)
00134 {
00135 if (m_MovingImage.IsNotNull())
00136 {
00137 mitk::ScalarType angle = transformParams[0] * 45.0 / atan(1.0);
00138 vtktransform->PostMultiply();
00139 vtktransform->RotateZ(angle);
00140 vtktransform->Translate(transformParams[1], transformParams[2], 0);
00141 vtktransform->PreMultiply();
00142 }
00143 return vtktransform;
00144 }
00145
00146 int QmitkRigid2DTransformView::GetNumberOfTransformParameters()
00147 {
00148 if (m_FixedImage.IsNotNull())
00149 {
00150 if (m_FixedImage->GetDimension() == 2)
00151 return 3;
00152 else
00153 return 0;
00154 }
00155 else
00156 return 0;
00157 }