2017-06-01 71 views
1

我有一個大小爲[c, n, m]的矩陣,其中c是多個通道; nm是寬度和高度。在特定的例子中,我有一個有1000個通道的矩陣。我想分別爲每個通道使用大小爲a x a的內核進行卷積。在我的例子中,內核大小是3 x 3。在scipynumpy中有沒有函數可以做這種操作,而不用循環遍歷信道?python - 分別爲每個通道3d數組與2d內核的卷積

我發現scipy.ndimage.convolve函數,但我認爲我不能在不使用循環的情況下將此函數應用於此問題。

回答

2

將您的矩陣視爲圖像並使用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. 
4

我想你只需要讓你的內核三維。像這樣的東西應該工作:

kernel = kernel[:, :, None] 

如果scipy.ndimage.convolve不適合3D陣列工作,你可以嘗試scipy.signal.convolve

+0

偉大的建議,如果你想遠離opencv –