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