<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.6944.0">
<TITLE>RE: [Insight-users] itkGaussianDerivativeImageFunction, are you correct?</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Thanks for your prompt answer,<BR>
<BR>
I see your point when I am performing conv in _more than ONE pixel_. The conv on a column can be reused for neighbours. Okay in a whole image computing we should get a hit in performance. However I am performing here an image Function, i.e. I compute on *isolated* pixel. That would mean that separable convolution is equivalent to standard 2D conv. when computing in one pixel?<BR>
<BR>
Moreover itk implementation continues to be to me the implementation that is forgetting to compute enough values, a simple example on paper seems to reveal it...Maybe I cannot understand how the itk implementation is working?<BR>
<BR>
<BR>
Best Regards,<BR>
<BR>
Jerome Schmid<BR>
<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: Richard Beare [<A HREF="mailto:richard.beare@gmail.com">mailto:richard.beare@gmail.com</A>]<BR>
Sent: Mon 3/20/2006 12:17 PM<BR>
To: SCHMID, Jerome<BR>
Subject: Re: [Insight-users] itkGaussianDerivativeImageFunction, are you correct?<BR>
<BR>
Hi,<BR>
<BR>
I haven't gone through your maths thoroughly, but perhaps you are<BR>
forgetting to compute enough values. In your example you compute the<BR>
value at the center of a 3x3 array of pixels. However the column<BR>
convolutions you carry out can be used to compute the values at<BR>
locations next to the centre pixel as well. The cost becomes<BR>
proportional to kernel size + kernel size when extending the approach<BR>
to an infinite array.<BR>
<BR>
I hope this is the answer.<BR>
<BR>
<BR>
<BR>
On 3/20/06, SCHMID, Jerome &lt;jeromeschmid@surgery.cuhk.edu.hk&gt; wrote:<BR>
&gt;<BR>
&gt;<BR>
&gt; Hi,<BR>
&gt;<BR>
&gt;&nbsp; After having read the itkGaussianDerivativeImageFunction,<BR>
&gt; I am<BR>
&gt;&nbsp; facing some interrogations on basic image processing of convolution stuff,<BR>
&gt; I am starting to wonder whether or<BR>
&gt;&nbsp; not my knowledge on the topic is a little &quot;rusty&quot;.<BR>
&gt;<BR>
&gt;&nbsp; Reading the itkGaussianDerivativeImageFunction I couldn't<BR>
&gt; agree with its implementation.<BR>
&gt;&nbsp; Okay it seems that it is for 2D images and hat some redundant stuff is<BR>
&gt; present. This has been emphasized in<BR>
&gt;&nbsp; an insight journal review:<BR>
&gt;<BR>
&gt; <A HREF="http://www.insight-journal.org/view_reviews.php?back=publications.php%3Fjournalid%3D4%26order%3Dreviews%26revision_display%3D&pubid=78">http://www.insight-journal.org/view_reviews.php?back=publications.php%3Fjournalid%3D4%26order%3Dreviews%26revision_display%3D&pubid=78</A><BR>
&gt;<BR>
&gt;&nbsp; I am not commenting these things, but rather the core itself, i.e. how to<BR>
&gt; perform the derivation with<BR>
&gt;&nbsp; gaussian. Please find below three links for 3 pics, they are not<BR>
&gt; masterpieces but they help to follow me ( if you read<BR>
&gt;&nbsp; this you are doing it :) )<BR>
&gt;<BR>
&gt;&nbsp; def.jpg: <A HREF="http://moscao.free.fr/PrivateDownloads/def.jpg">http://moscao.free.fr/PrivateDownloads/def.jpg</A><BR>
&gt;<BR>
&gt;&nbsp; we perform derivation along x on a 2D image. I want to have the value for<BR>
&gt; the green pixel. The def of the derivation<BR>
&gt;&nbsp; and the convolution, gives two 1-D convolution kernels, g1(x) and g0(y).<BR>
&gt; The size of<BR>
&gt;&nbsp; the 2D kernel is fixed as a 3x3 area in red, so the 2 filters have size of<BR>
&gt; 3 ( we do not discuss here the correctness of<BR>
&gt;&nbsp; extents, etc. )<BR>
&gt;<BR>
&gt;&nbsp; We will so perform a separable convolution with these 2 kernels.<BR>
&gt;<BR>
&gt;&nbsp; my.jpg: <A HREF="http://moscao.free.fr/PrivateDownloads/my.jpg">http://moscao.free.fr/PrivateDownloads/my.jpg</A><BR>
&gt;<BR>
&gt;&nbsp; What I am excpecting for conv. I convolve each column in the red area with<BR>
&gt;&nbsp; the g0(y) kernel. This give me a row of three elements. Then I convolve<BR>
&gt; this row with g1(x ).<BR>
&gt;<BR>
&gt;&nbsp; itk.jpg: <A HREF="http://moscao.free.fr/PrivateDownloads/itk.jpg">http://moscao.free.fr/PrivateDownloads/itk.jpg</A><BR>
&gt;<BR>
&gt;&nbsp; What itk does. It performs a conv with the pixel columm (central col in the<BR>
&gt;&nbsp; red area) that gives a new value.<BR>
&gt;&nbsp; Then a three elements row is build with in its center the previous computed<BR>
&gt;&nbsp; value, and with a and b. a and b are the neighb of green pixel in image.<BR>
&gt;&nbsp; This row is then convolved with g1(x).<BR>
&gt;<BR>
&gt;&nbsp; I cannot figure out how this may produce the same result....!<BR>
&gt;<BR>
&gt;&nbsp; I will sound as an idiot, but if my implementation is the correct one, and<BR>
&gt; not the itk one,<BR>
&gt;&nbsp; I cannot figure out why the separable convolution is faster than the usual<BR>
&gt; one !!!???<BR>
&gt;<BR>
&gt;&nbsp; It is said everywhere and I have been taught this, that the cost per pixel<BR>
&gt; in normal conv is kernelSize*KernelSize mult. ops instead of KernelSize +<BR>
&gt; KernelSize for separable conv. By taking a simple image and counting the ops<BR>
&gt; in both cases I cannot find this result....<BR>
&gt;<BR>
&gt;&nbsp; Can somebody enlight me? this is turning me mad for such a classic image<BR>
&gt; processing stuff....<BR>
&gt;<BR>
&gt;&nbsp; Last pt, but nor relevant here:<BR>
&gt;<BR>
&gt;&nbsp; In itk code, Truncated kernel of the derivative is not normalized as<BR>
&gt;&nbsp; usual, i.e. divide each coeff by sum(k=-1,..,k=1)( k * g1(k) ).<BR>
&gt;<BR>
&gt;<BR>
&gt;&nbsp; Thanks for reading this looooong email and be nice if the answer is so<BR>
&gt; simple.<BR>
&gt;<BR>
&gt;&nbsp; regards,<BR>
&gt;<BR>
&gt;&nbsp; Jerome Schmid<BR>
&gt;<BR>
&gt;<BR>
&gt;<BR>
&gt;<BR>
&gt;<BR>
&gt; _______________________________________________<BR>
&gt; Insight-users mailing list<BR>
&gt; Insight-users@itk.org<BR>
&gt; <A HREF="http://www.itk.org/mailman/listinfo/insight-users">http://www.itk.org/mailman/listinfo/insight-users</A><BR>
&gt;<BR>
&gt;<BR>
&gt;<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>