[Insight-users] Re: Registration : tunning parameters

Luis Ibanez luis.ibanez@kitware.com
Wed, 08 Jan 2003 10:45:08 -0500


Hi Valli,


Here are several suggestion that may help you to
solve your registration problem.


1) The first thing you may want to do is to
    connect an Observer to the optimizer of
    the registration method.

    How to add an observer is described in detail
    in the example:

    Insight/Examples/Registration/ImageRegistration3.cxx

   Probably the best way to tune the parameters of
   the registration is to trace the evolution of the
   transform parameters since they will tell you how
   fast and in which direction the optimization is
   going. With this insight you will be in a position
   of making educated decisions about how to modify
   the optimizer parameters.

2) You are probably using an Affine 3D transform now.
    I will suggest you to start with a simple
    TranslationTransform. Given that your images have
    correct scaling settings you may not need scaling
    in a first registration. Also typicaly medical image
    are more or less well aligned with the axis.

    The translation transform is fast and easy to
    interpret. So you could get it through pretty
    easily with the help of the command/observer.

    Once you have registered for translation, then
    move back to an Affine transform and *initialize*
    the translation component of the affine trasform
    with your results from the translation registration.
    That should give you a much better starting point.

3) Try replacing the MutualInformation Metric with
    the recently added MattesMutualInformation metric.
    The cost function of this last metric is smoother
    and is better suited for gradient descent
    optimization.

4) Before adding many levels to the multiresolution
    pyramid, try to verify visually that the registration
    of each level converged as expected. Avoid to move
    to the next level if the registration at the current
    level is not satisfactory, it is unlikely that the
    next level will make it better. So, start with just
    two levels making like a factor of 1:8. Look only at
    the result of the first level. Don't event bother
    about the last. Once you fine tune the parameters for
    the first level, add another level to the pyramid and
    do factors like 1:4:8. This time concentrate on tuning
    the parameters of the second level. Once this second
    level converge, add a third and use factors 1:2:4:8,
    work out now the third level parameters... and so on.



Please let us know if you continue experiencing any
difficulties,


   Thanks


    Luis



-----------------------------------------------------------

valli gummadi wrote:
> Dear Mr.Luis,
>             Thanks for your mail.We also agree with your 
> argument.Analyze people are not considering the spacing.
> 
>            I could get the registration output using multiresolution 
> example.I fell that output is also correct.But,I want to optimize the 
> quality of the output.B'Caz i want to fuse fixed and transformed Moving 
> volumes after registration.I am sending u the fusion output volume(both 
> expected and what i am getting.coloured is moving,grey is fixed 
> volume).In fusion,fixed and transformed moving volumes are  merged and 
> showed in single volume.After fusion i observed that transformed moving 
> is crossing fixed one.What i feel is it should not cross,both should be 
> placed one above the other exactly if moving is transformed correctly.
> 
>   I am listing the parameter values i have set to the multiresolution 
> registration.My fixed image size is 256X256X120 and moving image is of 
> size 120X120X48.I think shrink factors i have given are correct 
> values.But,I have doubt regarding the permute order parameters.What 
> these parameters hold.I think i can optimize by setting these to correct 
> values.
> 
> // get permute order
>     m_PermuteOrder[0] = 0;
>     m_PermuteOrder[1] = 1;
>     m_PermuteOrder[2] = 2;
> 
>     // get which axes to flip
>     m_FlipAxes[0] = 0;
>     m_FlipAxes[1] = 0;
>     m_FlipAxes[2] = 0;
> 
>     // Number of levels
>     m_NumberOfLevels = 4;
>     // fixed image shrink factors
>     m_FixedImageShrinkFactors[0] = 8;
>     m_FixedImageShrinkFactors[1] = 8;
>     m_FixedImageShrinkFactors[2] = 1;
> 
>     //moving image shrink factors
>     m_MovingImageShrinkFactors[0] = 4;
>     m_MovingImageShrinkFactors[1] = 4;
>     m_MovingImageShrinkFactors[2] = 1;
> 
>     // get number of iterations
>     m_NumberOfIterations[0] = 5000;
>     m_NumberOfIterations[1] = 2500;
>     m_NumberOfIterations[2] = 2500;
>     m_NumberOfIterations[3] = 2500;
> 
>     // get learning rates
>     m_LearningRates[0] = 1e-4 ;
>     m_LearningRates[1] = 1e-5 ;
>     m_LearningRates[2] = 5e-6 ;
>     m_LearningRates[3] = 1e-6 ;
> 
>     // get translation scale
>     m_TranslationScale = 320;
> 
> 
> Please help me how to solve my problem.Because, i have a very urgent 
> requirement for this.
> 
> Thanking U in advance.
> 
> Regards,
> Valli.
> 
> ------------------------------------------------------------------------
>