我有一个大小为[c, n, m]
的矩阵,其中c
是多个频道; n
和m
是宽度和高度。在特定示例中,我有一个具有1000个通道的矩阵。我想分别为每个通道使用大小为a x a
的内核进行卷积。在我的示例中,内核大小为3 x 3
。 scipy
或numpy
中是否有任何函数执行此类操作而不通过循环遍历通道?
我找到了scipy.ndimage.convolve
函数,但我认为如果不使用循环,我就不能在这个问题上应用该函数。
答案 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.