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 "mitkRigidRegistrationObserver.h"
00019 #include "mitkProgressBar.h"
00020
00021 mitk::RigidRegistrationObserver::RigidRegistrationObserver() : m_OptimizerValue(0), m_StopOptimization(false)
00022 {
00023 }
00024
00025 void mitk::RigidRegistrationObserver::Execute(itk::Object *caller, const itk::EventObject & event)
00026 {
00027 if (typeid(event) == typeid(itk::IterationEvent))
00028 {
00029 OptimizerPointer optimizer = dynamic_cast<OptimizerPointer>(caller);
00030 ExhaustiveOptimizerPointer ExhaustiveOptimizer = dynamic_cast<ExhaustiveOptimizerPointer>(optimizer);
00031 GradientDescentOptimizerPointer GradientDescentOptimizer = dynamic_cast<GradientDescentOptimizerPointer>(optimizer);
00032 QuaternionRigidTransformGradientDescentOptimizerPointer QuaternionRigidTransformGradientDescentOptimizer = dynamic_cast<QuaternionRigidTransformGradientDescentOptimizerPointer>(optimizer);
00033 LBFGSBOptimizerPointer LBFGSBOptimizer = dynamic_cast<LBFGSBOptimizerPointer>(optimizer);
00034 OnePlusOneEvolutionaryOptimizerPointer OnePlusOneEvolutionaryOptimizer = dynamic_cast<OnePlusOneEvolutionaryOptimizerPointer>(optimizer);
00035 PowellOptimizerPointer PowellOptimizer = dynamic_cast<PowellOptimizerPointer>(optimizer);
00036 FRPROptimizerPointer FRPROptimizer = dynamic_cast<FRPROptimizerPointer>(optimizer);
00037 RegularStepGradientDescentOptimizerPointer RegularStepGradientDescentOptimizer = dynamic_cast<RegularStepGradientDescentOptimizerPointer>(optimizer);
00038 VersorRigid3DTransformOptimizerPointer VersorRigid3DTransformOptimizer = dynamic_cast<VersorRigid3DTransformOptimizerPointer>(optimizer);
00039 VersorTransformOptimizerPointer VersorTransformOptimizer = dynamic_cast<VersorTransformOptimizerPointer>(optimizer);
00040 AmoebaOptimizerPointer AmoebaOptimizer = dynamic_cast<AmoebaOptimizerPointer>(optimizer);
00041 ConjugateGradientOptimizerPointer ConjugateGradientOptimizer = dynamic_cast<ConjugateGradientOptimizerPointer>(optimizer);
00042 LBFGSOptimizerPointer LBFGSOptimizer = dynamic_cast<LBFGSOptimizerPointer>(optimizer);
00043 SPSAOptimizerPointer SPSAOptimizer = dynamic_cast<SPSAOptimizerPointer>(optimizer);
00044 if (ExhaustiveOptimizer != NULL)
00045 {
00046 m_OptimizerValue = ExhaustiveOptimizer->GetValue(ExhaustiveOptimizer->GetCurrentPosition());
00047 MITK_INFO << ExhaustiveOptimizer->GetValue(ExhaustiveOptimizer->GetCurrentPosition()) << " "
00048 << ExhaustiveOptimizer->GetCurrentPosition() << std::endl;
00049 m_Params = ExhaustiveOptimizer->GetCurrentPosition();
00050 if(m_StopOptimization)
00051 {
00052
00053 m_StopOptimization = false;
00054 }
00055 InvokeEvent(itk::ModifiedEvent());
00056 }
00057 else if (GradientDescentOptimizer != NULL)
00058 {
00059 m_OptimizerValue = GradientDescentOptimizer->GetValue();
00060 MITK_INFO << GradientDescentOptimizer->GetCurrentIteration() << " "
00061 << GradientDescentOptimizer->GetValue() << " "
00062 << GradientDescentOptimizer->GetCurrentPosition() << std::endl;
00063 m_Params = GradientDescentOptimizer->GetCurrentPosition();
00064 if(m_StopOptimization)
00065 {
00066 GradientDescentOptimizer->StopOptimization();
00067 m_StopOptimization = false;
00068 }
00069 InvokeEvent(itk::ModifiedEvent());
00070 }
00071 else if (QuaternionRigidTransformGradientDescentOptimizer != NULL)
00072 {
00073 m_OptimizerValue = QuaternionRigidTransformGradientDescentOptimizer->GetValue();
00074 MITK_INFO << QuaternionRigidTransformGradientDescentOptimizer->GetCurrentIteration() << " "
00075 << QuaternionRigidTransformGradientDescentOptimizer->GetValue() << " "
00076 << QuaternionRigidTransformGradientDescentOptimizer->GetCurrentPosition() << std::endl;
00077 m_Params = QuaternionRigidTransformGradientDescentOptimizer->GetCurrentPosition();
00078 if(m_StopOptimization)
00079 {
00080 QuaternionRigidTransformGradientDescentOptimizer->StopOptimization();
00081 m_StopOptimization = false;
00082 }
00083 InvokeEvent(itk::ModifiedEvent());
00084 }
00085 else if (LBFGSBOptimizer != NULL)
00086 {
00087 m_OptimizerValue = LBFGSBOptimizer->GetValue();
00088 MITK_INFO << LBFGSBOptimizer->GetCurrentIteration() << " "
00089 << LBFGSBOptimizer->GetValue() << " "
00090 << LBFGSBOptimizer->GetCurrentPosition() << std::endl;
00091 m_Params = LBFGSBOptimizer->GetCurrentPosition();
00092 if(m_StopOptimization)
00093 {
00094
00095 m_StopOptimization = false;
00096 }
00097 InvokeEvent(itk::ModifiedEvent());
00098 }
00099 else if (OnePlusOneEvolutionaryOptimizer != NULL)
00100 {
00101 m_OptimizerValue = OnePlusOneEvolutionaryOptimizer->GetValue();
00102 MITK_INFO << OnePlusOneEvolutionaryOptimizer->GetCurrentIteration() << " "
00103 << OnePlusOneEvolutionaryOptimizer->GetValue() << " "
00104 << OnePlusOneEvolutionaryOptimizer->GetCurrentPosition() << std::endl;
00105 m_Params = OnePlusOneEvolutionaryOptimizer->GetCurrentPosition();
00106 if(m_StopOptimization)
00107 {
00108 OnePlusOneEvolutionaryOptimizer->StopOptimization();
00109 m_StopOptimization = false;
00110 }
00111 InvokeEvent(itk::ModifiedEvent());
00112 }
00113 else if (PowellOptimizer != NULL)
00114 {
00115 m_OptimizerValue = PowellOptimizer->GetValue();
00116 MITK_INFO << PowellOptimizer->GetCurrentIteration() << " "
00117 << PowellOptimizer->GetValue() << " "
00118 << PowellOptimizer->GetCurrentPosition() << std::endl;
00119 m_Params = PowellOptimizer->GetCurrentPosition();
00120 if(m_StopOptimization)
00121 {
00122 PowellOptimizer->StopOptimization();
00123 m_StopOptimization = false;
00124 }
00125 InvokeEvent(itk::ModifiedEvent());
00126 }
00127 else if (FRPROptimizer != NULL)
00128 {
00129 m_OptimizerValue = FRPROptimizer->GetValue();
00130 MITK_INFO << FRPROptimizer->GetCurrentIteration() << " "
00131 << FRPROptimizer->GetValue() << " "
00132 << FRPROptimizer->GetCurrentPosition() << std::endl;
00133 m_Params = FRPROptimizer->GetCurrentPosition();
00134 if(m_StopOptimization)
00135 {
00136 FRPROptimizer->StopOptimization();
00137 m_StopOptimization = false;
00138 }
00139 InvokeEvent(itk::ModifiedEvent());
00140 }
00141 else if (RegularStepGradientDescentOptimizer != NULL)
00142 {
00143 m_OptimizerValue = RegularStepGradientDescentOptimizer->GetValue();
00144 MITK_INFO << RegularStepGradientDescentOptimizer->GetCurrentIteration() << " "
00145 << RegularStepGradientDescentOptimizer->GetValue() << " "
00146 << RegularStepGradientDescentOptimizer->GetCurrentPosition() << std::endl;
00147 m_Params = RegularStepGradientDescentOptimizer->GetCurrentPosition();
00148 if(m_StopOptimization)
00149 {
00150 RegularStepGradientDescentOptimizer->StopOptimization();
00151 m_StopOptimization = false;
00152 }
00153 InvokeEvent(itk::ModifiedEvent());
00154 }
00155 else if (VersorRigid3DTransformOptimizer != NULL)
00156 {
00157 m_OptimizerValue = VersorRigid3DTransformOptimizer->GetValue();
00158 MITK_INFO << VersorRigid3DTransformOptimizer->GetCurrentIteration() << " "
00159 << VersorRigid3DTransformOptimizer->GetValue() << " "
00160 << VersorRigid3DTransformOptimizer->GetCurrentPosition() << std::endl;
00161 m_Params = VersorRigid3DTransformOptimizer->GetCurrentPosition();
00162 if(m_StopOptimization)
00163 {
00164 VersorRigid3DTransformOptimizer->StopOptimization();
00165 m_StopOptimization = false;
00166 }
00167 InvokeEvent(itk::ModifiedEvent());
00168 }
00169 else if (VersorTransformOptimizer != NULL)
00170 {
00171 m_OptimizerValue = VersorTransformOptimizer->GetValue();
00172 MITK_INFO << VersorTransformOptimizer->GetCurrentIteration() << " "
00173 << VersorTransformOptimizer->GetValue() << " "
00174 << VersorTransformOptimizer->GetCurrentPosition() << std::endl;
00175 m_Params = VersorTransformOptimizer->GetCurrentPosition();
00176 if(m_StopOptimization)
00177 {
00178 VersorTransformOptimizer->StopOptimization();
00179 m_StopOptimization = false;
00180 }
00181 InvokeEvent(itk::ModifiedEvent());
00182 }
00183 else if (AmoebaOptimizer != NULL)
00184 {
00185 m_OptimizerValue = AmoebaOptimizer->GetCachedValue();
00186 MITK_INFO << AmoebaOptimizer->GetCachedValue() << " "
00187 << AmoebaOptimizer->GetCachedCurrentPosition() << std::endl;
00188 m_Params = AmoebaOptimizer->GetCurrentPosition();
00189 if(m_StopOptimization)
00190 {
00191
00192 m_StopOptimization = false;
00193 }
00194 InvokeEvent(itk::ModifiedEvent());
00195 }
00196 else if (ConjugateGradientOptimizer != NULL)
00197 {
00198 m_OptimizerValue = ConjugateGradientOptimizer->GetValue();
00199 MITK_INFO << ConjugateGradientOptimizer->GetCurrentIteration() << " "
00200 << ConjugateGradientOptimizer->GetValue() << " "
00201 << ConjugateGradientOptimizer->GetCurrentPosition() << std::endl;
00202 m_Params = ConjugateGradientOptimizer->GetCurrentPosition();
00203 if(m_StopOptimization)
00204 {
00205
00206 m_StopOptimization = false;
00207 }
00208 InvokeEvent(itk::ModifiedEvent());
00209 }
00210 else if (LBFGSOptimizer != NULL)
00211 {
00212 if(m_StopOptimization)
00213 {
00214
00215 m_StopOptimization = false;
00216 }
00217
00218
00219
00220
00221 InvokeEvent(itk::ModifiedEvent());
00222 }
00223 else if (SPSAOptimizer != NULL)
00224 {
00225 m_OptimizerValue = SPSAOptimizer->GetValue();
00226 MITK_INFO << SPSAOptimizer->GetCurrentIteration() << " "
00227 << SPSAOptimizer->GetValue() << " "
00228 << SPSAOptimizer->GetCurrentPosition() << std::endl;
00229 m_Params = SPSAOptimizer->GetCurrentPosition();
00230 if(m_StopOptimization)
00231 {
00232 SPSAOptimizer->StopOptimization();
00233 m_StopOptimization = false;
00234 }
00235 InvokeEvent(itk::ModifiedEvent());
00236 }
00237 }
00238 else if (typeid(event) == typeid(itk::FunctionEvaluationIterationEvent))
00239 {
00240 OptimizerPointer optimizer = dynamic_cast<OptimizerPointer>(caller);
00241 AmoebaOptimizerPointer AmoebaOptimizer = dynamic_cast<AmoebaOptimizerPointer>(optimizer);
00242 if (AmoebaOptimizer != NULL)
00243 {
00244 m_OptimizerValue = AmoebaOptimizer->GetCachedValue();
00245 MITK_INFO << AmoebaOptimizer->GetCachedValue() << " "
00246 << AmoebaOptimizer->GetCachedCurrentPosition() << std::endl;
00247 m_Params = AmoebaOptimizer->GetCachedCurrentPosition();
00248 if(m_StopOptimization)
00249 {
00250
00251 m_StopOptimization = false;
00252 }
00253 InvokeEvent(itk::ModifiedEvent());
00254 }
00255 }
00256 mitk::ProgressBar::GetInstance()->AddStepsToDo(1);
00257 mitk::ProgressBar::GetInstance()->Progress();
00258 }
00259
00260 void mitk::RigidRegistrationObserver::Execute(const itk::Object* , const itk::EventObject& )
00261 {
00262 }
00263
00264 void mitk::RigidRegistrationObserver::AddStepsToDo(int steps)
00265 {
00266 mitk::ProgressBar::GetInstance()->AddStepsToDo(steps);
00267 }
00268
00269 void mitk::RigidRegistrationObserver::SetRemainingProgress(int steps)
00270 {
00271 mitk::ProgressBar::GetInstance()->Progress(steps);
00272 }
00273
00274 double mitk::RigidRegistrationObserver::GetCurrentOptimizerValue()
00275 {
00276 return m_OptimizerValue;
00277 }
00278
00279 itk::Array<double> mitk::RigidRegistrationObserver::GetCurrentTranslation()
00280 {
00281 return m_Params;
00282 }
00283
00284
00285
00286 void mitk::RigidRegistrationObserver::SetStopOptimization(bool stopOptimization)
00287 {
00288 m_StopOptimization = stopOptimization;
00289 }