[Insight-users] Model-Image registration

Gavin Baker gavinb+xtk at cs.mu.OZ.AU
Mon Feb 28 06:14:08 EST 2005


Salut Julien,

On Fri, Feb 18, 2005 at 02:16:40PM -0500, Julien Jomier wrote:

> The MovingShape is a group containing three ellipses. The ellipses have 
> different transforms wrt the group. The result of the registration is 
> the transformation applied to the group and therefore, (as you wrote) 
> you should compose the resulting transformation (from the optimization) 
> which each individual ellipse's transform. The group should really be 
> seen as one object composed of 3 ellipses.

Right, that makes complete sense, thanks.

> > What I would like to do is also be able to optimise the _parameters_
> > of some parametric form of a model.  In the case of the ellipse, we
> > might want to perform a rigid body registration, thus getting a
> > rotation and translation transform, but as well we want to adjust the
> > major and minor axis lengths to best fit.
> 
> This is very good point. We had some discussion before on that topic. 
> The main issue in adding parameters to each SpatialObject is that 
> sometimes it doesn't make any sense and/or we don't want to optimize all 
> the parameters. I have an idea on how to solve this but I need to 
> experiment it before.

I'd love to hear your thoughts or any results of your experiments - it
would be incredibly useful to have such a capability, implemented in a
reasonably generic manner.

I've given a little thought to this, and one possibility is to define
some convention for spatial objects to map a parameter vector to the
parameters proper.  It could be done with something as simple as:

  /**
   * \brief Provide mapping from parameter array to data members
   */
  virtual void SetParametersFromList( const ParameterType& params )
  {
    if ( params.length() > 4 )
    {
      raise itkException("Too many parameters for object!\n");
    }

    this->m_Radius = params[0];
    this->m_Curvature = params[1];
    this->m_Omega = params[2];
    this->m_Gamma = params[3];
  }

  /**
   * \brief Returns a set of parameters that describe this instance
   */
  virtual ParameterType& GetParameterList()
  {
    ParameterType params[4];

    params[0] = this->m_Radius;
    params[1] = this->m_Curvature;
    params[2] = this->m_Omega;
    params[3] = this->m_Gamma;

    return params;
  }


Then we have a simple protocol for passing around parameter lists,
which could even be part of the optimizer's parameters.

This sort of feature could be useful in many contexts, such as
persistence, and even introspection.  Imagine a visual tool that takes
a descriptor of parameters (obviously more sophisticated than the
above) and can automatically generate a settings dialog to customize a
filter or object.  There are all sorts of potential uses.

> For the moment, you should be able to solve the problem in the metric. 
> In the metric you can increase the dimension of the parameters array and 
> use the extra parameters to change the size of the ellipse. However, you 
> will need to modify the ModelImageRegistration1.cxx example and 
> recompute the IsInside() at each iteration.

I'll have a go at this and report back with the results.

thanks, ciao -

  :: Gavin

-- 
Gavin Baker                                      Complex Systems Group
http://www.cs.mu.oz.au/~gavinb             The University of Melbourne


More information about the Insight-users mailing list