我有一個大小爲[c, n, m]
的矩陣,其中c
是多個通道; n
和m
是寬度和高度。在特定的例子中,我有一個有1000個通道的矩陣。我想分別爲每個通道使用大小爲a x a
的內核進行卷積。在我的例子中,內核大小是3 x 3
。在scipy
或numpy
中有沒有函數可以做這種操作,而不用循環遍歷信道?python - 分別爲每個通道3d數組與2d內核的卷積
我發現scipy.ndimage.convolve
函數,但我認爲我不能在不使用循環的情況下將此函數應用於此問題。
我有一個大小爲[c, n, m]
的矩陣,其中c
是多個通道; n
和m
是寬度和高度。在特定的例子中,我有一個有1000個通道的矩陣。我想分別爲每個通道使用大小爲a x a
的內核進行卷積。在我的例子中,內核大小是3 x 3
。在scipy
或numpy
中有沒有函數可以做這種操作,而不用循環遍歷信道?python - 分別爲每個通道3d數組與2d內核的卷積
我發現scipy.ndimage.convolve
函數,但我認爲我不能在不使用循環的情況下將此函數應用於此問題。
將您的矩陣視爲圖像並使用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.
我想你只需要讓你的內核三維。像這樣的東西應該工作:
kernel = kernel[:, :, None]
如果scipy.ndimage.convolve
不適合3D陣列工作,你可以嘗試scipy.signal.convolve
。
偉大的建議,如果你想遠離opencv –