<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Hi,
<p>We are working on something that might help...
<p>We have an NDInterpolant class that contains an instance of a 1DInterpolant
class.
<br>The NDInterpolant class applies the 1DInterpolant in N dimensions (seperably)
to calculate values at non-integer point locations.
<p>The 1DInterpolant class is derived to provide linear, cubic, nearest
neighbor, Gaussian, etc interpolation.   Each derivation must
provide functions for value, first-derivative, second-derivation, and jet
(first and second derivative). Each derivation specifies the size of a
neighborhood it needs about a point to calculate a value at that point
(i.e., covolution kernel size).
<p>The 1DInterpolant class is templated to receive a function that provides
values at integer locations - i.e., to specify values at spline control
points. The 1DInterpolant class has an internal structure to archive values
at integer locations so that this function is called as few times as possible.
<p>This way, to do different types of data (or image) interpolation, all
you have to do is provide a function that returns the values at integer
data (image voxel) locations.
<p>This class set ties in with a set of optimizer classes (same hierarchy,
NDOptimizer, 1DOptimizer, derivatives of 1DOptimizer for Brendt's, golden
mean, etc. optimizers - these classes are templated to take a function
that returns values at integer data locations).
<p>Okay - interpolation is convolution, so there is some overlap with the
neighborhood operators, but we've found these classes to be nice in that
they operate on any data format (not just images) as well as data calculated
on the fly (via functions).
<p>I think nether single approach is sufficient, both should be provided.  
I just wanted you to know that there are other options.
<p>I hope this helps.   I expect these classes will be released
in a few (really, one or two) weeks.   We've been using them
(in non-itk form) for years.   They only require the numerics
library - they don't use the image class directly.
<p>Comments anyone?
<p>Thanks,
<br>Stephen
<p>Lydia Ng wrote:
<blockquote TYPE=CITE>Hi,
<p>For my algorithm I need to calculate values such as the curvature
<br>at a particular point. It would be good to do this using something
<br>much lighter weight than a process object.
<p>The two main reasons are:
<br>1) I may only want to calculate the curvature
<br>at specific pixels where the algorithm hasn't
<br>converged yet, or
<br>2) because of memory constraints, I may not want to
<br>store the curvature for every pixel in the image.
<br>I just want to use it at each pixel and then throw it
<br>away.
<p>I am implementing light weight class called ImageFunction,
<br>templated over
<p>a) the pixel type of the image to be processed,
<p>c) the pixel type for the output.
<p>b) the dimension of the image and
<p>template<class TInputPixel, class TOutputPixel,
<br>        unsigned int VImageDimension
= 2>
<br>class ImageFunction
<br>{
<br>        ...
<br>};
<p>Like an ImageIterator, ImageFunction would be initialized
<br>with an input image and keeps a reference to the image.
<p>The API would have a function
<p>TOutputPixel Evaluate(Index& index);
<p>which will return the value of that function at a
<br>particular pixel.
<p>Depending on the function, it may be able to return
<br>values at non-integer coordinates eg:
<p>TOutputPixel Evaluate(double * coord);
<p>With this, I can have a ImageCurvature subclass which
<br>calculates the curvature at a requested location.
<br>Other possibilities include
<br>interpolation, upwind derivatives etc.
<p>So not to duplicate efforts,
<br>have any of you got a similar class already?
<p>Cheers,
<br>Lydia
<p>_______________________________________________
<br>Insight-developers mailing list
<br>Insight-developers@public.kitware.com
<br><a href="http://public.kitware.com/mailman/listinfo/insight-developers">http://public.kitware.com/mailman/listinfo/insight-developers</a></blockquote>

<pre>-- 
===============================================
Stephen R. Aylward, Ph.D.
Assistant Professor of Radiology
Adjunct Assistant Professor of Computer Science
<A HREF="http://www.cs.unc.edu/~aylward">http://www.cs.unc.edu/~aylward</A>
aylward@unc.edu
(919)966-9695</pre>
 </html>