我正在做一个简单的高斯模糊,因为我不能让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秒才能完成。如何才能更快地开展工作?
答案 0 :(得分:0)
如果可以避免,就不应该在Python中使用循环。使用Numpy或Pandas并处理载体。
如果 使用循环(在您的示例中似乎不是这种情况),请使用Numba包。