我正在尝试使用PIL和Numpy在Python中实现最简单的高斯过滤器。一切正常但很慢:(无法弄清楚如何加速。你能帮忙吗?
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"
答案 0 :(得分:1)
查看this question here的答案。
高斯模糊滤镜是可分离的,这意味着您可以相当多地降低算法的复杂性(除了查看其他答案的建议,即并行化)。
答案 1 :(得分:0)
您是否尝试过分析这个?如果您发现自己花费了大部分时间,那么将更加明显地集中精力进行优化。
这部分看起来非常简单,您可能希望使用多线程或多处理,这取决于大部分时间是在GIL中执行python还是在它之外的numpy。