convolve2d#
- scipy.signal.convolve2d(in1, in2, mode='full', границе='fill', fillvalue=0)[источник]#
Свёртка двух двумерных массивов.
Свертка in1 и in2 с размером выхода, определяемым mode, и граничные условия, определяемые границе и fillvalue.
- Параметры:
- in1array_like
Первый вход.
- in2array_like
Второй вход. Должен иметь то же количество измерений, что и in1.
- modestr {‘full’, ‘valid’, ‘same’}, необязательный
Строка, указывающая размер вывода:
fullВыходные данные — полная дискретная линейная свёртка входных данных. (По умолчанию)
validВыходные данные состоят только из тех элементов, которые не зависят от дополнения нулями. В режиме 'valid' либо in1 или in2 должен быть как минимум таким же большим, как другой, по каждому измерению.
sameВыходные данные имеют тот же размер, что и in1, центрированный относительно вывода 'full'.
- границеstr {'fill', 'wrap', 'symm'}, опционально
Флаг, указывающий, как обрабатывать границы:
fillДополнить входные массивы значением fillvalue. (по умолчанию)
wrapциклические граничные условия.
symmсимметричные граничные условия.
- fillvalueскаляр, опционально
Значение для заполнения дополненных входных массивов. По умолчанию 0.
- Возвращает:
- выходndarray
Двумерный массив, содержащий подмножество дискретной линейной свёртки in1 с in2.
Примеры
Вычислить градиент изображения с помощью 2D свёртки с комплексным оператором Шарра. (Горизонтальный оператор действительный, вертикальный — мнимый.) Использовать симметричное граничное условие, чтобы избежать создания краёв на границах изображения.
>>> import numpy as np >>> from scipy import signal >>> from scipy import datasets >>> ascent = datasets.ascent() >>> scharr = np.array([[ -3-3j, 0-10j, +3 -3j], ... [-10+0j, 0+ 0j, +10 +0j], ... [ -3+3j, 0+10j, +3 +3j]]) # Gx + j*Gy >>> grad = signal.convolve2d(ascent, scharr, boundary='symm', mode='same')
>>> import matplotlib.pyplot as plt >>> fig, (ax_orig, ax_mag, ax_ang) = plt.subplots(3, 1, figsize=(6, 15)) >>> ax_orig.imshow(ascent, cmap='gray') >>> ax_orig.set_title('Original') >>> ax_orig.set_axis_off() >>> ax_mag.imshow(np.absolute(grad), cmap='gray') >>> ax_mag.set_title('Gradient magnitude') >>> ax_mag.set_axis_off() >>> ax_ang.imshow(np.angle(grad), cmap='hsv') # hsv is cyclic, like angles >>> ax_ang.set_title('Gradient orientation') >>> ax_ang.set_axis_off() >>> fig.show()