On Sat, May 8, 2010 at 5:58 AM, Son Hua <song...@gmail.com> wrote: > Hi, > > Can anybody show me some hints on how to implement an image warping function > efficiently in Python or PIL? Suppose we have a function f(x, y) -> (x', y') > that warps a pixel location (x, y) to (x', y'). Because (x', y') may end up > to be non-integer, and many (x, y) can map to the same (x', y'), reverse > mapping is used. That is at every destination pixel (x', y'), we go and find > the original pixel location (x, y) by taking (x, y) = f_1(x', y'), where f_1 > is the inverse function of f. > > Suppose the inverse function f_1 is given. So, for each pixel in the > destination image, we can map to a non-integer pixel in the source image. > Therefore, we must bilinear interpolate at the source location for the > color.
The transform(MESH) operation might be what you need. http://effbot.org/tag/PIL.Image.Image.transform Instead of mapping between individual pixels, cover the output image with a grid, and calculate the source pixels for the corners of each grid rectangle (forming a quadrilateral area). Pass in the resulting list of (grid rectangle, quadrilateral) pairs to transform(MESH), and it'll take care of the rest. (you can use a generator to produce mesh pairs on the fly) The result is (usually) an approximation, with the maximum error controlled by the grid resolution. </F> _______________________________________________ Image-SIG maillist - Image-SIG@python.org http://mail.python.org/mailman/listinfo/image-sig