返回

卷积运算

Convolution - 图像处理的核心操作
第二章 / 图像预处理
参数面板

先观察右侧三层链路,再结合参数调整;当前窗口、翻转核权重和原始卷积和是一条连续证据链,主图结果为归一化后的亮度显示。

尺寸关系

示例图保持小尺寸,并默认采用不补零卷积。输出边长 = 输入边长 - 核大小 + 1。

12 - 3 + 1 = 10
预设尺寸拉普拉斯

先选预设类别,再选支持的核大小。导数类预设通常只提供到 7×7;11×11 主要保留恒等、均值和高斯这类大核平滑模板。

3
当前核大小是 3×3,所以下方会展开对应大小的输入窗口, 结果图会缩成 10×10
窗口定位辅助操作
用方向键或下方 4 个按钮移动当前窗口;也可以直接点击原图或结果图跳转。
当前像素 (0, 0)1 / 100
方向
概念说明

卷积在计算什么

空间滤波通过局部邻域和权重计算改变图像响应,是卷积运算的典型用途。图源:scikit-image denoise 示例
任务

当 3×3 或更大的小窗口滑到图像某个位置时,需要把窗口里的每个像素按一定权重加权求和,得到一个新的输出像素。问题是这些权重从何而来,以及不同权重会产生什么效果。

思路

常用办法是定义一个卷积核来规定窗口里每个位置的权重:可以全部取相同值做平滑平均,也可以中心为正、周围为负来提取边缘,还可以让权重朝某个方向倾斜以检测特定走向的轮廓。换核就是换计算规则。

观察

拖动窗口看当前邻域里的原始像素,再对照核矩阵里逐项相乘后的结果:改变核类型或核大小,输出变化来自权重分布和窗口范围的改变。

方向键移动 / 点击原图或结果图跳转当前结果像素 (0, 0)
1 / 100
原图12×12
红框对应当前参与计算的 3×3 输入窗口,可点击原图调整位置
卷积计算
1 / 100
结果10×10
绿框对应结果图中的当前输出像素(共 10×10),可点击结果图直接定位
输入窗口放大1-3 行 / 第 1-3
放大后仍是 3×3
上方红框对应的输入窗口会在下方展开;每一格仍对应原图中的同一位置。
窗口数值摘要3×3
当前窗口共 9 个像素,完整数值在下方矩阵区查看。
中心位置
2 行,第 2
中心像素
0.1
翻转核计算逐格对齐
0
1
0
1
-4
1
0
1
0
逐格乘积9
0.1×00.00
0.1×10.10
0.1×00.00
0.1×10.10
0.1×-4-0.40
0.1×10.10
0.1×00.00
0.1×10.10
0.1×00.00
结果图定位1 行 / 第 1
对应右侧大图绿框
结果图第 1 行,第 1
坐标 (0, 0)
原始卷积和
0.00
这一步先得到该位置的原始卷积和;右侧主图显示的是整张结果图归一化后的亮度版本。
当前输出像素的卷积表达式

下方内容只保留一个公式,并把上方当前计算步骤如何代入该公式明确展开。

当前输出值 0.00
G(0,0) = i j f(0+i,0+j) g(-i,-j) = 0.00

当前步中,红色输入窗口覆盖原图第 13 行、第 13 列; 该区域对应公式中的输入项 f(0+i,0+j)

黄色卷积核先展示参数区输入的核模板,真正参与卷积求和的是它关于中心翻转后的权重 g(-i,-j) 。蓝色乘积矩阵给出 f(0+i,0+j) g(-i,-j) 的逐项结果,对全部 9 项求和后,得到当前输出值 0.00, 对应结果图第 1 行、第 1 列的原始卷积值。右侧主图为了方便比较不同核的响应强弱,显示的是整张结果图归一化后的亮度版本。

公式在当前步骤中的具体代入

下面四个对象与上方当前流程一一对应:输入窗口、卷积核、逐项乘积以及输出结果。

9 项乘积
输入窗口 f(0+i,0+j)
原图第 1-3 行 / 第 1-3
该矩阵由上方红色输入窗口直接展开得到。
0.11
0.11
0.11
0.12
0.12
0.12
0.13
0.13
0.13
参数区输入核
这是未翻转前的模板
先保留你输入的原始核矩阵,方便和参数区保持一致;真正参与卷积求和的翻转核在右侧单独展开。
0
1
0
1
-4
1
0
1
0
卷积使用的翻转核 g(-i,-j)
与左侧输入窗口逐项对应
真正的卷积会先把核关于中心翻转,再和当前输入窗口逐项相乘。
0
1
0
1
-4
1
0
1
0
逐项乘积 f(0+i,0+j) g(-i,-j)
每格显示乘法与结果
该矩阵对应公式中的每一项乘积;对其全部元素求和,即得到当前输出像素的卷积值。
0.1×0=0.00
0.1×1=0.10
0.1×0=0.00
0.1×1=0.10
0.1×-4=-0.40
0.1×1=0.10
0.1×0=0.00
0.1×1=0.10
0.1×0=0.00
输出结果 G(0,0)
原始卷积和
0.00
这一数值由乘积矩阵的全部元素求和得到。右侧主图显示的是整张卷积结果归一化后的亮度图,不直接等于这个原始数值。
卷积核的作用

卷积核可以理解成一张局部权重表:窗口里的每个像素都先乘上对应权重,再把全部乘积求和。

当前预设:拉普拉斯 3×3
恒等

只保留中心像素,输出基本等于输入,用来说明“卷积核就是一组局部权重”。

3×35×57×79×911×11
核矩阵可视化
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
原理与作用来源

无论核大小是多少,只有中心位置权重为 1,其余位置全为 0,因此邻域像素不会参与输出。

它对应离散情形下的单位冲激思想:只保留中心项时,卷积结果尽量保持原信号本身。

公式
G(x,y)=f(x,y)
扩大到 5×5、7×7 或 11×11 时,本质仍然不变:只有中心项真正生效。
响应图示
邻域忽略
中心保留
原样输出
均值

窗口内所有位置同权参与,适合讲清楚“局部平均/等权平滑”这一类卷积思路。

3×35×57×79×911×11
核矩阵可视化
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
原理与作用来源

每个像素都以相同权重参与求和;若再除以全部权重之和,就得到标准的均值滤波。

它来自局部平均的统计思想:不再只看中心点,而是把周围像素一起纳入估计,用整体趋势抑制随机波动。

公式
G(x,y)=1Zijf(x+i,y+j)
等权核矩阵保留“等权结构”便于观察;若除以全部权重和,就对应标准均值核。
响应图示
周围像素
同权汇总
平滑输出
高斯

中心权重大、边缘权重小,适合说明“平滑但尽量保留结构”的思路。

3×35×57×79×911×11
核矩阵可视化
1
4
6
4
1
4
16
24
16
4
6
24
36
24
6
4
16
24
16
4
1
4
6
4
1
原理与作用来源

越靠近中心的像素权重越大,越远的像素权重越小,因此比等权平均更温和,也更符合局部邻域的自然衰减。

它来自高斯分布和尺度空间思想,是图像平滑里最经典、最标准的一类卷积核。

公式
g(i,j)e-i2+j22σ2
公式给出的是连续高斯函数的理想形式;页面实际生成的核矩阵采用帕斯卡三角的离散近似,便于直观对比不同尺寸下的权重分布。
响应图示
中心更重
周边更轻
柔和平滑
拉普拉斯

强调像素突变的位置,常用来检测边缘或轮廓,对亮度突变特别敏感。

当前使用
3×35×57×7
核矩阵可视化
0
1
0
1
-4
1
0
1
0
原理与作用来源

它本质上是二阶差分。3×3 使用经典模板,更大的 5×5、7×7 版本则在二阶差分周围加入了更宽的平滑支撑。

它来源于离散形式的二阶导数;在图像处理中,二阶差分常用来突出“变化率本身是否突然改变”。

公式
2f=2fx2+2fy2
大尺寸拉普拉斯采用“二阶差分 + 更宽平滑支撑”的教学型模板,用来帮助理解大核二阶导数的概念。
响应图示
平坦区≈0
亮度突变
边缘增强
Sobel X

突出左右方向的亮度变化,因此更容易检测竖直边缘。

3×35×57×7
核矩阵可视化
-1
-2
0
2
1
-4
-8
0
8
4
-6
-12
0
12
6
-4
-8
0
8
4
-1
-2
0
2
1
原理与作用来源

它把“水平方向一阶差分”和“垂直方向平滑”结合在一起;核越大,参与比较的邻域越宽。

它是经典的一阶导数卷积核族。3×3 最常见,5×5 和 7×7 则表示更大尺度的方向导数。

公式
Gx=fx
如果左侧更亮,响应通常偏正;如果右侧更亮,响应通常偏负。
方向图示
左暗右亮
Sobel Y

突出上下方向的亮度变化,因此更容易检测水平边缘。

3×35×57×7
核矩阵可视化
-1
-4
-6
-4
-1
-2
-8
-12
-8
-2
0
0
0
0
0
2
8
12
8
2
1
4
6
4
1
原理与作用来源

它把“垂直方向一阶差分”和“水平方向平滑”结合在一起;核越大,参与比较的邻域越宽。

它是经典的一阶导数卷积核族。3×3 最常见,5×5 和 7×7 则表示更大尺度的方向导数。

公式
Gy=fy
如果上侧更亮,响应通常偏正;如果下侧更亮,响应通常偏负。
方向图示
上暗下亮