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

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

  • 可分离卷积核的定义

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

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

其中二维图像处理中的可分离卷积核的尺寸比二维图像处理中的可分离卷积核小,二维图像处理中的可分离卷积核,则称该卷积核是可分离的。  

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

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

举例计算:

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

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

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

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

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

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

  • 离散卷积的性质

如果卷积核Kernel是可分离的,且二维图像处理中的可分离卷积核,则有:

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

  • 卷积核分离的意义

假设图像矩阵二维图像处理中的可分离卷积核的尺寸为二维图像处理中的可分离卷积核,卷积核Kernel的尺寸为二维图像处理中的可分离卷积核,那么进行same卷积的运算量大概为二维图像处理中的可分离卷积核,即复杂度为二维图像处理中的可分离卷积核。如果将卷积核分离为一维水平方向上二维图像处理中的可分离卷积核的卷积核和一维垂直方向上的二维图像处理中的可分离卷积核的卷积核,运算的复杂度减少为二维图像处理中的可分离卷积核,随着卷积核尺寸的增大,分离卷积核的运算优势更加明显。

  • 卷积核分离应用举例

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

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

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

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

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

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

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

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

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

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

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