[Insight-users] Help with ITK registration

Luis Ibanez luis.ibanez at kitware.com
Sun Sep 13 10:19:07 EDT 2009


Hi  Somi,

Your multi-resolution strategy looks reasonable.

Please note the following:

1)  GDM may have a small capture radius (since it only
     works on the edges)  You may want to consider using
     the simple MeanSquares, at the first or first and second
     (coarsest) resolution levels.

    In case of doubt, plotting the metric close to the origin
    of the Transform parametric space, will give you a sense
    of how large the capture radius would be for the input
    image that you are using.

2)  The ITK implementation of Demons is separate from
      the standard registration framework. This is a separate
      class, and doesn't allow you chose the image metric.
      The Demons typical implementation (not just the ITK one)
      is equivalent to a MeanSquares metric.

      You could however, use the BSplineDeformableTransform,
      in the standard Image Registration framework, and you
      could combine with it any image metric of your choice.

3)  In order to change components at different resolutions,
     the simplest way to proceed is NOT to use the ITK
     multi-resolution filters, but to encode your own stages
     one by one.  The ITK multi-resolution filter is not quite
     designed for changing components at every resolution.


Please let us know if you have further questions,


     Luis


--------------------------------------------------------------------
On Thu, Sep 10, 2009 at 7:06 PM, somi <seesomi at gmail.com> wrote:
> Hi,
> I am trying to register two brain MR volumes. I plan to change the
> optimizer/Metric/Transform and interpolator at different resolutions levels.
> In particular I want to use the following combination at different
> resolution levels:
>
>  GDM=Gradient Difference metric : Edges contribute more than constant levels
>  NMI=normalized Mutual Information
>  EA= Evolutional algorithm
> RSGD=RegularStepGradientDescentOptimizer
>
>  Level -- Optimizer -- Metric -- Transform      -- Interpolator
>  0      -- RSGD       -- GDM    -- Translation  -- NN
>  1      -- RSGD       -- GDM    -- Versor3D    -- Linear
>  2      -- RSGD       -- GDM    -- Affine          -- Linear
>  3      -- RSGD       -- NMI      -- Affine          -- Linear
>  4      -- EA            -- NMI      -- Demons      -- Windowed Sync
>
> I plan to use Gradient Difference metric at coarse resolution levels because
> it gives more weight to edges.
>
> I have the following doubts in implementation:
>
> a) I did go through the theory superficially, and found the above to be a
> reasonable combination. If someone has more experience, could you suggest if
> the optimizer/metric/interpolator combination is reasonable or is there a
> better combination (I am registering Brain MR volumes) or it can only be
> determined after experimentation on my dataset ?
>
>
> b) This is more fundamental and implementation related. The general
> structure of my program is :
>
>
> // Code starts
> class CommandIterationUpdate : public itk::Command { ...print iteration
> updates here}
>
> //command observer
> class RegistrationInterfaceCommand : public itk::Command
> {...change parameters of registration here, e.g step size etc.}
>
> // main program
> main{}
>
> so for example if I have to change optimizer after a particular resolution
> level, how do I change it in my RegistrationInterfaceCommand and how will my
> CommandIterationUpdate change ? because in the commanditerationupdate, we
> have
>
> public:
>   typedef   itk::RegularStepGradientDescentOptimizer     OptimizerType;
> typedef   const OptimizerType   *           OptimizerPointer;
>
> and then we get position/value etc from this pointer. If my optimizertype
> changes when do I have to check what resolution level it is and user
> appropriate pointer?
>
> Also do we allocate memory and define all the optimizers/metric in the main
> program or can we do it in the RegistrationInterfaceCommand when a
> particular resolution is reached?
>
>
> Regards,
> Somi
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>
>


More information about the Insight-users mailing list