Функция
np.convolve
, к сожалению, работает только для свертки 1-D .Вот почему вы получаете ошибку;вам нужна функция, которая позволяет вам выполнять двумерную свертку.
Однако , даже если она сработала, у вас действительно неправильная операция.То, что называется сверткой в машинном обучении, более правильно называется взаимной корреляцией в математике.Они на самом деле почти одинаковы;Свертывание включает в себя переключение матрицы фильтра с последующим выполнением взаимной корреляции.
Чтобы решить вашу проблему, вы можете посмотреть на scipy.signal.correlate
(также не используйте filter
в качестве имени, поскольку вы будете затенятьвстроенная функция):
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.]])