[Insight-developers] BasicFilters/itkRecursiveSeparableImageFilter possible bug

Luis Ibanez luis.ibanez@kitware.com
Wed, 08 May 2002 14:42:05 -0400


Jisung,

Your are right,

The RecursiveSeparable filter assumes that every dimension
is at least of size four.  There is a theoretical reason behind that.

This 4 number comes from the fact that the IIR recursive filter
that is applied for approximating the Gaussian (in the derived class)
 requires four values (four neighbors).

We could force the filter to run on  less than four but the output
will not have  much use.  It will be like applying a cubic BSpline
in a single value.

I'm affraid that in this case it is better to manage the data as
a 2D image.  You may not want to do a 3D registration on it
anyways since as soon as is it tilted on X or Y, it will go of the
plane and only one line of pixels will be contributing to the
image metric. (if you are registering it to a similar image).

If the other image you are registering against, is an actual
volume. You can get around of the problem by exchanging
the role of the images on the registration process.  The Gaussian
is applied only to one of the images during the computation of the
Metric derivative.  So if you exchange the images the one-slice
image will not be subject to the effect of the recursive filter.

Also, in general, if one image is much bigger that the other, you
are better using the small image as the Fixed image because
points are mapped from the fixed one to the moving one.


We should probably add the 4 pixel limitation to Doxygen doc
as a warning and in the actual code throw an exception whenever
the number of pixels is less than four.



    Luis



=====================

Jisung Kim wrote:

>Hello.
>
>I encountered a seg fault error while I was running
>the MultiResMIRegistration example with an image that
>has only one slice. I traced down the source of error
>to the itkRecursiveSeparableImageFilter in the
>BasicFilters directory. In that filter, the
>FilterDataArray method seems to assume that the size
>of each dimension is larger  than four. 
>
>Adding if conditions to initializations of borders and
>changing the type of the for loop indexes from
>unsigned to signed, the seg fault error is gone.
>However, I don't know this modification is
>theorectically correct.
>
>I hope somebody can tell me if I am doing right.
>
>Thanks,
>
>Jisung.
>
>=====
>Jisung Kim
>bahrahm@yahoo.com
>106 Mason Farm Rd.
>129 Radiology Research Lab., CB# 7515
>Univ. of North Carolina at Chapel Hill
>Chapel Hill, NC 27599-7515
>
>__________________________________________________
>Do You Yahoo!?
>Yahoo! Health - your guide to health and wellness
>http://health.yahoo.com
>_______________________________________________
>Insight-developers mailing list
>Insight-developers@public.kitware.com
>http://public.kitware.com/mailman/listinfo/insight-developers
>