[英]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.