SciPy Convolve

Самые популярные инструменты веб-разработки Изучение

Основная концепция свертки заключается в объединении двух сигналов с использованием некоторой математической функции для получения третьего сигнала. Это наиболее часто используемый метод цифровой обработки сигналов. Свертка двух сигналов рассматривается как интеграл свертки одного сигнала на другой сигнал. Это делается при умножении на скалярное произведение в каждой точке перекрывающихся векторов.

Та же концепция свертки используется в Python. Массив рассматривается как сигнал, который используется в функции SciPy Convolve для выполнения свертки над несколькими одномерными массивами. SciPy Convolve — это N-мерный массив. Обычно это две или более одномерных последовательности. В этой статье мы подробно обсудим функцию SciPy Convolve и попытаемся изучить ее использование на примерах.

Использование SciPy Convolve и его синтаксис

SciPy Convolve используется для свертки двух N-мерных массивов. Вот синтаксис функции свертки SciPy:

# scipy.signal.convolve(inp1, inp2, mode = ’full’, method = ‘auto’)

«inp1» — это первый входной массив, «inp2» — второй входной массив, и он должен иметь то же количество измерений, что и параметр «inp1». Параметр «режим» — это строковый параметр, определяющий размер вывода; он определяется тремя вариантами: тот же, действительный или полный. Это необязательный параметр.

«Полный» режим указывает, что должна быть обеспечена полная дискретная линейная свертка входных данных, и это режим по умолчанию; если режим не указан, по умолчанию считается «полный» режим. «Тот же» режим возвращает вывод в виде размера параметра «inp1», центрированного в соответствии с «полным» выводом.

Последний режим, также «действительный», возвращает элементы, которые не полагаются исключительно на заполнение нулями. Параметр «метод» — еще один необязательный параметр. Это строковый параметр, указывающий, какой метод следует использовать для свертки. Он также принимает один из трех аргументов; авто, ффф и директ. FFT — это преобразование Фурье, используемое для выполнения свертки путем вызова встроенной функции fftconvolve.

«Прямой» аргумент представляет прямую свертка, которая является основным определением свертки. И, наконец, аргумент «auto» предоставляется там, где требуется автоматический выбор аргумента «direct» или «fft», в зависимости от того, что быстрее. Аргумент auto используется по умолчанию; если ничего не указано, ’auto’ считается аргументом по умолчанию.

Читайте также:  VPN: что это такое и зачем он нужен

Выходом функции свертки будет подмножество дискретной линейной свертки inp1 с inp2. Давайте посмотрим на примеры ниже, чтобы понять, как реализовать SciPy Convolve.

Пример 1

Это самый первый пример этой статьи, который поможет прояснить мысли о теоретической информации, которую мы упомянули выше.

В этом примере мы построим гладкий импульс в форме квадрата, используя окно Ханна. Код программы использует массив np (обозначенный как sig_one) для построения кривой, а signal.convolve() используется для свертки сигналов.

См. полный код, прикрепленный ниже. Здесь мы сначала импортировали необходимые библиотеки и объявили массив. После вызова функции свертки мы построили график пульса. В остальной части кода вы можете видеть, что мы установили поля и отобразили на графике исходную, а также отфильтрованную импульсную характеристику и отфильтрованный сигнал.

from scipy import signal
import numpy as p
import matplotlib.pyplot as mtp

sig_one = p.repeat([1., 0., 1.], 100)
window_one = signal.windows.hann(65)
filtered_res = signal.convolve(sig_one, window_one, mode=‘same’) / sum(window_one)

figure_one, (axis_orig, axis_win, axis_filt) = mtp.subplots(3, 1, sharex=True)
axis_orig.plot(sig_one)
axis_orig.set_title(‘Here is the Original pulse’)
axis_orig.margins(0, 0.1)
axis_win.plot(window_one)
axis_win.set_title(‘Here is the Filter impulse response’)
axis_win.margins(0, 0.1)
axis_filt.plot(filtered_res)
axis_filt.set_title(‘Here is the Filtered signal’)
axis_filt.margins(0, 0.1)
figure_one.tight_layout()
figure_one.show()

Обратите внимание, что код выполняется в коллабе Google. Google Collaboratory — это инструмент с открытым исходным кодом, используемый для реализации кода Python. Это бесплатный инструмент, к которому легко получить доступ через Google или любой другой браузер.

После выполнения кода вы увидите волны. Обратитесь к приложенному изображению ниже.

Обратите внимание, что код выполняется в коллабе Google. Google Collabo

Пример 2

Это второй пример этой статьи, и здесь мы будем использовать метод ndimage, чтобы продемонстрировать функциональность функции свертки.

В этом примере параметр режима ndimage принимает один из пяти аргументов; обернуть, отразить, ближайший, постоянный и отразить. Аргумент «отражать» представляет симметричную половину выборки, расширенную за счет воспоминаний о ребре. «Константа» используется для представления всех значений, которые находятся за границей, но с одним и тем же постоянным значением.

«Ближайший» представляет конкретное значение, которое расширяется за счет репликации последнего пикселя. «Зеркало» представляет собой центр последнего пикселя, а аргумент «обтекание» представляет собой переход к противоположному краю. См. приведенный ниже код:

from scipy import ndimage
import numpy as p
one_arr = p.array([[1, 0, 2],
[1, 1, 0],
[1, 0, 0]])
two_arr = p.array([[0, 1, 0],
[1, 1, 0],
[0, 1, 0],
[0, 1, 1],
[0, 1, 0]])
print(ndimage.convolve(one_arr, two_arr, mode=‘nearest’))

Вот вывод приведенного выше кода, который, как вы можете видеть, представляет собой запутанный массив.

о выше кода, который, как вы можете видеть

Пример 3

В следующем примере демонстрируется функция свертки 2d. Два двумерных массива свернуты с помощью функции convolve2d. Convolve2d использует два дополнительных необязательных параметра «fillvalue» и «boundary».

Параметр «граница» принимает один из трех аргументов; заполнить, обернуть и симм. Аргумент fill является значением по умолчанию и дополняет входные массивы значением fillvalue. Аргумент ’wrap’ представляет круговые граничные условия. Аргумент ’symm’ представляет собой симметричные граничные условия.

Значение fillvalue представлено скалярным значением, которое используется для заполнения входного массива пэда, и его значение по умолчанию равно 0. В прилагаемом коде мы вычислим градиент изображения.

from scipy import signal
from scipy import misc
import numpy as p
import matplotlib.pyplot as mtb
ascent_one = misc.ascent()
scharr_one = p.array([[3-3j, 0-10j,  +3 -3j],
[6+0j, 1+ 0j, +6 +0j],
[ —2+2j, 0+6j,  +3 +2j]])
grad_one = signal.convolve2d(ascent_one, scharr_one, boundary=‘symm’, mode=‘same’)
fig_one, (axis_orig, axis_mag, axis_ang) = mtb.subplots(3, 1, figsize=(7, 16))
axis_orig.imshow(ascent_one, cmap=‘gray’)
axis_orig.set_title(‘Original’)
axis_orig.set_axis_off()
axis_mag.imshow(p.absolute(grad_one), cmap=‘gray’)
axis_mag.set_title(‘Gradient magnitude Result’)
axis_mag.set_axis_off()
axis_ang.imshow(p.angle(grad_one), cmap=‘hsv’)
axis_ang.set_title(‘Gradient orientation Result’)
axis_ang.set_axis_off()
fig_one.show()

Вот вывод приведенного выше кода:

Вот вывод приведенного выше

Заключение

В этой статье мы изучили функцию SciPy Convolve с помощью примеров. Сначала мы обсудили базовую концепцию функции свертки, затем узнали о синтаксисе функции свертки, а позже мы рассмотрели три разных примера, чтобы увидеть использование функции свертки SciPy совсем по-другому.

Оцените статью
bestprogrammer.ru
Добавить комментарий