[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.
>
> ------------------------------------------------------------------------
>