【问题标题】:Python image filtering with PIL and Numpy too slow使用 PIL 和 Numpy 进行 Python 图像过滤太慢
【发布时间】:2011-07-17 23:56:05
【问题描述】:

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

【问题讨论】:

标签: python numpy python-imaging-library


【解决方案1】:

查看this question here 的答案。

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

【讨论】:

    【解决方案2】:

    您是否尝试过对此进行分析?如果您发现自己将大部分时间都花在了哪些地方,那么集中在哪里进行优化就会更加明显。

    这部分看起来令人尴尬,您可能希望对这些使用多线程或多处理,这取决于大部分时间是花在 GIL 中执行 python 还是在 GIL 之外执行 numpy。

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 2012-03-30
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      相关资源
      最近更新 更多