在图像处理以及人工智能中,“卷积”一词是非常重要的概念,也是初学者难以理解的地方。在《数字图像处理:理解什么是卷积(滤波)、卷积核以及相关参考资料》老猿结合相关知识详细介绍了卷积相关知识,这几天学习《数字图像处理》第三章《空间相关与卷积》才知道以前的知识虽然不能说错误,但也不能说完全准确。
在执行线性空间滤波时,必须清楚地理解两个相近的概念。一个是相关(correlation),另一个是卷积(Convolution)。卷积的概念是线性系统理论的基石。
如《《数字图像处理》空间滤波学习感悟1:空间滤波原理》介绍,滤波器模板移过图像并计算每个位置乘积之和的处理其实就是相关。
卷积与相关相似,但滤波器首先要旋转180°。
解释这两个概念的区别的最好方法是举一个例子,在此之前,我们先介绍一个重要概念:离散单位冲激。
离散单位冲激(discrete unit impulse)就是包含单个1其余都是0的函数。
老猿注:离散单位冲激,首先它是一个函数,而这个函数是一个由数字序列或数字矩阵表达的函数。discrete unit impulse,按英文字面意思可以称为离散单位脉冲,可以设想一个由一系列0和1表达的电波图形(函数图形),当该电波中只有一个坐标的值为1其余都为0时,该电波图形对应的函数就是离散单位冲激。
我们从一个一维示例开始,下图3.29(a)显示了一个一维函数f和一个滤波器w,图3.29(b)显示了执行相关的起始位置。
图3.29(b)中,我们注意到f和w开始对齐位置中,f中存在未完全和w数据对应覆盖的部分,类似的在从w的倒数第二个数字和f的最后一个数字对齐时也未覆盖的部分。该问题的解决办法是在f的任意一侧补上足够的0(如果滤波器的尺寸是m,那么我们需要在f的两侧各补m-1个0),以便使 w 中的每一个像素都可访问到f中的每一个像素。图3.29©显示了适当填充过的函数。
当然零填充并不是唯一的选择(老猿认为:为了说明相关和卷积的概念,填0更直观)。例如。我们可在/的两侧复制第一个元素和最后一个元素m-1次,或镜像第一个元素和最后一个元素m-1次,并为填充使用镜像后的值。
相关处理过程:
注意:
上述一维相关与卷积的案例及概念很容易扩展到二维图像。对于大小为mxn的滤波器,我们在图像的顶部和底部至少各填充m-1行0、左侧和右侧各填充n-1列0,以二维的仅包含一个1其余全为0的核矩阵代替一维的序列,就可以以图像矩阵和核矩阵进行相关和卷积的处理。
以一个5×5的图像矩阵和一个3×3的核矩阵为例,其相关和卷积处理过程如下图3.30所示:
图3.30(c)显示了执行相关操作的滤波器模板的初始位置;图3.30(d)显示了所有相关操作的结果;图3.30(e)显示了裁剪后的相应结果。图3.30(f)到(h)显示了卷积的结果。
从图3.30可以看出:
一个大小为m×n的滤波器w(x,y)与一幅图像f(x,y)做相关操作,可以表示为:
w(x, y)☆f(x, y),其计算方法就是在《数字图像处理》空间滤波学习感悟1:空间滤波原理》中介绍的滤波公式:
因此有如下公式:
这一公式对所有位移变量x和y求值,以便w的所有元素访问f(假设f已经适当填充)的每一个元素。在上述公式中,a=(m-1)/2、b=(n-1)/2。
滤波器w(x,y)与一幅图像f(x,y)做卷积操作,可以表示为:w(x, y)★f(x, y),对应表示公式为:
式3.4.2右边的减号表示翻转f(旋转180°)。虽然翻转f和w效果是一样的,但一般惯例是翻转w。这一公式同样对所有位移变量x和y求值,以便w的所有元素访问f(假设f已经适当填充)的每一个元素。
本文介绍了空间滤波中的两个重要基础概念:相关和卷积,并介绍了使用式3.4-1和式3.4-2来表述这两个操作,在实践中,对于相关和卷积通常用同一个算法实现式3.4-1,如果要执行相关,可以将滤波器w输入到算法中,如果要执行卷积,则可以将旋转180°的w输入到算法中。当然也可以用算法实现式3.4-2,只是输入恰好与相关相反。
使用相关或卷积执行空间滤波是优先选择的方法,无论是式3.4-1还是式3.4-2,都可以通过简单的旋转滤波器去执行相关或卷积的功能。在空间滤波任务中,重要的是按期望操作的方式来确定滤波器模板(filter mask)。
在图像处理文献中,经常使用卷积滤波器(convolution filter)、卷积模板(convolution mask )或卷积核( convolution kernel)这些术语,按照惯例,这些术语都是用于表示一种空间滤波器(spatial filter),并且该滤波器不一定真正用于卷积处理。类似地,模板与图像的卷积(convolving a mask with an image)通常用于表示前面介绍的滑动乘积求和(sumof-products process)的处理,而不必区分相关与卷积的区别,更合适的是,它通常用于表示相关与卷积两者操作之一,这一不太严密的术语很容易产生理解的歧义。
另外本文中介绍的一个函数与单位冲激的卷积,相当于在单位冲激位置复制该函数,这一特性将在大量的推导中扮演核心角色。
更多图像处理请参考专栏《OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。
如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询,也可以扫描博客左边栏目的微信公号二维码咨询。
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。