00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision: -1 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #include "QmitkLBFGSOptimizerView.h" 00019 #include "mitkImageAccessByItk.h" 00020 #include <itkLBFGSOptimizer.h> 00021 00022 QmitkLBFGSOptimizerView::QmitkLBFGSOptimizerView(QWidget* parent, Qt::WindowFlags f ) : QmitkRigidRegistrationOptimizerGUIBase (parent, f), 00023 m_NumberTransformParameters(16) 00024 { 00025 00026 } 00027 00028 QmitkLBFGSOptimizerView::~QmitkLBFGSOptimizerView() 00029 { 00030 } 00031 00032 itk::Object::Pointer QmitkLBFGSOptimizerView::GetOptimizer() 00033 { 00034 itk::LBFGSOptimizer::Pointer OptimizerPointer = itk::LBFGSOptimizer::New(); 00035 OptimizerPointer->SetMaximize( m_Controls.m_Maximize->isChecked() ); 00036 OptimizerPointer->SetGradientConvergenceTolerance( m_Controls.m_GradientMagnitudeToleranceLBFGS->text().toFloat() ); 00037 OptimizerPointer->SetLineSearchAccuracy( m_Controls.m_LineSearchAccuracyLBFGS->text().toFloat() ); 00038 OptimizerPointer->SetDefaultStepLength( m_Controls.m_DefaultStepLengthLBFGS->text().toFloat() ); 00039 OptimizerPointer->SetMaximumNumberOfFunctionEvaluations( m_Controls.m_MaximumEvaluationsLBFGS->text().toInt() ); 00040 OptimizerPointer->SetTrace(m_Controls.m_TraceOnLBFGS->isChecked()); 00041 return OptimizerPointer.GetPointer(); 00042 } 00043 00044 itk::Array<double> QmitkLBFGSOptimizerView::GetOptimizerParameters() 00045 { 00046 itk::Array<double> optimizerValues; 00047 optimizerValues.SetSize(6); 00048 optimizerValues.fill(0); 00049 optimizerValues[0] = m_Controls.m_Maximize->isChecked(); 00050 optimizerValues[1] = m_Controls.m_GradientMagnitudeToleranceLBFGS->text().toFloat(); 00051 optimizerValues[2] = m_Controls.m_LineSearchAccuracyLBFGS->text().toFloat(); 00052 optimizerValues[3] = m_Controls.m_DefaultStepLengthLBFGS->text().toFloat(); 00053 optimizerValues[4] = m_Controls.m_MaximumEvaluationsLBFGS->text().toInt(); 00054 optimizerValues[5] = m_Controls.m_TraceOnLBFGS->isChecked(); 00055 return optimizerValues; 00056 } 00057 00058 void QmitkLBFGSOptimizerView::SetOptimizerParameters(itk::Array<double> optimizerValues) 00059 { 00060 m_Controls.m_Maximize->setChecked(optimizerValues[0]); 00061 m_Controls.m_GradientMagnitudeToleranceLBFGS->setText(QString::number(optimizerValues[1])); 00062 m_Controls.m_LineSearchAccuracyLBFGS->setText(QString::number(optimizerValues[2])); 00063 m_Controls.m_DefaultStepLengthLBFGS->setText(QString::number(optimizerValues[3])); 00064 m_Controls.m_MaximumEvaluationsLBFGS->setText(QString::number(optimizerValues[4])); 00065 m_Controls.m_TraceOnLBFGS->setChecked(optimizerValues[5]); 00066 } 00067 00068 void QmitkLBFGSOptimizerView::SetNumberOfTransformParameters(int transformParameters) 00069 { 00070 m_NumberTransformParameters = transformParameters; 00071 } 00072 00073 QString QmitkLBFGSOptimizerView::GetName() 00074 { 00075 return "LBFGS"; 00076 } 00077 00078 void QmitkLBFGSOptimizerView::SetupUI(QWidget* parent) 00079 { 00080 m_Controls.setupUi(parent); 00081 QValidator* validatorLineEditInput = new QIntValidator(0, 20000000, this); 00082 m_Controls.m_MaximumEvaluationsLBFGS->setValidator(validatorLineEditInput); 00083 QValidator* validatorLineEditInputFloat = new QDoubleValidator(0, 20000000, 8, this); 00084 m_Controls.m_GradientMagnitudeToleranceLBFGS->setValidator(validatorLineEditInputFloat); 00085 m_Controls.m_LineSearchAccuracyLBFGS->setValidator(validatorLineEditInputFloat); 00086 m_Controls.m_DefaultStepLengthLBFGS->setValidator(validatorLineEditInputFloat); 00087 }