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 "QmitkCenteredRigid2DTransformView.h"
00019 #include "mitkImageAccessByItk.h"
00020 #include <itkCenteredRigid2DTransform.h>
00021 #include <itkCenteredTransformInitializer.h>
00022 #include <QValidator>
00023
00024 QmitkCenteredRigid2DTransformView::QmitkCenteredRigid2DTransformView(QWidget* parent, Qt::WindowFlags f ) : QmitkRigidRegistrationTransformsGUIBase(parent, f),
00025 m_CenterX(0), m_CenterY(0), m_CenterZ(0)
00026 {
00027 }
00028
00029 QmitkCenteredRigid2DTransformView::~QmitkCenteredRigid2DTransformView()
00030 {
00031 }
00032
00033 itk::Object::Pointer QmitkCenteredRigid2DTransformView::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 QmitkCenteredRigid2DTransformView::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::CenteredRigid2DTransform< double >::Pointer transformPointer = itk::CenteredRigid2DTransform< double >::New();
00055 transformPointer->SetIdentity();
00056 if (m_Controls.m_CenterForInitializerCenteredRigid2D->isChecked())
00057 {
00058 typedef typename itk::CenteredRigid2DTransform< double > CenteredRigid2DTransformType;
00059 typedef typename itk::CenteredTransformInitializer<CenteredRigid2DTransformType, 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_MomentsCenteredRigid2D->isChecked())
00065 {
00066 transformInitializer->MomentsOn();
00067 }
00068 else
00069 {
00070 transformInitializer->GeometryOn();
00071 }
00072 transformInitializer->InitializeTransform();
00073 }
00074 transformPointer->SetAngle( m_Controls.m_AngleCenteredRigid2D->text().toFloat() );
00075 m_CenterX = transformPointer->GetCenter()[0];
00076 m_CenterY = transformPointer->GetCenter()[1];
00077 m_TransformObject = transformPointer.GetPointer();
00078 return transformPointer.GetPointer();
00079 }
00080 return NULL;
00081 }
00082
00083 itk::Array<double> QmitkCenteredRigid2DTransformView::GetTransformParameters()
00084 {
00085 itk::Array<double> transformValues;
00086 transformValues.SetSize(9);
00087 transformValues.fill(0);
00088 transformValues[0] = m_Controls.m_UseOptimizerScalesCenteredRigid2D->isChecked();
00089 transformValues[1] = m_Controls.m_RotationScaleCenteredRigid2D->text().toDouble();
00090 transformValues[2] = m_Controls.m_CenterXScaleCenteredRigid2D->text().toDouble();
00091 transformValues[3] = m_Controls.m_CenterYScaleCenteredRigid2D->text().toDouble();
00092 transformValues[4] = m_Controls.m_TranslationXScaleCenteredRigid2D->text().toDouble();
00093 transformValues[5] = m_Controls.m_TranslationYScaleCenteredRigid2D->text().toDouble();
00094 transformValues[6] = m_Controls.m_AngleCenteredRigid2D->text().toFloat();
00095 transformValues[7] = m_Controls.m_CenterForInitializerCenteredRigid2D->isChecked();
00096 transformValues[8] = m_Controls.m_MomentsCenteredRigid2D->isChecked();
00097 return transformValues;
00098 }
00099
00100 void QmitkCenteredRigid2DTransformView::SetTransformParameters(itk::Array<double> transformValues)
00101 {
00102 m_Controls.m_UseOptimizerScalesCenteredRigid2D->setChecked(transformValues[0]);
00103 m_Controls.m_RotationScaleCenteredRigid2D->setText(QString::number(transformValues[1]));
00104 m_Controls.m_CenterXScaleCenteredRigid2D->setText(QString::number(transformValues[2]));
00105 m_Controls.m_CenterYScaleCenteredRigid2D->setText(QString::number(transformValues[3]));
00106 m_Controls.m_TranslationXScaleCenteredRigid2D->setText(QString::number(transformValues[4]));
00107 m_Controls.m_TranslationYScaleCenteredRigid2D->setText(QString::number(transformValues[5]));
00108 m_Controls.m_AngleCenteredRigid2D->setText(QString::number(transformValues[6]));
00109 m_Controls.m_CenterForInitializerCenteredRigid2D->setChecked(transformValues[7]);
00110 m_Controls.m_MomentsCenteredRigid2D->setChecked(transformValues[8]);
00111 m_Controls.m_GeometryCenteredRigid2D->setChecked(!transformValues[8]);
00112 }
00113
00114 QString QmitkCenteredRigid2DTransformView::GetName()
00115 {
00116 return "CenteredRigid2D";
00117 }
00118
00119 void QmitkCenteredRigid2DTransformView::SetupUI(QWidget* parent)
00120 {
00121 m_Controls.setupUi(parent);
00122 QValidator* validatorLineEditInputFloat = new QDoubleValidator(0, 20000000, 8, this);
00123 m_Controls.m_AngleCenteredRigid2D->setValidator(validatorLineEditInputFloat);
00124 m_Controls.m_RotationScaleCenteredRigid2D->setValidator(validatorLineEditInputFloat);
00125 m_Controls.m_CenterXScaleCenteredRigid2D->setValidator(validatorLineEditInputFloat);
00126 m_Controls.m_CenterYScaleCenteredRigid2D->setValidator(validatorLineEditInputFloat);
00127 m_Controls.m_TranslationXScaleCenteredRigid2D->setValidator(validatorLineEditInputFloat);
00128 m_Controls.m_TranslationYScaleCenteredRigid2D->setValidator(validatorLineEditInputFloat);
00129 }
00130
00131 itk::Array<double> QmitkCenteredRigid2DTransformView::GetScales()
00132 {
00133 itk::Array<double> scales;
00134 scales.SetSize(5);
00135 scales.Fill(1.0);
00136 if (m_Controls.m_UseOptimizerScalesCenteredRigid2D->isChecked())
00137 {
00138 scales[0] = m_Controls.m_RotationScaleCenteredRigid2D->text().toDouble();
00139 scales[1] = m_Controls.m_CenterXScaleCenteredRigid2D->text().toDouble();
00140 scales[2] = m_Controls.m_CenterYScaleCenteredRigid2D->text().toDouble();
00141 scales[3] = m_Controls.m_TranslationXScaleCenteredRigid2D->text().toDouble();
00142 scales[4] = m_Controls.m_TranslationYScaleCenteredRigid2D->text().toDouble();
00143 }
00144 return scales;
00145 }
00146
00147 vtkTransform* QmitkCenteredRigid2DTransformView::Transform(vtkMatrix4x4* , vtkTransform* vtktransform, itk::Array<double> transformParams)
00148 {
00149 if (m_MovingImage.IsNotNull())
00150 {
00151 mitk::ScalarType angle = transformParams[0] * 45.0 / atan(1.0);;
00152 vtktransform->PostMultiply();
00153 vtktransform->Translate(-transformParams[1], -transformParams[2], 0);
00154 vtktransform->RotateZ(angle);
00155 vtktransform->Translate(transformParams[1], transformParams[2], 0);
00156 vtktransform->Translate(transformParams[3], transformParams[4], 0);
00157 vtktransform->PreMultiply();
00158 }
00159 return vtktransform;
00160 }
00161
00162 int QmitkCenteredRigid2DTransformView::GetNumberOfTransformParameters()
00163 {
00164 if (m_FixedImage.IsNotNull())
00165 {
00166 if (m_FixedImage->GetDimension() == 2)
00167 return 5;
00168 else
00169 return 0;
00170 }
00171 else
00172 return 0;
00173 }