卷积到底卷了个啥?———对卷积的通俗理解

发布于:2022-12-25 ⋅ 阅读:(555) ⋅ 点赞:(0)

卷积这个概念,很早以前就学过,教科书上通常会给出它的定义和公式,并且给出它的很多性质,也会用实例和图形进行解释。但是这都是基于数学方面的解释,对于大部分人来说会显得抽象。

首先给出卷积的定义公式:

连续形式:

(f*g)(n) = \int_{ - \infty }^\infty {​{f_{(\tau )}}{g_{(n - \tau )}}} {d_\tau }

离散形式:

(f*g)(n) = \sum\limits_{\tau = - \infty }^\infty {​{f_{(\tau )}}{g_{(n - \tau )}}}

首先对g函数进行翻转,相当于在数轴上把g函数从右边褶到左边去,也就是卷积的“卷”的由来。接着将g函数平移到n,在这个位置对两个函数的对应点相乘,然后相加,这个过程是卷积的“积”的过程。

将卷积放到实际应用场景中来讲,举个例子:丢骰子,这是一个典型的离散卷积的场景情况,将两个骰子同时抛出后,两个骰子点数相加等于4的概率是多少呢?

我们使用f(.)和g(.)分别表示两个骰子出现的点数的概率,比如f(1)就表示第一枚骰子出现1的概率,g(2)就表示第一枚骰子出现2的概率并以此类推,那么两个骰子点数加起来等于4的概率就为

f(1)g(3)+f(2)g(2)+f(3)g(1)

将其写成标准形式就是:

(f*g)(4) = \sum\limits_{​{\rm{m}} = 1}^3 {​{f_{(4 - {\rm{m}})}}{g_{(m)}}}

再举个连续卷积的例子:烤面包

一家面包店在不间断的生产面包,假设生产面包的速度是f(t),那么n个小时后生产出来的面包数量就是:\int_0^n {​{f_{(t)}}} {d_t},假设面包生产出来后会逐渐变质,变质情况可以用函数g(t)表示,那么同一时间生产的k个面包的变质情况就是:k * g(t)。

这样来看,第一个小时生产的面包在n个小时后会经历n个小时的变质,第二个小时生产出来的面包在n个小时后会经历n-1个小时的变质...

以此类推,我们可以得到所有面包在n个小时后的变质情况:

\int_0^n {​{f_{(t)}}{g_{(n - t)}}} {d_\tau }

图像处理领域中,我们可以认为卷积可以对图像进行一系列的效果处理,例如模糊、强化、减少噪点等。举例来说,一幅图像中有很多噪点,而这些噪点属于高频信号,就好似一块平地上出现了高耸的山丘,要想平滑这些山丘就要将这些山丘刨去一些土分散到周围的平地上,使高度分散开。卷积就可以帮助图象实现这个平滑的过程。

假设有这样一个m*n大小的图片,将其转化为矩阵:

 然后用一个3x3的矩阵作为卷积核来平滑图像:

g = \left[ {\begin{array}{*{20}{c}} {1/9}&{1/9}&{1/9}\\ {1/9}&{1/9}&{1/9}\\ {1/9}&{1/9}&{1/9} \end{array}} \right]

上文说过把高频信号与周围的数值平均一下就可以平滑山峰,例如我们需要平滑a_{12}这个点,那么就在矩阵中取出以a_{12}为中心周围9个点组成矩阵f,和g进行卷积计算后再填回原来 a_{12}所在的位置。以上过程写成卷积公式就是:

(f*g)(1,1) = \sum\limits_{​{\rm{k}} = 0}^2 {\sum\limits_{k = 0}^2 {​{f_{(h,k)}}} {g_{(1 - h,1 - k)}}}

 当计算其它点时采取同样的步骤即可。所以我们平滑整个图像时只需要将卷积核以图片矩阵的第一个点为起点,在上面滑动计算,将每次计算的结果在填回原位置,这样最后我们就能得到平滑后的图像了。

本文含有隐藏内容,请 开通VIP 后查看