[Insight-users] RecursiveGaussianImageFilter and normalization
Luis Ibanez
luis . ibanez at kitware . com
Thu, 18 Dec 2003 14:58:13 -0500
Hi Nicolas,
Thanks for pointing this out.
It certainly sounds like a bug on this filter.
The good news is that it should be pretty easy to fix.
Just to make sure that we don't lose track of this
issue, a bug entry was logged in the Bug tracker:
http://www . itk . org/Bug/
under Bug ID = 447
http://www . itk . org/Bug/bug . php?op=show&bugid=447&pos=3
You (as well as any ITK user) are welcome to get
login/passwords on the bug tracker and log bug entries
directly there. The bug tracking system is totaly open
and there are no requirements for getting an account.
It will be quite important for this particular bug
to add a test case in the testing file of this filter
in order to ensure that the normalization is respected
in the future.
About your second question:
Yes, the notion of NormalizationAccrossScale is required
for performing Scale Space analysis. This is quite important
for making possible to compare images at one scale with
image at another scale. A typical case is the needle
tracking system we have developed using ITK. If you look
for a surgical needle in a fluoroscopic image and you use
the Hessian of the image, it is important to get this
Hessian across different scales, one of which will be
optimal for the needle diameter as seen in the fluoroscopic
image. If we don't normalize across scales, the Hessians
of larger sigmas will be faded with respect to the ones
of smaller sigmas and the response of the image to the
needle diameter will not be visible.
Regards,
Luis
-------------------------
Nicolas Savoire wrote:
> Hello,
>
> I am using the RecursiveGaussianImageFilter to smooth an image and
> compute its derivatives, and I have some trouble with normalization. I
> expect this filter to give the result of the convolution with the
> gaussian function g(x) = 1/(sigma^2*2*pi) exp(x^2/(2*sigma^2)),
> nevertheless I get the right result only if I set
> NormalizationAcrossScale to true.
> On the other hand, if I want to compute the derivative of my image in
> the x direction, I have to set NormalizeAcrossScale to true for the
> smoothing filter and to false for the derivative filter in order to get
> the expected result. As for the second derivative in one direction, to
> get the correct result, one must set both NormalizeAcrossScale to false.
> This is somewhat not satisfying.
> I think the problem stems from the fact that the recursive filters used
> internally compute derivative without normalization:
> -> g0(x) = exp(-x^2/(2*sigma^2)) for zero order
> -> g1(x) = -x*g0(x) for first order
> -> g2(x) = (x^2-sigma^2)*g0(x) for second order
> and then either 1/sqrt(sigma^2*2*pi) or 1/sqrt(sigma^4*2*pi) is used to
> normalize the filter. It is not satisfying, because g1(x) is different
> from g0'(x) and g2(x) is different from g1'(x), which explains why some
> NormalizeAcrossScale flags must be set and others not, to get the
> expected result.
>
> I don't really get the usefulness of the NormalizeAcrossScale flag, is
> it related to the normalisation used in the scale-space theory for
> derivatives ?
>
> Nicolas
>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk . org
> http://www . itk . org/mailman/listinfo/insight-users
>