Python - 分别对每个通道使用二维卷积核进行三维数组的卷积

8
我有一个大小为[c,n,m]的矩阵,其中c是通道数,nm是宽度和高度。 在这个特定的例子中,我有一个具有1000个通道的矩阵。 我想针对每个通道单独使用大小为a x a的卷积核进行卷积。 在我的例子中,卷积核大小为3 x 3。 有没有scipynumpy中可以不通过循环迭代通道就可以完成这种操作的函数?
我发现了scipy.ndimage.convolve函数,但我认为我不能在不使用循环的情况下将该函数应用于此问题。
2个回答

14

我认为你只需要让你的内核变成三维的。类似这样的东西应该可以起作用:

kernel = kernel[:, :, None]

如果 scipy.ndimage.convolve 不能处理三维数组,你可以尝试使用 scipy.signal.convolve


4
如果你想要远离OpenCV,那么这是一个非常好的建议。 - Andrew Cassidy
1
这应该是被接受的答案。不会让事情变得更加复杂... 非常感谢! - Isi

5

将矩阵视为图像并使用opencv。将数组的形状更改为[高度,宽度,通道数]。然后在opencv中运行filter2D(用于图像的卷积函数)。

image = cv2.imread("some_image.jpg")
image.shape # (height, width, 3) # 3 is 3 channels for Red, Green, Blue
kernel = np.ones((3,3)) / 9.
image_blurred = cv2.filter2D(image, cv2.CV_64F, kernel) # will apply the kernel for each channel. You can have more than 3 channels.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接