我正在将一些基于 PIL 的代码转换为 NumPy,但我发现该skimage.transform.rotate
函数比PIL 的Image.rotate
.
作为粗略的比较,使用skimage
' 旋转在 ~1000x1000 像素的图像上需要 ~2.2 秒,而Image.rotate
需要 ~0.1 秒:
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) # order=3 --> bi-cubic filtering
print "skimage.transform.rotate: %0.04f" %(time.time() - s, )
和输出:
$ py rotate.py
Image size: (1275, 1650)
Image.rotate: 0.1154
skimage.transform.rotate: 2.2310
(这些数字在多次运行中或多或少是一致的;我不认为这是没有运行足够测试的产物)
所以!那是怎么回事?有什么方法可以加快 skimage 的速度rotate
吗?
版本信息:
- 皮尔:1.1.7
- skimage:0.14.1
- 麻木:1.7.1
- 蟒蛇:2.7.2
可能还值得注意:
- 如果
BICUBIC
不使用过滤,则该im.rotate
操作只需 ~0.01 秒,而设置order=0
为使用最近邻过滤,skimage.rotate
则需要 ~0.6 秒。