繁体   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