Python中有没有MATLAB的conv2函数的等效?

11 投票
4 回答
15833 浏览
提问于 2025-04-16 04:15

Python或者它的某些模块有没有类似于MATLAB中conv2函数的功能呢?更具体一点,我想找的是能做和MATLAB中conv2(A, B, 'same')一样计算的东西。

4 个回答

1
scipy.ndimage.convolve

它在n维空间中进行。

11

虽然其他回答提到了 scipy.signal.convolve2d 作为一个类似的工具,但我发现使用 mode='same' 时,结果是有差别的。

在 Matlab 的 conv2 中,处理图像时会在底部和右侧出现一些不自然的痕迹,而 scipy.signal.convolve2d 则是在顶部和左侧出现这些痕迹。

可以查看这些链接,里面有图展示了这种情况(因为我没有足够的声望直接发图片):

卷积后的巴巴拉图像左上角

卷积后的巴巴拉图像右下角

下面这个包装函数可能效率不高,但在我的情况下,通过将输入的两个数组和输出数组都旋转180度,解决了这个问题:

import numpy as np
from scipy.signal import convolve2d

def conv2(x, y, mode='same'):
    return np.rot90(convolve2d(np.rot90(x, 2), np.rot90(y, 2), mode=mode), 2)
6

看起来你需要的是 scipy.signal.convolve2d 这个东西。

撰写回答