I'm in the process of converting some PIL code to NumPy, but I found that the skimage.transform.rotate function skimage.transform.rotate significantly slower than the PIL Image.rotate .
As a rough comparison, using skimage rotates on an image 1000 × 1000 pixels in size takes ~ 2.2 seconds, and Image.rotate takes ~ 0.1 seconds:
import time from PIL import Image import numpy as np from skimage.transform import rotate im = Image.open("some_big_image.png").convert("L") print "Image size: %s" %(im.size, ) s = time.time() im.rotate(10, Image.BICUBIC, expand=True) print "Image.rotate: %0.04f" %(time.time() - s, ) ima = np.array(im) / 255.0 s = time.time() rotate(ima, 10, order=3)
And the conclusion:
$ py rotate.py Image size: (1275, 1650) Image.rotate: 0.1154 skimage.transform.rotate: 2.2310
(these numbers are more or less consistent between several runs, I do not believe that this is an artifact, because of which there are not enough tests)
So! What's up with that? Is there any way to speed up skimage rotate ?
Version Information:
- PIL: 1.1.7
- skimage: 0.14.1
- numpy: 1.7.1
- Python: 2.7.2
You can also note:
- If
BICUBIC filtering BICUBIC not used, im.rotate operation takes ~ 0.01 seconds, and when setting order=0 , the closest neighbor filtering is used, skimage.rotate takes ~ 0.6 seconds.
source share