[gdal-dev] Numerical instability with thin plate spline transform

Jan Hartmann j.l.h.hartmann at uva.nl
Thu Sep 8 08:23:51 EDT 2011


Not sure whether this can be considered a bug, so I give it for what it 
is worth.

I'm doing thin plate spline transformation from one set of projected 
coordinates to another. Both sets have values between -600000 and 600000 
(meters). A typical set of gcps looks like:

  -gcp 62402 -74383 181915 315371 \
  -gcp -100169 -24213 19685 366661 \
  -gcp 118323 233822 239994 623190 \
...

When transforming the the first two columns of this list with 
gdaltransform -tps, using the same gcp-list, the results should be 
exactly equal to the last two columns:

  (from gdal_tps.cpp:)
* The thin plate spline transformer produces exact transformation
  * at all control points and smoothly varying transformations between
  * control points with greatest influence from local control points.
  * It is suitable for for many applications not well modelled by polynomial
  * transformations.
  *


However, they aren't. With a few control points the differences are only 
in millimeters, but with a few hundred gcps the differences become 
meters, and above thousand points the error can get to fifty meters. The 
problem gets worse when some control points are very near to other ones. 
I was happy to discover that dividing all numbers by 1000 solves the 
problem, but there certainly is a numerical instability in the algorithm.

Of course, thin plate spline transformations normally use scan 
coordinates as input, and these are almost always small numbers. Even 
so, I can imagine problems with very large rasters and the rubber 
sheeting applications I am working with.

Jan


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20110908/dd55132c/attachment.html


More information about the gdal-dev mailing list