<!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>Sure.<BR>
<BR>
The file is itkGaussianDerivativeImageFunction.txx<BR>
<BR>
The lines of code are those in Evaluate or EvaluateAtIndex. For instance:<BR>
<BR>
EvaluateAtIndex(const IndexType&amp; index) const<BR>
{<BR>
&nbsp; OutputType gradient;<BR>
<BR>
&nbsp; for(unsigned int i=0; i&lt;itkGetStaticConstMacro(ImageDimension2);i++)<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; // Apply each gaussian kernel to a subset of the image<BR>
&nbsp;&nbsp;&nbsp; InputPixelType pixel = this-&gt;GetInputImage()-&gt;GetPixel(index);<BR>
&nbsp;&nbsp;&nbsp; double value = pixel;<BR>
<BR>
&nbsp;&nbsp;&nbsp; // gaussian blurring first<BR>
&nbsp;&nbsp;&nbsp; for(unsigned int direction=0;direction&lt;itkGetStaticConstMacro(ImageDimension2);direction++)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i != direction)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int id= 2*direction+1; // select only gaussian kernel;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int center = (unsigned int)((m_OperatorArray[id].GetSize()[direction]-1)/2);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TOutput centerval = m_OperatorArray[id].GetCenterValue();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_OperatorArray[id][center] = 0;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_OperatorImageFunction-&gt;SetOperator(m_OperatorArray[id]);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value = m_OperatorImageFunction-&gt;EvaluateAtIndex(index)+centerval*value;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp; // then derivative in the direction<BR>
&nbsp;&nbsp;&nbsp; signed int center = (unsigned int)((m_OperatorArray[2*i].GetSize()[i]-1)/2);<BR>
&nbsp;&nbsp;&nbsp; TOutput centerval = m_OperatorArray[2*i].GetCenterValue();<BR>
&nbsp;&nbsp;&nbsp; m_OperatorArray[2*i][center] = 0;<BR>
&nbsp;&nbsp;&nbsp; m_OperatorImageFunction-&gt;SetOperator(m_OperatorArray[2*i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp; value = m_OperatorImageFunction-&gt;EvaluateAtIndex(index)+centerval*value;<BR>
<BR>
&nbsp;&nbsp;&nbsp; gradient[i] = value;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;<BR>
&nbsp; return gradient;<BR>
}<BR>
<BR>
The gaussian blur part perfom a convolution on the central column of pixel, the neighbor columns are not convolved<BR>
the dervative will be convolved with an horizontal filter, it takes then the next two pixel neighbours of the central pixel in order to have a row for convolution. Instead of taking the neighb. pixels, computed values from the other 2 columns should be taken.<BR>
<BR>
<BR>
For information I have implemented a new version of the filter for gaussian derivative that handle 1,2,3 or more dimensions for images. A version for a Hessian Image Function is almost finished, I will surely sumit it the insight journal if I find time or just drop it to the list.<BR>
<BR>
Before this I want to be sure that what I am commenting on the current itk impl. is correct, I have to be sure that my understanding of convolution is good ^_^<BR>
<BR>
Best Regards,<BR>
<BR>
Jerome Schmid<BR>
<BR>
-------- Message d'origine--------<BR>
De: Henning Meyer [<A HREF="mailto:tutmann@gmail.com">mailto:tutmann@gmail.com</A>]<BR>
Date: lun. 3/20/2006 9:47<BR>
À: SCHMID, Jerome<BR>
Objet : Re: [Insight-users] itkGaussianDerivativeImageFunction, are you correct?<BR>
<BR>
Jerome,<BR>
<BR>
can you please adress the file and the lines of code you refer to?<BR>
<BR>
Thank you,<BR>
<BR>
Henning<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>