双三次插值 python实现_Python:用GPU实现双三次插值

这篇博客对比了在Python中使用scipy和pyvips库进行双三次插值的速度。实验结果显示,尽管pyvips并非GPU实现,但在处理图像缩放时速度显著快于scipy。文章提到了在特定硬件环境下,pyvips的性能优势,并指出两库在处理小图像时可能存在位置差异和内核差异。
摘要由CSDN通过智能技术生成

它不是GPU(而是尝试利用线程和CPU的向量单元),但是pyvips比scipy快很多,您可以测试一下。在

我做了个基准:import sys

import time

import scipy.ndimage

import pyvips

scale = 10

n_loops = 10

start = time.time()

test_image = scipy.ndimage.imread(sys.argv[1])

for i in range(0, n_loops):

result = scipy.ndimage.interpolation.zoom(test_image, scale)

end = time.time()

print 'scipy took', end - start

start = time.time()

test_image = pyvips.Image.new_from_file(sys.argv[1])

for i in range(0, n_loops):

result = test_image.resize(scale).write_to_memory()

end = time.time()

print 'pyvips took', end - start

# transform with both libraries to compare results

ndi = scipy.ndimage.imread(sys.argv[1])

result = scipy.ndimage.interpolation.zoom(ndi, scale)

scipy.misc.imsave('ndi.tif', result)

im = pyvips.Image.new_from_file(sys.argv[1], access='sequential')

result = im.resize(scale)

result.write_to_file('pyvips.tif')

两者都默认为双三次方。pyvips是一个惰性库,因此您需要在末尾添加额外的write_to_memory()来生成内存数组。在

在这个运行Ubuntu17.10的四核八线程桌面上,有所有库的打包版本和512x512单声道版本的“lena”测试映像,我看到:

^{pr2}$

GPU升级版显然会再快一次,但也许pyvips足够快了?在

如果您比较两个输出图像,您将看到scipy图像上移了一小部分。对于非常小的输入图像,您可以更清楚地看到发生了什么,例如,这个3x3像素的图像:

fb058c41d15314383bb8a5c921728366.png

当scipy和pyvips缩放20倍时:

319696849661ceb2a8471db8df9de014.png

这让我很困惑。此外,它们显然使用不同的内核,这也很奇怪。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值