[Insight-users] 2D multi resolution registration

Armel.Rosselet@varian.com Armel.Rosselet@varian.com
Mon, 14 Apr 2003 15:51:49 +0200


Hi,

I have a question regarding the MultiResolutionImageRegistrationMethod,
which I tried to use for a 2D registration problem

I followed the code example "Hello World Registration" in the ITK Software
Guide.
The components I use are:
- TranslationTransform
- RegularStepGradientDescentOptimizer
- NormalizedCorrelationImageToImageMetric
- LinearInterpolateImageFunction
- ImageRegistrationMethod (later: MultiResolutionImageRegistrationMethod)

The fixed image has a size of 512 x 384, the moving image: 244 x 321.

Both the fixed and moving image contain very simple objects of the same
size and shape. As expected the registration process was straightforward
and precise.

BUT... when I tried to speed up the process using the multi-resolution
registration, I got a problem, which I could not solve until now:

I experimented with two (fixed and moving) standard pyramids (with the
schedule 8,8,4,4,2,2,1,1). First everything seemed to be OK. But then I saw
that the first two levels (8 and 4) are skipped. I.e. no optimization is
done there. The following if-statement (line 184) in the file
itkRegularStepGradientDescentBaseOptimizer.cxx stops the process at the
very beginning:

  if( gradientMagnitude < m_GradientMagnitudeTolerance )
  {
    m_StopCondition = GradientMagnitudeTolerance;
    StopOptimization();
    return;
  }

the user has no influence on m_GradientMagnitudeTolerance, because it's
hard-coded but by
setting the optimizer scales to an other value I could enforce the
registration process for the first two levels.
        itk::RegularStepGradientDescentOptimizer::ScalesType
                        optimizerScales( Dimension );
        optimizerScales[0] = 1.0/32.0;
        optimizerScales[1] = 1.0/32.0;
        optimizer->SetScales( optimizerScales );

But then I had an other (maybe related) problem: the result of the first
level (scale factor 8) was nonsense, although the images are still large
and structured enough for an easy registration. To prove that the
registration still should work, I scaled down the original images myself by
a factor of 8 and used the normal ImageRegistrationMethod... with
absolutely no problem (and of course very fast).

Somehow the problem seems to be connected to the spacing values of the
pyramid levels (which are 8,4,2, and 1). When I tried to set them all to 1,
it seemed to work better, but this is of course a mere hack and the
framework somehow resets the spacing to the old values.

I also did some experiments by using the Pyramid Output(i) myself (at the
different levels i of the pyramid) but actually got the same trouble

So, is this a known problem in 2D registration or am I setting it up the
wrong way ?

Thanks for any answer !!!

Armel