使用PIL和Numpy的Python图像过滤太慢

时间:2011-03-18 08:18:16

标签: python numpy python-imaging-library

我正在尝试使用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"  

2 个答案:

答案 0 :(得分:1)

查看this question here的答案。

高斯模糊滤镜是可分离的,这意味着您可以相当多地降低算法的复杂性(除了查看其他答案的建议,即并行化)。

答案 1 :(得分:0)

您是否尝试过分析这个?如果您发现自己花费了大部分时间,那么将更加明显地集中精力进行优化。

这部分看起来非常简单,您可能希望使用多线程或多处理,这取决于大部分时间是在GIL中执行python还是在它之外的numpy。