1.1 卷积的定义
-
“卷积”其实是一个数学概念,它描述一个函数和另一个函数在某个维度上的加权“叠加”作用。函数定义如下:
-
其中,函数 f f f和函数 g g g 是卷积对象, a a a为积分变量,星号“*”表示卷积。公式所示的操作,被称为连续域上的卷积操作。这种操作通常也被简记为如下公式:
1.12 离散卷积和多维卷积
- 一般情况下,我们并不需要记录任意时刻的数据,而是以一定的时间间隔(也即频率)进行采样即可。对于离散信号,卷积操作可用如下表示:
- 当然,对于离散卷积的定义可推广到更高维度的空间上。例如,二维的公式可表示为公式
1.3 生活中的卷积
- 在一根铁丝某处不停地弯曲,假设发热函数是 f ( t ) f(t) f(t),散热函数是 g ( t ) g(t) g(t),此时此刻的温度就是 f ( t ) f(t) f(t)跟 g ( t ) g(t) g(t)的卷积
- 在一个特定环境下,发声体的声源函数是 f ( t ) f(t) f(t),该环境下对声源的反射效应函数是 g ( t ) g(t) g(t),那么在这个环境下感受到的声音就是 f ( t ) f(t) f(t)的和 g ( t ) g(t) g(t) 的卷积。
2. 卷积的计算方法和实现
2.1 单通道、二维卷积
2.2 带填充的单通道、二维卷积运算
2.3 输出矩阵计算公式
2.4 代码
- 步骤一:导入工具包
from scipy import signal
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
- 步骤二:读取图片和设置卷积核
gary = Image.open('image/1.png').convert('L')
img_arr = np.array(gary) # 2 维矩阵
print(img_arr.shape)
flt = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
- 步骤三:计算卷积并画出图形
# 把图像的数组和设计好的卷积和作二维卷积运算,设计边界处理方式为symm
grad = signal.convolve2d(img_arr, flt,boundary='symm', mode='same').astype("int32")
plt.figure("Conv2D")
plt.subplot(121)
plt.imshow(gary, cmap='gray') # 显示原始的图
plt.xticks([])
plt.yticks([])
plt.subplot(122)
plt.xticks([])
plt.yticks([])
plt.imshow(grad, cmap='gray') # 卷积后的图
plt.show()