Opencv图像二维离散卷积原理
平滑技术也叫做过滤技术,可以用来去除图像中的噪声,常用的平滑处理的处理算法有基于二维离散卷积的高斯平滑、均值平衡、基于统计学方法的中值平滑、双边滤波、导向滤波等。二维离散卷积是基于两个矩阵的一种计算方式,通过以下示例进行理解。
一.原理
\[I =
\left (
\begin{matrix}
1&2\\
3&4\\
\end{matrix}
\right ) , K = \left (
\begin{matrix}
-1&-2\\
-3&-4\\
\end{matrix}
\right )
\]
首先将K逆时针翻转180度,得到
\[K_{flip}=\left (
\begin{matrix}
-4&-3\\
-2&-1\\
\end{matrix}
\right )
\]
第二步 矩阵计算过程:
则I与K卷积的结果就是:
\[C_{full}=\left (
\begin{matrix}
-1&-4&-4\\
-6&-20&-16\\
-9&-24&-16\\
\end{matrix}
\right )
\]
这就是I和K的卷积结果,K称为卷积核/卷积算子。
二.矩阵计算
1.矩阵扩充
\[I_{p(r,c)} = \begin{cases} I_{(r,c)}, & \text 0\leq r <H_{1},0\leq c <W_{1} \\ 0 ,& \text {else} \end{cases}
\]
\[K_{p(r,c)} = \begin{cases} K_{(r,c)}, & \text 0\leq r <H_{2},0\leq c <W_{2} \\ 0 ,& \text {else} \end{cases}
\]
由原理中所得的结果矩阵可知,结果矩阵H = ($$H_{1}=H_{2}$$), W= ($$W_{1}=W_{2}$$) ,此次对I和K矩阵进行填充,补0使其为结果矩阵形式。
2.矩阵堆叠
对I矩阵进行转置操作,目的是使其成为一个列向量$$I_{p}$$
3.构造WW的循环矩阵
将$$K_{p}的每一行都构造成一个WW的循环矩阵 $$ 循环矩阵的具体构造就是将每一行的转置作为每一个构造的循环矩阵的第一列,然后由新构造的矩阵中第一列依次向下移位得到一个循环矩阵。
\[G_{r}=\begin{cases} K_{p(r,0)}& K_{p(r,W-1)} ---& K_{p(r,1)} \\ K_{p(r,1)}& K_{p(r,0)} ---& K_{p(r,3)} \\ ----- \\K_{p(r,W-1)}& K_{p(r,W-2)} ---& K_{p(r,0)} \end{cases}
\]
4.构造循环矩阵G
以上面构造的循环矩阵为基础,得到H个循环块矩阵,循环矩阵G为:
\[G=\begin{cases} G_0 & G_{H-1} ---& G_1 \\ G_1 & G_{0} ---& G_2 \\ --- \\ G_{H-1} & G_{H-2} ---& G_0 \end{cases}
\]
5.重新排列成H*W矩阵
\[根据二维卷积形式: C = G * I_{p} (其中C为一个(H*W)*1的列向量) ,将C重新排列成一个H*W的矩阵,取C的第一个前W的值作为第一行,取第二个前W的值作为第二行,且依次类推,最后得到一个H*W的矩阵,该矩阵就是我们之前得到的卷积矩阵 C_{full}
\]