学习资料参考:
张平.《OpenCV算法精解:基于Python与C++》.[Z].北京.电子工业出版社.2017.
基础概念
二维离散卷积是在两个矩阵的基础上的一种计算方式,如下所示:
I
=
(
1
2
3
4
)
I=\begin{pmatrix} 1 & 2 \\ 3 & 4 \\ \end{pmatrix}
I=(1324),
K
=
(
−
1
−
2
2
1
)
K=\begin{pmatrix} -1 & -2 \\ 2 & 1 \\ \end{pmatrix}
K=(−12−21).
计算方式为:
- 将 K K K进行逆时针旋转 18 0 o 180^o 180o,则 K = ( 1 2 − 2 − 1 ) K=\begin{pmatrix} 1 & 2 \\ -2 & -1 \\ \end{pmatrix} K=(1−22−1).
- 将矩阵
K
K
K沿着
I
I
I按照先行后列的顺序移动,每移动一个位置,就进行对应位相乘求和。演示过程如下所示:
得到矩阵 C = ( − 1 − 4 − 4 − 1 − 5 − 6 6 11 4 ) C = \begin{pmatrix} -1 &-4 & -4 \\ -1 & -5 & -6 \\ 6 & 11 & 4\end{pmatrix} C=⎝⎛−1−16−4−511−4−64⎠⎞,矩阵 C C C的高与宽满足:
矩阵C的高 = 矩阵I的高 + 矩阵K的高 - 1; 矩阵C的宽 = 矩阵I的宽 + 矩阵K的宽 - 1;
而矩阵 K K K就称为卷积核,或者卷积算子。
卷积种类
- full卷积
full卷积形式橙色部分为卷积算子。
边界扩充方式:
- 在红色矩阵边界外填充常数,通常进行的是0扩充。
- 重复红色矩阵边界处的行和列,对输入矩阵进行扩充。
- 以矩阵边界为中心,令矩阵外某位置上未定义的灰度值等于图像内其镜像位置的灰度值,该种方式会产生最小的影响。
- same卷积
same卷积形式橙色部分为卷积算子,相比较于ful形式重合部分更多,即卷积算子的中心处于红色部分中时开始计算,在合适的步长情况可保证输入与输出图像大小一致。很明显same卷积是full卷积的子集。
3. valid卷积
卷积算子只存在于原图中。