00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision$ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://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 #ifndef MITKRIGIDREGISTRATIONOBSERVER_H 00019 #define MITKRIGIDREGISTRATIONOBSERVER_H 00020 00021 #include "itkSingleValuedNonLinearOptimizer.h" 00022 #include "MitkRigidRegistrationExports.h" 00023 #include <itkExhaustiveOptimizer.h> 00024 #include <itkGradientDescentOptimizer.h> 00025 #include <itkQuaternionRigidTransformGradientDescentOptimizer.h> 00026 #include <itkLBFGSBOptimizer.h> 00027 #include <itkOnePlusOneEvolutionaryOptimizer.h> 00028 #include <itkNormalVariateGenerator.h> 00029 #include <itkPowellOptimizer.h> 00030 #include <itkFRPROptimizer.h> 00031 #include <itkRegularStepGradientDescentOptimizer.h> 00032 #include <itkVersorRigid3DTransformOptimizer.h> 00033 #include <itkVersorTransformOptimizer.h> 00034 #include <itkAmoebaOptimizer.h> 00035 #include <itkConjugateGradientOptimizer.h> 00036 #include <itkLBFGSOptimizer.h> 00037 #include <itkSPSAOptimizer.h> 00038 #include "itkCommand.h" 00039 #include "mitkCommon.h" 00040 00041 namespace mitk { 00042 00062 class MITK_RIGIDREGISTRATION_EXPORT RigidRegistrationObserver : public itk::Command 00063 { 00064 public: 00065 typedef RigidRegistrationObserver Self; 00066 typedef itk::Command Superclass; 00067 typedef itk::SmartPointer<Self> Pointer; 00068 itkNewMacro( Self ); 00069 00070 typedef itk::SingleValuedNonLinearOptimizer OptimizerType; 00071 typedef OptimizerType * OptimizerPointer; 00072 00073 typedef itk::ExhaustiveOptimizer ExhaustiveOptimizerType; 00074 typedef ExhaustiveOptimizerType * ExhaustiveOptimizerPointer; 00075 00076 typedef itk::GradientDescentOptimizer GradientDescentOptimizerType; 00077 typedef GradientDescentOptimizerType * GradientDescentOptimizerPointer; 00078 00079 typedef itk::QuaternionRigidTransformGradientDescentOptimizer QuaternionRigidTransformGradientDescentOptimizerType; 00080 typedef QuaternionRigidTransformGradientDescentOptimizerType * QuaternionRigidTransformGradientDescentOptimizerPointer; 00081 00082 typedef itk::LBFGSBOptimizer LBFGSBOptimizerType; 00083 typedef LBFGSBOptimizerType * LBFGSBOptimizerPointer; 00084 00085 typedef itk::OnePlusOneEvolutionaryOptimizer OnePlusOneEvolutionaryOptimizerType; 00086 typedef OnePlusOneEvolutionaryOptimizerType * OnePlusOneEvolutionaryOptimizerPointer; 00087 00088 typedef itk::PowellOptimizer PowellOptimizerType; 00089 typedef PowellOptimizerType * PowellOptimizerPointer; 00090 00091 typedef itk::FRPROptimizer FRPROptimizerType; 00092 typedef FRPROptimizerType * FRPROptimizerPointer; 00093 00094 typedef itk::RegularStepGradientDescentOptimizer RegularStepGradientDescentOptimizerType; 00095 typedef RegularStepGradientDescentOptimizerType * RegularStepGradientDescentOptimizerPointer; 00096 00097 typedef itk::VersorRigid3DTransformOptimizer VersorRigid3DTransformOptimizerType; 00098 typedef VersorRigid3DTransformOptimizerType * VersorRigid3DTransformOptimizerPointer; 00099 00100 typedef itk::VersorTransformOptimizer VersorTransformOptimizerType; 00101 typedef VersorTransformOptimizerType * VersorTransformOptimizerPointer; 00102 00103 typedef itk::AmoebaOptimizer AmoebaOptimizerType; 00104 typedef AmoebaOptimizerType * AmoebaOptimizerPointer; 00105 00106 typedef itk::ConjugateGradientOptimizer ConjugateGradientOptimizerType; 00107 typedef ConjugateGradientOptimizerType * ConjugateGradientOptimizerPointer; 00108 00109 typedef itk::LBFGSOptimizer LBFGSOptimizerType; 00110 typedef LBFGSOptimizerType * LBFGSOptimizerPointer; 00111 00112 typedef itk::SPSAOptimizer SPSAOptimizerType; 00113 typedef SPSAOptimizerType * SPSAOptimizerPointer; 00114 00121 void Execute(itk::Object *caller, const itk::EventObject & event); 00122 00127 void Execute(const itk::Object * object, const itk::EventObject & event); 00128 00133 void AddStepsToDo(int steps); 00134 00139 void SetRemainingProgress(int steps); 00140 00146 double GetCurrentOptimizerValue(); 00147 00153 itk::Array<double> GetCurrentTranslation(); 00154 00161 void SetStopOptimization(bool stopOptimization); 00162 00163 protected: 00164 RigidRegistrationObserver(); 00165 00166 private: 00167 double m_OptimizerValue; 00168 itk::Array<double> m_Params; 00169 bool m_StopOptimization; 00170 00171 }; 00172 00173 } // namespace mitk 00174 00175 #endif // MITKRIGIDREGISTRATIONOBSERVER_H