[Image-SIG] Two PIL based Hill Shading Implementations, using Python & Python/C.

John Barratt jb at langarson.com.au
Tue Feb 6 05:50:50 CET 2007

This is a follow up on my previous posts about PIL/gd speed comparisons, 
which is perhaps now a bit of a misnomer.  It is now really just a 
C/python speed comparison for custom intensive image operations given it 
is clearly possible to access the same sort of raw data with both gd and 
PIL within C.

My real end goal is to find the best way to make CPU intensive imaging 
apps go *much* faster, but still be able to use python & PIL/gd for the 
bulk of the code.

Specifically I have created two implementations here of a hill shading 
algorithm using PIL, with one version using pure python, the other using 
python and a c implementation for the core loop.

For this particular implementation the relative speedup for the specific 
example given was about 20 times for the python/c version over the pure 
python version.  A 2300x1900 input image yielded essentially the same 
speedup ratio.

It wasn't too hard to do the core C part of the code since it was so 
similar to the python version.  It was a little fiddly getting the 
python-c interface code together, and navigating down to the raw data 
inside PIL.  However now this is done this should not be a real 
hindrance to any further implementations like this.

Full details including the code, and sample input & output images are here :


I'm not sure how easily this implemented using array operations in numpy 
given nature of the algorithm, and in turn how relatively efficient it 
would be.

Comments welcome. :)



John Barratt - www.langarson.com.au
          Python, Zope, GIS, Weather

More information about the Image-SIG mailing list