Хотя в других ответах уже упоминается scipy.signal.convolve2d
в качестве эквивалента, я обнаружил, что результаты при использовании mode='same'
.
отличаются, в то время как conv2
в Matlab приводит к появлению артефактов в нижней и правой частиimage, 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)