conv2
|
Страница в процессе разработки. |
Двумерная свертка.
| Библиотека |
|
Аргументы
Входные аргументы
#
A —
входной массив
вектор | матрица
Details
Входной массив, заданный как вектор или матрица.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
B —
второй входной массив
вектор | матрица
#
v —
второй входной вектор
вектор-строка | вектор-столбец
#
shape —
участок свертки
"full" (по умолчанию) | "same" | "valid"
Details
Участок свертки, задаваемый одним из следующих значений:
-
"full"— возвращает полную двумерную свертку. -
"same"— возвращает центральную часть свертки, того же размера, что и исходная матрицаA. -
"valid"— возвращает только ту часть свертки, которая вычислена без дополнения нулями.
Выходные аргументы
#
C —
двумерная свертка
вектор | матрица
Details
Двумерная свертка, возвращаемая в виде вектора или матрицы. Если A и B — матрицы, то свертка C = conv2(A,B) имеет размер size(A)+size(B)-1. Если m,n = size(A), p = length(u) и q = length(v), то свертка C = conv2(u,v,A) имеет m+p-1 строк и n+q-1 столбцов.
Если один или несколько входных аргументов функции conv2 имеют тип Float32, то выходной аргумент будет иметь тип Float32. В противном случае conv2 преобразует входные данные в тип Float64 и возвращает тип Float64.
| Типы данных |
|
Примеры
Двумерная свертка
Details
Бывает полезно сравнивать входные данные свертки непосредственно с выходными. Функция conv2 позволяет контролировать размер выходных данных.
Создадим случайные матрицы A размером и B размером . Вычислим полную свертку A и B, которая представляет собой матрицу размером .
import EngeeDSP.Functions: conv2
A = rand(3, 3)
B = rand(4, 4)
Cfull = conv2(A, B)
6×6 Matrix{Float64}:
0.192995 0.882682 0.775044 0.405206 0.103599 0.0162149
0.097371 1.17042 1.53107 1.55316 0.520306 0.126147
0.441852 1.15874 1.98734 3.1404 1.30511 0.484233
0.27297 0.973765 1.87607 2.67335 1.76588 1.15007
0.245543 0.433698 1.24257 1.63366 1.89067 1.4068
0.0713151 0.203243 0.630603 0.901696 1.01698 0.577671
Вычислим центральную часть свертки Csame, которая является подматрицей Cfull того же размера, что и A. Csame равна Cfull[3:5, 3:5].
Csame = conv2(A, B, "same")
3×3 Matrix{Float64}:
1.98734 3.1404 1.30511
1.87607 2.67335 1.76588
1.24257 1.63366 1.89067
Извлечение ребер двумерного пьедестала
Details
Алгоритм поиска ребер Собеля использует двумерную свертку для обнаружения ребер на изображениях и других двумерных данных.
Создадим и построим двумерный пьедестал с внутренней высотой, равной единице.
A = zeros(10, 10)
A[3:7, 3:7] .= 1.0
surface(A)
Выполним свертку строк матрицы A с вектором u, а затем — свертку строки результата с вектором v. Свертка извлечет горизонтальные края пьедестала.
import EngeeDSP.Functions: conv2
u = [1, 0, -1]'
v = [1, 2, 1]
Ch = conv2(u, v, A)
surface(Ch)
Чтобы извлечь вертикальные края пьедестала, поменяем порядок свертки с u и v на обратный.
Cv = conv2(v, u, A)
surface(Cv)
Вычислим и нанесем на график объединенные края пьедестала.
surface(sqrt.(Ch.^2 .+ Cv.^2))