您还可以使用fft(执行卷积的较快方法之一)
from numpy.fft import fft2, ifft2
import numpy as np
def fft_convolve2d(x,y):
""" 2D convolution, using FFT"""
fr = fft2(x)
fr2 = fft2(np.flipud(np.fliplr(y)))
m,n = fr.shape
cc = np.real(ifft2(fr*fr2))
cc = np.roll(cc, -m/2+1,axis=0)
cc = np.roll(cc, -n/2+1,axis=1)
return cc
- https://gist.github.com/thearn/5424195
- 您必须将滤镜填充为与图像相同的尺寸(将其放置在“ zeros_like”垫中间)。
欢呼,丹
0
我正在研究使用Numpy的图像处理,并且面临卷积滤波的问题。
我想卷积一个灰度图像。 (将2d数组与较小的2d数组进行卷积)
有谁有想法来完善我的方法?
我知道scipy支持convolve2d,但我只想通过使用Numpy来制作convolve2d 。
我做了什么
首先,我将2D数组作为子矩阵。
子矩阵似乎很复杂,但是下图显示了我正在做的事情。
接下来,我将每个子矩阵乘以一个过滤器。
总结一下
因此,该过程可以称为我的卷积。
但是,我发现此my_convolve2d麻烦的原因有3个。
感谢您阅读本文。
更新的种类。我为自己写了一个conv3d。我将其保留为公共领域。