Observer to react on rigid registration optimizer events. More...
#include <mitkRigidRegistrationObserver.h>
Public Types | |
typedef RigidRegistrationObserver | Self |
typedef itk::Command | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SingleValuedNonLinearOptimizer | OptimizerType |
typedef OptimizerType * | OptimizerPointer |
typedef itk::ExhaustiveOptimizer | ExhaustiveOptimizerType |
typedef ExhaustiveOptimizerType * | ExhaustiveOptimizerPointer |
typedef itk::GradientDescentOptimizer | GradientDescentOptimizerType |
typedef GradientDescentOptimizerType * | GradientDescentOptimizerPointer |
typedef itk::QuaternionRigidTransformGradientDescentOptimizer | QuaternionRigidTransformGradientDescentOptimizerType |
typedef QuaternionRigidTransformGradientDescentOptimizerType * | QuaternionRigidTransformGradientDescentOptimizerPointer |
typedef itk::LBFGSBOptimizer | LBFGSBOptimizerType |
typedef LBFGSBOptimizerType * | LBFGSBOptimizerPointer |
typedef itk::OnePlusOneEvolutionaryOptimizer | OnePlusOneEvolutionaryOptimizerType |
typedef OnePlusOneEvolutionaryOptimizerType * | OnePlusOneEvolutionaryOptimizerPointer |
typedef itk::PowellOptimizer | PowellOptimizerType |
typedef PowellOptimizerType * | PowellOptimizerPointer |
typedef itk::FRPROptimizer | FRPROptimizerType |
typedef FRPROptimizerType * | FRPROptimizerPointer |
typedef itk::RegularStepGradientDescentOptimizer | RegularStepGradientDescentOptimizerType |
typedef RegularStepGradientDescentOptimizerType * | RegularStepGradientDescentOptimizerPointer |
typedef itk::VersorRigid3DTransformOptimizer | VersorRigid3DTransformOptimizerType |
typedef VersorRigid3DTransformOptimizerType * | VersorRigid3DTransformOptimizerPointer |
typedef itk::VersorTransformOptimizer | VersorTransformOptimizerType |
typedef VersorTransformOptimizerType * | VersorTransformOptimizerPointer |
typedef itk::AmoebaOptimizer | AmoebaOptimizerType |
typedef AmoebaOptimizerType * | AmoebaOptimizerPointer |
typedef itk::ConjugateGradientOptimizer | ConjugateGradientOptimizerType |
typedef ConjugateGradientOptimizerType * | ConjugateGradientOptimizerPointer |
typedef itk::LBFGSOptimizer | LBFGSOptimizerType |
typedef LBFGSOptimizerType * | LBFGSOptimizerPointer |
typedef itk::SPSAOptimizer | SPSAOptimizerType |
typedef SPSAOptimizerType * | SPSAOptimizerPointer |
Public Member Functions | |
void | Execute (itk::Object *caller, const itk::EventObject &event) |
Reacts on events from ITK optimizers. | |
void | Execute (const itk::Object *object, const itk::EventObject &event) |
Not implemented... | |
void | AddStepsToDo (int steps) |
Add new steps to the progress bar. | |
void | SetRemainingProgress (int steps) |
Sets the remaining progress to the progress bar when the optimization process is done. | |
double | GetCurrentOptimizerValue () |
Returns the current optimizer value. This value is calculated by the used metric and shows, how good the images are aligned. | |
itk::Array< double > | GetCurrentTranslation () |
Returns the current transformation parameters for the moving image to this iteration step. | |
void | SetStopOptimization (bool stopOptimization) |
Sets the stop optimization flag, which is used to call the StopOptimization() method of the optimizer. | |
Static Public Member Functions | |
static Pointer | New () |
Protected Member Functions | |
RigidRegistrationObserver () |
Observer to react on rigid registration optimizer events.
This class reacts on events sent by ITK optimizers. These events will be sent for every iteration the optimizer performs. This class also takes care for the progress bar for every iteration step.
The current optimizer values will be stored and a modified event will be sent to listeners registered to this observer. These listeners have the possibility to get the current optimizer parameters.
The optimization process can be stopped by setting stopOptimization to true. The optimization will be stopped after the next iteration step of the optimizer. Unfortunately this is not implemented for ExhaustiveOptimizer, LBFGSBOptimizer, AmoebaOptimizer, ConjugateGradientOptimizer and LBFGSOptimizer in ITK.
Definition at line 62 of file mitkRigidRegistrationObserver.h.
Definition at line 104 of file mitkRigidRegistrationObserver.h.
typedef itk::AmoebaOptimizer mitk::RigidRegistrationObserver::AmoebaOptimizerType |
Definition at line 103 of file mitkRigidRegistrationObserver.h.
typedef ConjugateGradientOptimizerType* mitk::RigidRegistrationObserver::ConjugateGradientOptimizerPointer |
Definition at line 107 of file mitkRigidRegistrationObserver.h.
typedef itk::ConjugateGradientOptimizer mitk::RigidRegistrationObserver::ConjugateGradientOptimizerType |
Definition at line 106 of file mitkRigidRegistrationObserver.h.
Definition at line 74 of file mitkRigidRegistrationObserver.h.
typedef itk::ExhaustiveOptimizer mitk::RigidRegistrationObserver::ExhaustiveOptimizerType |
Definition at line 73 of file mitkRigidRegistrationObserver.h.
Definition at line 92 of file mitkRigidRegistrationObserver.h.
typedef itk::FRPROptimizer mitk::RigidRegistrationObserver::FRPROptimizerType |
Definition at line 91 of file mitkRigidRegistrationObserver.h.
typedef GradientDescentOptimizerType* mitk::RigidRegistrationObserver::GradientDescentOptimizerPointer |
Definition at line 77 of file mitkRigidRegistrationObserver.h.
typedef itk::GradientDescentOptimizer mitk::RigidRegistrationObserver::GradientDescentOptimizerType |
Definition at line 76 of file mitkRigidRegistrationObserver.h.
Definition at line 83 of file mitkRigidRegistrationObserver.h.
typedef itk::LBFGSBOptimizer mitk::RigidRegistrationObserver::LBFGSBOptimizerType |
Definition at line 82 of file mitkRigidRegistrationObserver.h.
Definition at line 110 of file mitkRigidRegistrationObserver.h.
typedef itk::LBFGSOptimizer mitk::RigidRegistrationObserver::LBFGSOptimizerType |
Definition at line 109 of file mitkRigidRegistrationObserver.h.
typedef OnePlusOneEvolutionaryOptimizerType* mitk::RigidRegistrationObserver::OnePlusOneEvolutionaryOptimizerPointer |
Definition at line 86 of file mitkRigidRegistrationObserver.h.
typedef itk::OnePlusOneEvolutionaryOptimizer mitk::RigidRegistrationObserver::OnePlusOneEvolutionaryOptimizerType |
Definition at line 85 of file mitkRigidRegistrationObserver.h.
Definition at line 71 of file mitkRigidRegistrationObserver.h.
typedef itk::SingleValuedNonLinearOptimizer mitk::RigidRegistrationObserver::OptimizerType |
Definition at line 68 of file mitkRigidRegistrationObserver.h.
typedef itk::SmartPointer<Self> mitk::RigidRegistrationObserver::Pointer |
Definition at line 67 of file mitkRigidRegistrationObserver.h.
Definition at line 89 of file mitkRigidRegistrationObserver.h.
typedef itk::PowellOptimizer mitk::RigidRegistrationObserver::PowellOptimizerType |
Definition at line 88 of file mitkRigidRegistrationObserver.h.
typedef QuaternionRigidTransformGradientDescentOptimizerType* mitk::RigidRegistrationObserver::QuaternionRigidTransformGradientDescentOptimizerPointer |
Definition at line 80 of file mitkRigidRegistrationObserver.h.
typedef itk::QuaternionRigidTransformGradientDescentOptimizer mitk::RigidRegistrationObserver::QuaternionRigidTransformGradientDescentOptimizerType |
Definition at line 79 of file mitkRigidRegistrationObserver.h.
typedef RegularStepGradientDescentOptimizerType* mitk::RigidRegistrationObserver::RegularStepGradientDescentOptimizerPointer |
Definition at line 95 of file mitkRigidRegistrationObserver.h.
typedef itk::RegularStepGradientDescentOptimizer mitk::RigidRegistrationObserver::RegularStepGradientDescentOptimizerType |
Definition at line 94 of file mitkRigidRegistrationObserver.h.
Definition at line 65 of file mitkRigidRegistrationObserver.h.
Definition at line 113 of file mitkRigidRegistrationObserver.h.
typedef itk::SPSAOptimizer mitk::RigidRegistrationObserver::SPSAOptimizerType |
Definition at line 112 of file mitkRigidRegistrationObserver.h.
typedef itk::Command mitk::RigidRegistrationObserver::Superclass |
Definition at line 66 of file mitkRigidRegistrationObserver.h.
typedef VersorRigid3DTransformOptimizerType* mitk::RigidRegistrationObserver::VersorRigid3DTransformOptimizerPointer |
Definition at line 98 of file mitkRigidRegistrationObserver.h.
typedef itk::VersorRigid3DTransformOptimizer mitk::RigidRegistrationObserver::VersorRigid3DTransformOptimizerType |
Definition at line 97 of file mitkRigidRegistrationObserver.h.
typedef VersorTransformOptimizerType* mitk::RigidRegistrationObserver::VersorTransformOptimizerPointer |
Definition at line 101 of file mitkRigidRegistrationObserver.h.
typedef itk::VersorTransformOptimizer mitk::RigidRegistrationObserver::VersorTransformOptimizerType |
Definition at line 100 of file mitkRigidRegistrationObserver.h.
mitk::RigidRegistrationObserver::RigidRegistrationObserver | ( | ) | [protected] |
Definition at line 21 of file mitkRigidRegistrationObserver.cpp.
: m_OptimizerValue(0), m_StopOptimization(false)
{
}
void mitk::RigidRegistrationObserver::AddStepsToDo | ( | int | steps ) |
Add new steps to the progress bar.
Definition at line 264 of file mitkRigidRegistrationObserver.cpp.
References mitk::ProgressBar::AddStepsToDo(), and mitk::ProgressBar::GetInstance().
{ mitk::ProgressBar::GetInstance()->AddStepsToDo(steps); }
void mitk::RigidRegistrationObserver::Execute | ( | itk::Object * | caller, |
const itk::EventObject & | event | ||
) |
Reacts on events from ITK optimizers.
Stores the optimizer values, adds progress to the progress bar and sends a stop flag to stop the optimization process if it is set in this class. Also emits a signal to inform listeners about new optimizer values.
Definition at line 25 of file mitkRigidRegistrationObserver.cpp.
References mitk::ProgressBar::AddStepsToDo(), mitk::ProgressBar::GetInstance(), MITK_INFO, and mitk::ProgressBar::Progress().
{ if (typeid(event) == typeid(itk::IterationEvent)) { OptimizerPointer optimizer = dynamic_cast<OptimizerPointer>(caller); ExhaustiveOptimizerPointer ExhaustiveOptimizer = dynamic_cast<ExhaustiveOptimizerPointer>(optimizer); GradientDescentOptimizerPointer GradientDescentOptimizer = dynamic_cast<GradientDescentOptimizerPointer>(optimizer); QuaternionRigidTransformGradientDescentOptimizerPointer QuaternionRigidTransformGradientDescentOptimizer = dynamic_cast<QuaternionRigidTransformGradientDescentOptimizerPointer>(optimizer); LBFGSBOptimizerPointer LBFGSBOptimizer = dynamic_cast<LBFGSBOptimizerPointer>(optimizer); OnePlusOneEvolutionaryOptimizerPointer OnePlusOneEvolutionaryOptimizer = dynamic_cast<OnePlusOneEvolutionaryOptimizerPointer>(optimizer); PowellOptimizerPointer PowellOptimizer = dynamic_cast<PowellOptimizerPointer>(optimizer); FRPROptimizerPointer FRPROptimizer = dynamic_cast<FRPROptimizerPointer>(optimizer); RegularStepGradientDescentOptimizerPointer RegularStepGradientDescentOptimizer = dynamic_cast<RegularStepGradientDescentOptimizerPointer>(optimizer); VersorRigid3DTransformOptimizerPointer VersorRigid3DTransformOptimizer = dynamic_cast<VersorRigid3DTransformOptimizerPointer>(optimizer); VersorTransformOptimizerPointer VersorTransformOptimizer = dynamic_cast<VersorTransformOptimizerPointer>(optimizer); AmoebaOptimizerPointer AmoebaOptimizer = dynamic_cast<AmoebaOptimizerPointer>(optimizer); ConjugateGradientOptimizerPointer ConjugateGradientOptimizer = dynamic_cast<ConjugateGradientOptimizerPointer>(optimizer); LBFGSOptimizerPointer LBFGSOptimizer = dynamic_cast<LBFGSOptimizerPointer>(optimizer); SPSAOptimizerPointer SPSAOptimizer = dynamic_cast<SPSAOptimizerPointer>(optimizer); if (ExhaustiveOptimizer != NULL) { m_OptimizerValue = ExhaustiveOptimizer->GetValue(ExhaustiveOptimizer->GetCurrentPosition()); MITK_INFO << ExhaustiveOptimizer->GetValue(ExhaustiveOptimizer->GetCurrentPosition()) << " " << ExhaustiveOptimizer->GetCurrentPosition() << std::endl; m_Params = ExhaustiveOptimizer->GetCurrentPosition(); if(m_StopOptimization) { //ExhaustiveOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (GradientDescentOptimizer != NULL) { m_OptimizerValue = GradientDescentOptimizer->GetValue(); MITK_INFO << GradientDescentOptimizer->GetCurrentIteration() << " " << GradientDescentOptimizer->GetValue() << " " << GradientDescentOptimizer->GetCurrentPosition() << std::endl; m_Params = GradientDescentOptimizer->GetCurrentPosition(); if(m_StopOptimization) { GradientDescentOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (QuaternionRigidTransformGradientDescentOptimizer != NULL) { m_OptimizerValue = QuaternionRigidTransformGradientDescentOptimizer->GetValue(); MITK_INFO << QuaternionRigidTransformGradientDescentOptimizer->GetCurrentIteration() << " " << QuaternionRigidTransformGradientDescentOptimizer->GetValue() << " " << QuaternionRigidTransformGradientDescentOptimizer->GetCurrentPosition() << std::endl; m_Params = QuaternionRigidTransformGradientDescentOptimizer->GetCurrentPosition(); if(m_StopOptimization) { QuaternionRigidTransformGradientDescentOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (LBFGSBOptimizer != NULL) { m_OptimizerValue = LBFGSBOptimizer->GetValue(); MITK_INFO << LBFGSBOptimizer->GetCurrentIteration() << " " << LBFGSBOptimizer->GetValue() << " " << LBFGSBOptimizer->GetCurrentPosition() << std::endl; m_Params = LBFGSBOptimizer->GetCurrentPosition(); if(m_StopOptimization) { //LBFGSBOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (OnePlusOneEvolutionaryOptimizer != NULL) { m_OptimizerValue = OnePlusOneEvolutionaryOptimizer->GetValue(); MITK_INFO << OnePlusOneEvolutionaryOptimizer->GetCurrentIteration() << " " << OnePlusOneEvolutionaryOptimizer->GetValue() << " " << OnePlusOneEvolutionaryOptimizer->GetCurrentPosition() << std::endl; m_Params = OnePlusOneEvolutionaryOptimizer->GetCurrentPosition(); if(m_StopOptimization) { OnePlusOneEvolutionaryOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (PowellOptimizer != NULL) { m_OptimizerValue = PowellOptimizer->GetValue(); MITK_INFO << PowellOptimizer->GetCurrentIteration() << " " << PowellOptimizer->GetValue() << " " << PowellOptimizer->GetCurrentPosition() << std::endl; m_Params = PowellOptimizer->GetCurrentPosition(); if(m_StopOptimization) { PowellOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (FRPROptimizer != NULL) { m_OptimizerValue = FRPROptimizer->GetValue(); MITK_INFO << FRPROptimizer->GetCurrentIteration() << " " << FRPROptimizer->GetValue() << " " << FRPROptimizer->GetCurrentPosition() << std::endl; m_Params = FRPROptimizer->GetCurrentPosition(); if(m_StopOptimization) { FRPROptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (RegularStepGradientDescentOptimizer != NULL) { m_OptimizerValue = RegularStepGradientDescentOptimizer->GetValue(); MITK_INFO << RegularStepGradientDescentOptimizer->GetCurrentIteration() << " " << RegularStepGradientDescentOptimizer->GetValue() << " " << RegularStepGradientDescentOptimizer->GetCurrentPosition() << std::endl; m_Params = RegularStepGradientDescentOptimizer->GetCurrentPosition(); if(m_StopOptimization) { RegularStepGradientDescentOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (VersorRigid3DTransformOptimizer != NULL) { m_OptimizerValue = VersorRigid3DTransformOptimizer->GetValue(); MITK_INFO << VersorRigid3DTransformOptimizer->GetCurrentIteration() << " " << VersorRigid3DTransformOptimizer->GetValue() << " " << VersorRigid3DTransformOptimizer->GetCurrentPosition() << std::endl; m_Params = VersorRigid3DTransformOptimizer->GetCurrentPosition(); if(m_StopOptimization) { VersorRigid3DTransformOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (VersorTransformOptimizer != NULL) { m_OptimizerValue = VersorTransformOptimizer->GetValue(); MITK_INFO << VersorTransformOptimizer->GetCurrentIteration() << " " << VersorTransformOptimizer->GetValue() << " " << VersorTransformOptimizer->GetCurrentPosition() << std::endl; m_Params = VersorTransformOptimizer->GetCurrentPosition(); if(m_StopOptimization) { VersorTransformOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (AmoebaOptimizer != NULL) { m_OptimizerValue = AmoebaOptimizer->GetCachedValue(); MITK_INFO << AmoebaOptimizer->GetCachedValue() << " " << AmoebaOptimizer->GetCachedCurrentPosition() << std::endl; m_Params = AmoebaOptimizer->GetCurrentPosition(); if(m_StopOptimization) { //AmoebaOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (ConjugateGradientOptimizer != NULL) { m_OptimizerValue = ConjugateGradientOptimizer->GetValue(); MITK_INFO << ConjugateGradientOptimizer->GetCurrentIteration() << " " << ConjugateGradientOptimizer->GetValue() << " " << ConjugateGradientOptimizer->GetCurrentPosition() << std::endl; m_Params = ConjugateGradientOptimizer->GetCurrentPosition(); if(m_StopOptimization) { //ConjugateGradientOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } else if (LBFGSOptimizer != NULL) { if(m_StopOptimization) { //LBFGSOptimizer->StopOptimization(); m_StopOptimization = false; } //m_OptimizerValue = LBFGSOptimizer->GetValue(); /*MITK_INFO << LBFGSOptimizer->GetCurrentIteration() << " "; MITK_INFO << LBFGSOptimizer->GetValue() << " "; MITK_INFO << LBFGSOptimizer->GetInfinityNormOfProjectedGradient() << std::endl;*/ InvokeEvent(itk::ModifiedEvent()); } else if (SPSAOptimizer != NULL) { m_OptimizerValue = SPSAOptimizer->GetValue(); MITK_INFO << SPSAOptimizer->GetCurrentIteration() << " " << SPSAOptimizer->GetValue() << " " << SPSAOptimizer->GetCurrentPosition() << std::endl; m_Params = SPSAOptimizer->GetCurrentPosition(); if(m_StopOptimization) { SPSAOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } } else if (typeid(event) == typeid(itk::FunctionEvaluationIterationEvent)) { OptimizerPointer optimizer = dynamic_cast<OptimizerPointer>(caller); AmoebaOptimizerPointer AmoebaOptimizer = dynamic_cast<AmoebaOptimizerPointer>(optimizer); if (AmoebaOptimizer != NULL) { m_OptimizerValue = AmoebaOptimizer->GetCachedValue(); MITK_INFO << AmoebaOptimizer->GetCachedValue() << " " << AmoebaOptimizer->GetCachedCurrentPosition() << std::endl; m_Params = AmoebaOptimizer->GetCachedCurrentPosition(); if(m_StopOptimization) { //AmoebaOptimizer->StopOptimization(); m_StopOptimization = false; } InvokeEvent(itk::ModifiedEvent()); } } mitk::ProgressBar::GetInstance()->AddStepsToDo(1); mitk::ProgressBar::GetInstance()->Progress(); }
void mitk::RigidRegistrationObserver::Execute | ( | const itk::Object * | object, |
const itk::EventObject & | event | ||
) |
double mitk::RigidRegistrationObserver::GetCurrentOptimizerValue | ( | ) |
Returns the current optimizer value. This value is calculated by the used metric and shows, how good the images are aligned.
Definition at line 274 of file mitkRigidRegistrationObserver.cpp.
{
return m_OptimizerValue;
}
itk::Array< double > mitk::RigidRegistrationObserver::GetCurrentTranslation | ( | ) |
Returns the current transformation parameters for the moving image to this iteration step.
These can include parameters for translation, scaling, rotation and shearing.
Definition at line 279 of file mitkRigidRegistrationObserver.cpp.
{
return m_Params;
}
static Pointer mitk::RigidRegistrationObserver::New | ( | ) | [static] |
void mitk::RigidRegistrationObserver::SetRemainingProgress | ( | int | steps ) |
Sets the remaining progress to the progress bar when the optimization process is done.
Definition at line 269 of file mitkRigidRegistrationObserver.cpp.
References mitk::ProgressBar::GetInstance(), and mitk::ProgressBar::Progress().
{ mitk::ProgressBar::GetInstance()->Progress(steps); }
void mitk::RigidRegistrationObserver::SetStopOptimization | ( | bool | stopOptimization ) |
Sets the stop optimization flag, which is used to call the StopOptimization() method of the optimizer.
Unfortunately it is not implemented for ExhaustiveOptimizer, LBFGSBOptimizer, AmoebaOptimizer, ConjugateGradientOptimizer and LBFGSOptimizer in ITK.
Definition at line 286 of file mitkRigidRegistrationObserver.cpp.
{ m_StopOptimization = stopOptimization; }