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
矩阵。@SuhailGupta8x8
数组是通过完全互相关生成的,这是默认设置。如果在机器学习上下文中执行互相关,则可能只希望在未添加的元素上执行互相关,这可以通过mode='valid'
获得。我编辑了我的答案以反映这一点。