Chris Ps wrote:
Lately I'm dealing with image statistics with PIL (1.1.6). After I've read that numpy (1.2.1) is very fast, I've also tried this library to make the same calculations.

In general, I'm not sure there's any reason to expect better performance from numpy for things that are built in to (and done in C code) in PIL. numpy does give you access to more full featured manipulation, though.

Interesting results, just the same.

After all these tests I conclude that the problem is when numpy has to calculate the stats for large images. Probably mean() copies the image before calculations take place so this copy action costs considerable time.

I don't think mean() copies -- it certainly shouldn't have to.

However, this does:

mean(box[:,:,0])

indexing creates a copy, slicing does not, so you can do:

mean(box[:,:,0:1])

instead. That may be quite a bit faster.

However, numpy is vectorized, so I'd compute all three means at once:

image_array.reshape(-1,3).mean(axis=0)

what that does is reshape (without copying) the array into WxHx3 array, then do the mean over each band independently. I think that's about as fast as it can get.

For more ideas, try the numpy list.

-Chris



--
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

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

Reply via email to