[SciPy-user] Thin plates for a 3D deformation field
Robert Kern
robert.kern at gmail.com
Sat Oct 27 22:39:32 EDT 2007
Matthieu Brucher wrote:
> Hi,
>
> I wondered if someone knew of a package that allows the interpolation of
> a 3D deformation field with thin plates (or in fact with anything) based
> on a list of points and their associated deformation field.
> If only 2D deformation field is supported by a package, I'll go for it
> too ;)
Another alternative is to use the natural-neighbor interpolation that I coded
up. I've moved it to its own scikit for easier installation.
http://svn.scipy.org/svn/scikits/trunk/delaunay/
At the moment, I only support doing one dimension at a time, but that can be
easily worked around. Let's say you have your deformation field separated into 3
shape-(n,) arrays dx, dy, and dz and you have spatial coordinates in shape-(n,)
arrays x and y.
from scikits.delaunay import Triangulation
t = Triangulation(x, y)
dxinterp = t.nn_interpolator(dx)
dyinterp = t.nn_interpolator(dy)
dzinterp = t.nn_interpolator(dz)
# Use nn_extrapolator if you want to find values outside of the convex hull of
# the input points.
If your interpolating points are on a grid, the easiest way to get the
interpolated values is by "fake" slicing along the lines of numpy.mgrid.
dx2 = dxinterp[0:1:101j, 0:2:201j]
...
That interpolates the dx deformation across a grid going from 0 to 2 (inclusive)
at a step of 0.01 in the X direction and 0 to 1 (inclusive) at a step of 0.01 in
the Y direction (yes, the Y coordinate comes first; I'm not much happy with that
either, but it seemed the most consistent with the way indexing "looks"). That
should be reasonably fast; I've optimized grid-structured interpolating point sets.
Let me know if you try this and anything you think can or should be improved
about it.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
More information about the SciPy-User
mailing list