簡體   English   中英

正確使用numpy的卷積與圖像

[英]Correctly using the numpy's convolve with an image

我正在CNN上觀看Andrew Ng的視頻,並希望將3 x 3濾鏡的6 x 6圖像卷積。 我用numpy進行處理的方式如下:

image = np.ones((6,6))
filter = np.ones((3,3))

convolved = np.convolve(image, filter)

運行此命令將顯示錯誤消息:

ValueError: object too deep for desired array

我可以從volve的numpy文檔中了解如何正確使用convolve方法。

另外,有沒有辦法用numpy進行大步卷積?

不幸的是, np.convolve函數僅適用於一維卷積。 這就是為什么您會得到一個錯誤; 您需要一個可以執行二維卷積的函數。

但是 ,即使它確實起作用,您實際上也會執行錯誤的操作。 機器學習中所謂的卷積在數學上更恰當地稱為互相關 它們實際上幾乎是相同的。 卷積涉及翻轉濾波器矩陣,然后執行互相關。

要解決您的問題,您可以查看scipy.signal.correlate (同樣,不要使用filter作為名稱,因為您將scipy.signal.correlate內置函數):

from scipy.signal import correlate

image = np.ones((6, 6))
f = np.ones((3, 3))

correlate(image, f)

輸出:

array([[1., 2., 3., 3., 3., 3., 2., 1.],
       [2., 4., 6., 6., 6., 6., 4., 2.],
       [3., 6., 9., 9., 9., 9., 6., 3.],
       [3., 6., 9., 9., 9., 9., 6., 3.],
       [3., 6., 9., 9., 9., 9., 6., 3.],
       [3., 6., 9., 9., 9., 9., 6., 3.],
       [2., 4., 6., 6., 6., 6., 4., 2.],
       [1., 2., 3., 3., 3., 3., 2., 1.]])

這是完全互相關的標准設置。 如果要刪除依賴零填充的元素,請通過mode='valid'

from scipy.signal import correlate

image = np.ones((6, 6))
f = np.ones((3, 3))

correlate(image, f, mode='valid')

輸出:

array([[9., 9., 9., 9.],
       [9., 9., 9., 9.],
       [9., 9., 9., 9.],
       [9., 9., 9., 9.]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM