使用PIL和Numpy的Python图像滤波太慢
我正在用Python的PIL和Numpy实现一个最简单的高斯滤波器。现在一切都能正常工作,但速度非常慢 :( 我不知道怎么才能加快速度。你能帮帮我吗?
import os, sys
import Image, ImageEnhance
import numpy as np
if (len(sys.argv) > 1):
im = Image.open(sys.argv[1])
data = np.array(im.resize((200,200)))
out_data = np.array(data)
chs = len(data[0][0])
kernel = np.array([[1.,2,1],
[2,3,2],
[1,2,1]])
ctr = 1
kernel = kernel/np.sum(kernel)
for x in xrange(data.shape[0]):
for y in xrange(data.shape[1]):
for c in xrange(chs):
acc = 0
for i in xrange(kernel.shape[0]):
for j in xrange(kernel.shape[1]):
m = x + i - ctr
n = y + j - ctr
if (m >= 0 and n >= 0 and m < data.shape[0] and n < data.shape [1]):
acc += data[m][n][c]*kernel[i][j]
out_data[x][y][c] = acc
out = Image.new(im.mode, (data.shape[0], data.shape[1]))
out = Image.fromarray(out_data)
out.show()
else:
print "no file was passed"
2 个回答
0
你有没有试过分析一下这个程序的运行情况?如果你能找到大部分时间都花在哪里了,就会更清楚该集中精力优化哪些部分。
这里有些地方看起来可以并行处理,你可能想考虑使用多线程或多进程来加速这些部分,这取决于大部分时间是花在执行Python代码上(在GIL中),还是在使用numpy时(在GIL外)。
1
看看这个问题的回答:这里。
高斯模糊滤镜是可以分开的,这意味着你可以大大简化你的算法(除了参考其他回答中的建议,比如并行处理)。