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