Python 正确使用numpy';s与图像卷积

Python 正确使用numpy';s与图像卷积,python,numpy,image-processing,conv-neural-network,convolution,Python,Numpy,Image Processing,Conv Neural Network,Convolution,我正在观看,想用一个3x3过滤器卷积一个6x6图像。我与numpy的合作方式如下: image = np.ones((6,6)) filter = np.ones((3,3)) convolved = np.convolve(image, filter) 运行此命令会出现一个错误,提示: ValueError: object too deep for desired array 我可以从中理解如何正确使用convolve方法 还有,有没有一种方法可以用numpy进行快速卷积?code>np

我正在观看,想用一个
3x3
过滤器卷积一个
6x6
图像。我与numpy的合作方式如下:

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

convolved = np.convolve(image, filter)
运行此命令会出现一个错误,提示:

ValueError: object too deep for desired array
我可以从中理解如何正确使用
convolve
方法


还有,有没有一种方法可以用numpy进行快速卷积?

code>np。不幸的是,卷积函数只适用于一维卷积。这就是为什么你会犯错误;您需要一个允许执行二维卷积的函数

然而,即使它真的起作用了,实际上你的操作是错误的。机器学习中所谓的卷积在数学中更恰当地称为互相关。它们实际上几乎是一样的;卷积涉及翻转滤波器矩阵,然后执行互相关

要解决您的问题,您可以查看
scipy.signal.correlate
(另外,不要使用
filter
作为名称,因为您将隐藏内置函数):

输出:

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.]])
array([[9., 9., 9., 9.],
       [9., 9., 9., 9.],
       [9., 9., 9., 9.],
       [9., 9., 9., 9.]])
这是完全互相关的标准设置。如果要删除将要删除的元素,请传递
mode='valid'

from scipy.signal import correlate

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

correlate(image, f, mode='valid')
输出:

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.]])
array([[9., 9., 9., 9.],
       [9., 9., 9., 9.],
       [9., 9., 9., 9.],
       [9., 9., 9., 9.]])

我看到输出是一个
8x8
矩阵。从我在视频中看到的情况来看,它必须是一个
4x4
矩阵。@SuhailGupta
8x8
数组是通过完全互相关生成的,这是默认设置。如果在机器学习上下文中执行互相关,则可能只希望在未添加的元素上执行互相关,这可以通过
mode='valid'
获得。我编辑了我的答案以反映这一点。