我的高斯过滤器太慢了

时间:2016-08-24 09:08:43

标签: python scipy

我正在做一个简单的高斯模糊,因为我不能让scipy的卷曲工作,我自己做了:

def Convolve(matr_, ker_):
    output = matr_.astype(np.float64)
    for x in range(len(matr_)):
        for y in range(len(matr_[x])):
            sum = 0
            count = 0
            width = int(len(ker_)/2)
            for x_c in range(len(ker_)):
                for y_c in range(len(ker_)):
                    x_index = x - x_c + width
                    y_index = y - y_c + width
                    if (x_index >= 0) and (x_index < len(matr_)) and (y_index >= 0) and (y_index < len(matr_[x])):
                        sum += ker_[x_c][y_c] * matr_[x_index][y_index]
                        count += ker_[x_c][y_c]
                    else:
                        #print("{0} -> {1}, {2} -> {3}".format(x, x_index, y, y_index))
                        pass
            output[x][y] = sum/count
    return output.astype(matr_.dtype)

我也在这里规范化像素,因此它们仍然总是适合matr_的类型。但它的工作速度非常慢,使用1440x900图像需要20秒才能完成。如何才能更快地开展工作?

1 个答案:

答案 0 :(得分:0)

如果可以避免,就不应该在Python中使用循环。使用Numpy或Pandas并处理载体。

如果 使用循环(在您的示例中似乎不是这种情况),请使用Numba包。