python - 分别为每个通道卷入带有2d内核的3d数组

时间:2017-06-01 18:07:15

标签: python numpy scipy convolution

我有一个大小为[c, n, m]的矩阵,其中c是多个频道; nm是宽度和高度。在特定示例中,我有一个具有1000个通道的矩阵。我想分别为每个通道使用大小为a x a的内核进行卷积。在我的示例中,内核大小为3 x 3scipynumpy中是否有任何函数执行此类操作而不通过循环遍历通道?

我找到了scipy.ndimage.convolve函数,但我认为如果不使用循环,我就不能在这个问题上应用该函数。

2 个答案:

答案 0 :(得分:5)

我认为你只需要让你的内核三维。这样的事情应该有效:

kernel = kernel[:, :, None]

如果scipy.ndimage.convolve不适用于3D数组,则可以尝试scipy.signal.convolve

答案 1 :(得分:3)

将矩阵视为图像并使用opencv。将数组的形状更改为[height,width,num_channels]。然后在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.