Engee 文档

conv2

页面进行中。

二维卷积。

库::`工程师`

语法

函数调用

  • [参数:C]=conv2(___,[参数:形状]) -按照指定的形状返回卷积的一部分。 例如, C=conv2(A,B,"相同") 返回卷积的中心部分,其大小与 A.

争论

输入参数

# 一个 — 输入数组

+ 向量资料 | 矩阵

Details

指定为向量或矩阵的输入数组。

数据类型

漂浮64, 漂浮物32, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, 布尔</无翻译> 支持复数::是

# *B*是 第二输入阵列

+ 向量资料 | 矩阵

Details

第二个输入数组,设置为与数组进行卷积的向量或矩阵 [参数:A]. 阵列 B 它可能不是相同的大小 [参数:A].

数据类型

漂浮64, 漂浮物32, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, 布尔</无翻译> 支持复数::是

# *u*是 输入向量

+ 向量字符串 | 列向量

Details

输入向量,指定为行向量或列向量。 u 与矩阵的每一列进行卷积 [参数:A].

数据类型

漂浮64, 漂浮物32, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, 布尔</无翻译> 支持复数::是

# *v*是 第二输入向量

+ 向量字符串 | 列向量

Details

第二输入向量,指定为行向量或列向量。 v 与卷积向量的每一行执行卷积 [参数:u] 带矩阵列 [参数:A].

数据类型

漂浮64, 漂浮物32, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, 布尔</无翻译> 支持复数::是

# 形状 — 卷积的部分

+ "满" (默认)| "一样" | "有效"

Details

由以下值之一定义的卷积部分:

  • "满" -返回一个完整的二维卷积。

  • "一样" -返回卷积的中心部分,与原始矩阵大小相同 [参数:A].

  • "有效" -只返回卷积的计算部分,而不填充零。

输出参数

# C-二- 维卷积

+ 向量资料 | 矩阵

Details

作为向量或矩阵返回的二维卷积。 如果 [参数:A][参数:B] -矩阵,然后卷积 C=conv2(A,B) 尺寸为 尺寸(A)+尺寸(B)-1. 如果 m,n=尺寸(A), p=长度(u)q=长度(v),则卷积 C=conv2(u,v,A)m+p-1 线和 n+q-1 列。

如果函数有一个或多个输入参数 conv2 有一个类型 漂浮物32,那么输出参数将是类型 漂浮物32. 否则的话 conv2 将输入数据转换为类型 漂浮64 并返回类型 漂浮64.

数据类型

漂浮64, 漂浮物32</无翻译>

例子:

二维卷积

Details

将卷积的输入数据直接与输出数据进行比较会很有用。 功能 conv2 允许您控制输出数据的大小。

让我们创建随机矩阵 A 大小 B 大小 . 计算完整卷积 AB,这是一个大小的矩阵 .

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,Csame,它是 [医]法尔 大小与 A. Csame,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

Sobel的边缘搜索算法使用二维卷积来检测图像和其他二维数据中的边缘。

让我们创建并构建一个内部高度等于1的二维基座。

A = zeros(10, 10)
A[3:7, 3:7] .= 1.0
surface(A)

conv2 pedestal

让我们执行矩阵的行的卷积 A 用向量 u,然后将结果串与向量卷积 v. 卷积将提取基座的水平边缘。

import EngeeDSP.Functions: conv2

u=[1,0,-1]'
v=[1,2,1]
Ch=conv2(u,v,A)
表面(Ch)

conv2 pedestal 1

要提取基座的垂直边缘,请从 uv 在回来的路上。

Cv = conv2(v, u, A)
surface(Cv)

conv2 pedestal 2

让我们计算并绘制基座的组合边缘。

surface(sqrt.(Ch.^2 .+ Cv.^2))

conv2 pedestal 3

此外

二维卷积

Details

对于离散二维矩阵 下面的等式定义了卷积 :

导致有效索引的所有值都将贯穿。 .

使用此定义,函数 conv2 计算两个矩阵的直接卷积,而不是基于FFT的卷积。