[Insight-users] parameters for a 1+1 evolutionary optimizer
Luis Ibanez
luis.ibanez at kitware.com
Thu Jun 3 13:21:17 EDT 2004
Hi Denis,
Thanks for your clarifications.
With your current mechanism you are ok just initializing
the transforms to identity. By resampling the image at
each level you are actually accounting for the transform
parameters of the previous registration.
It seems that the problem may just be with the generation
of random samples when you get closer to the 32x64 images.
Note that this are quite small images... You probably want
to reduce a lot the radius of the 1+1 optimizer in that case,
since you know that the translation shouldn't be too large
between two images of size 32x64.
A very interesting exercise would be to generate a plot
of the translation randomly generated by the 1+1 optimizer.
Something like the translation plots in the SoftwareGuide.
They will probably be very illuminating.
--
About the exception handling, you are ok by re-running the
registration. That is, you can take some corrective actions
as a response to the exception and the restart the registration.
Lydia has made some extensive testing of the exception throwing
behavior in the registration methods, so you can trust the
mechanism.
Regards,
Luis
----------------------
Denis Nikitenko wrote:
> Luis,
>
> 1) The moving image is interpolated after each level of subdivision. In effect,
> each level gets closer an closer to the optimal registration (or at least this
> is the idea). Once the subimages at each level have been rigidly matched, their
> centres are used at the control points for the interpolating spline. I'm not
> sure if it is necessary to initialize the next level of translations to the
> results of the previous one, since the translation has already been "applied"
> through interpolation, but I will give it a try.
>
> 2) and 3) At the moment I am not using rotation, I use a simple
> TranslationTransform, so if I understand the scaling factors correctly, I don't
> need them.
>
> 4) I have only been displaying the transform parameters so far. The exception
> occurs when, for instance, while registering 32x64 images, the optimizer picks a
> random sample [-31.962, -1.87488].
>
> As for the value returned by the metric - it is calculated after checking how
> many samples map outside of the moving image, so if the exception is thrown, the
> metric is not calculated. I will move this check to the end of GetValue() method
> and take a look at the results.
>
> I'm curious - what is the proper exception-handling procedure in this case? In
> the examples, which I used as the basis for my code, once the exception is
> thrown, the registration terminates. Should I attempt instead to adjust the
> transform/optimizer parameters and attempt the registration once more?
>
> Dennis
>
>
>>Hi Denis,
>>
>>Thanks for posting the additional details of your program.
>>
>>1) Shouldn't you initialize the transforms of the
>> subimages to the translation that you already
>> resolved from the larger image ?
>>
>> Otherwise you are not taking advantage of the
>> natural multi-resolution approach that you are
>> using.
>>
>> If you start always from null translations,
>> your sub-images may have to move a relatively
>> large distance in order to get registered.
>>2) Ok, using a new optimizer is fine. Just make sure
>> that the scaling parameters you pass to it, are
>> proportional to the extent of the image that you
>> are trying to register.
>>
>>
>>3) Nope, by scaling factors I meant the array
>> of scaling parameters. This is the array that
>> allows you to compoensate for the difference
>> in the dynamic range between the rotational
>> and translational components.
>>
>> Rotations are propotional to radians... thus
>> around -1:1, while translation are proportional
>> to millimeters (if you are using CT or MRI), thus
>> in the range -500:500.
>>
>> Please look at the example ImageRegistration8.cxx
>> to see the use of the scaling parameters. In fact
>> most of the examples in
>>
>> Insight/Examples/Registration
>>
>> are using parameter scaling.
>>
>>
>>4) My Mistake about
>> "the value returned by the Transform"
>> what I wanted to say was:
>> "the value returned by the Metric"
>> Sorry about that.
>>
>>
>>Please let us know of your findings,
>>
>>
>> Thanks
>>
>>
>>
>> Luis
>
>
More information about the Insight-users
mailing list