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.

I know that doing this pixel per pixel in Python is very slow. For example:

for i in xrange(height):
    for j in xrange(width):
        (x, y) = f_1(j, i)
# 1. Check if (x, y) is inside the source image. If out of boundary, skip. # 2. Bilinear sampling at (x, y) at the source image to obtain color C # 3. Paste the color C into (i, j) location in the destination image.
        # next...

I'm doing this warping as the final stage of an image mosaicking program. The size of the image is quite big, about 8000x2000.

So, any ideas about how to make it fast, except implementing the whole thing in C? As I also used the dictionary data structure available in Python, so integrating C here may be painful.

Thank you in advance.

Best regards,
SH.


_______________________________________________
Image-SIG maillist  -  Image-SIG@python.org
http://mail.python.org/mailman/listinfo/image-sig

Reply via email to