二维图像处理中的可分离卷积核

本文参考书籍《Opencv算法精解》,作者:张平

  • 可分离卷积核的定义

如果一个卷积核至少由两个尺寸比它小的卷积核full卷积而成,并且在计算过程中在所有边界处均进行扩充零的操作,且满足

                                          Kernel=kernel_{1}\bigstar kernel_{2}\bigstar\cdots \bigstar kernel_{n}

其中kernel_{i}的尺寸比Kernel小,1\leqslant i\leq n,则称该卷积核是可分离的。  

在二维图像处理中经常将一个卷积核分为一维水平方向和一维垂直方向上的两个卷积核,例如:

                                          \begin{pmatrix} 4 &8 & 12\\ 5& 10 &15 \\ 6& 12 & 18 \end{pmatrix}=\begin{pmatrix} 1 & 2 & 3 \end{pmatrix}\bigstar \begin{pmatrix} 4\\ 5\\ 6 \end{pmatrix}=\begin{pmatrix} 4\\ 5\\ 6 \end{pmatrix}\bigstar \begin{pmatrix} 1 & 2& 3 \end{pmatrix}  

举例计算:

                                                      \begin{pmatrix} 1 & 2 & 3 \end{pmatrix}\bigstar \begin{pmatrix} 4\\ 5\\ 6 \end{pmatrix}          

将卷积符号后面的矩阵当作卷积核,前面的矩阵当作图像。首先将卷积核逆时针旋转180度得到如下矩阵:

                                                                           \begin{pmatrix} 6\\ 5\\ 4 \end{pmatrix}

计算过程中图像不动,按照先行后列的顺序移动卷积核,对应位置相乘然后求和。具体计算过程如下图所示:   

计算结果即为分离前的卷积核。注意full卷积是不满足交换律的,但是一维水平方向和一维垂直方向上的卷积核的full卷积是满足交换律的。

  • 离散卷积的性质

如果卷积核Kernel是可分离的,且Kernel=kernel_{1}\bigstar kernel_{2},则有:

                   I\bigstar Kernel=I\bigstar (kernel_{1}\bigstar kernel_{2})=(I\bigstar kernel_{1})\bigstar kernel_{2}

  • 卷积核分离的意义

假设图像矩阵I的尺寸为H_{1}*W_{1},卷积核Kernel的尺寸为H_{2}*W_{2},那么进行same卷积的运算量大概为(H_{1}*W_{1})*(H_{2}*W_{2}),即复杂度为O(m^{2}*n^{2})。如果将卷积核分离为一维水平方向上1*W_{2}的卷积核和一维垂直方向上的H_{2}*1的卷积核,运算的复杂度减少为O(m^{2}*2n),随着卷积核尺寸的增大,分离卷积核的运算优势更加明显。

  • 卷积核分离应用举例

高斯卷积核和均值卷积核都是可分离的,高斯卷积核的构建可参考我的另一篇博客。接下来主要讲解分离均值卷积核与图像卷积的操作步骤,均值卷积核可分解为如下形式:

                                           \frac{1}{9} \begin{bmatrix} 1 & 1 & 1\\ 1 & 1& 1\\ 1 & 1 & 1 \end{bmatrix}=\frac{1}{3}\begin{bmatrix} 1\\ 1\\ 1 \end{bmatrix}*\frac{1}{3}\begin{bmatrix} 1 & 1&1 \end{bmatrix}

第一步:假设有一副尺寸为3*3的图像I,想要使用尺寸为3*3的卷积核进行均值滤波,对其进行边界扩充后(灰色部分为扩充的边界像素)表示如下:

第二步:使用一维水平方向上的卷积核 \small \begin{bmatrix} 1 & 1&1 \end{bmatrix},对边界扩充后的图像进行卷积,得到一个中间结果(由于卷积核宽度为3,因此第一列和最后一列无法进行卷积运算,因此保持初始化的值为0),如下所示:

第三步:使用一维垂直方向上的卷积核\begin{bmatrix} 1\\ 1\\ 1 \end{bmatrix},对中间结果图像进行卷积(由于卷积核高度为3,因此第一行和最后一行无法进行卷积运算,因此保持初始化的值为0),如下所示:

第四步:将两次卷积得到的结果除以卷积核的面积,并赋值给结果图像,如下所示:

注意:在实际编程中,第三步和第四步通常合并到一起实现,提高算法效率

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值