Основное различие заключается в том, что d-тип вывода определяется по аргументам.
Из кода, который вы выложили, я подозреваю, что ваше изображение имеет тип dtype uint8
, а ядро - int
.
import numpy as np
from scipy import signal, ndimage
from scipy.misc import face
bw = face()[..., 0]
filter = np.full((3, 3), -1)
filter[1, 1] = 8
bw.dtype
# dtype('uint8')
filter.dtype
# dtype('int64')
В этой ситуации выходные типы dtypes:
sig = signal.convolve(bw, filter, 'same')
ndi = ndimage.convolve(bw, filter)
sig.dtype
# dtype('int64')
ndi.dtype
# dtype('uint8')
Помимо этого и различных граничных условий результаты фактически одинаковы:
np.all(sig.astype(np.uint8)[1:-1,1:-1] == ndi[1:-1,1:-1])
# True
Отображаемоеизображения выглядят совершенно иначе, по-видимому, из-за переполнения в uint8
арифметике.