Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions

mitk::RigidRegistrationObserver Class Reference
[Classes related to rigid registration]

Observer to react on rigid registration optimizer events. More...

#include <mitkRigidRegistrationObserver.h>

List of all members.

Public Types

typedef RigidRegistrationObserver Self
typedef itk::Command Superclass
typedef itk::SmartPointer< SelfPointer
typedef
itk::SingleValuedNonLinearOptimizer 
OptimizerType
typedef OptimizerTypeOptimizerPointer
typedef itk::ExhaustiveOptimizer ExhaustiveOptimizerType
typedef ExhaustiveOptimizerTypeExhaustiveOptimizerPointer
typedef
itk::GradientDescentOptimizer 
GradientDescentOptimizerType
typedef
GradientDescentOptimizerType
GradientDescentOptimizerPointer
typedef
itk::QuaternionRigidTransformGradientDescentOptimizer 
QuaternionRigidTransformGradientDescentOptimizerType
typedef
QuaternionRigidTransformGradientDescentOptimizerType
QuaternionRigidTransformGradientDescentOptimizerPointer
typedef itk::LBFGSBOptimizer LBFGSBOptimizerType
typedef LBFGSBOptimizerTypeLBFGSBOptimizerPointer
typedef
itk::OnePlusOneEvolutionaryOptimizer 
OnePlusOneEvolutionaryOptimizerType
typedef
OnePlusOneEvolutionaryOptimizerType
OnePlusOneEvolutionaryOptimizerPointer
typedef itk::PowellOptimizer PowellOptimizerType
typedef PowellOptimizerTypePowellOptimizerPointer
typedef itk::FRPROptimizer FRPROptimizerType
typedef FRPROptimizerTypeFRPROptimizerPointer
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 AmoebaOptimizerTypeAmoebaOptimizerPointer
typedef
itk::ConjugateGradientOptimizer 
ConjugateGradientOptimizerType
typedef
ConjugateGradientOptimizerType
ConjugateGradientOptimizerPointer
typedef itk::LBFGSOptimizer LBFGSOptimizerType
typedef LBFGSOptimizerTypeLBFGSOptimizerPointer
typedef itk::SPSAOptimizer SPSAOptimizerType
typedef SPSAOptimizerTypeSPSAOptimizerPointer

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 ()

Detailed Description

Observer to react on rigid registration optimizer events.

See also:
ProgressBar

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.

Author:
Daniel Stein

Definition at line 62 of file mitkRigidRegistrationObserver.h.


Member Typedef Documentation

Definition at line 104 of file mitkRigidRegistrationObserver.h.

Definition at line 103 of file mitkRigidRegistrationObserver.h.

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.

Definition at line 73 of file mitkRigidRegistrationObserver.h.

Definition at line 92 of file mitkRigidRegistrationObserver.h.

Definition at line 91 of file mitkRigidRegistrationObserver.h.

Definition at line 77 of file mitkRigidRegistrationObserver.h.

Definition at line 76 of file mitkRigidRegistrationObserver.h.

Definition at line 83 of file mitkRigidRegistrationObserver.h.

Definition at line 82 of file mitkRigidRegistrationObserver.h.

Definition at line 110 of file mitkRigidRegistrationObserver.h.

Definition at line 109 of file mitkRigidRegistrationObserver.h.

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.

Definition at line 88 of file mitkRigidRegistrationObserver.h.

Definition at line 80 of file mitkRigidRegistrationObserver.h.

typedef itk::QuaternionRigidTransformGradientDescentOptimizer mitk::RigidRegistrationObserver::QuaternionRigidTransformGradientDescentOptimizerType

Definition at line 79 of file mitkRigidRegistrationObserver.h.

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.

Definition at line 112 of file mitkRigidRegistrationObserver.h.

Definition at line 66 of file mitkRigidRegistrationObserver.h.

Definition at line 98 of file mitkRigidRegistrationObserver.h.

typedef itk::VersorRigid3DTransformOptimizer mitk::RigidRegistrationObserver::VersorRigid3DTransformOptimizerType

Definition at line 97 of file mitkRigidRegistrationObserver.h.

Definition at line 101 of file mitkRigidRegistrationObserver.h.

Definition at line 100 of file mitkRigidRegistrationObserver.h.


Constructor & Destructor Documentation

mitk::RigidRegistrationObserver::RigidRegistrationObserver (  ) [protected]

Definition at line 21 of file mitkRigidRegistrationObserver.cpp.

                                                         : m_OptimizerValue(0), m_StopOptimization(false)
{  
}

Member Function Documentation

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 
)

Not implemented...

Definition at line 260 of file mitkRigidRegistrationObserver.cpp.

{
}
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;
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines