初步理解,以离散信号为例:
已知
x[0]=a,x[1]=b,x[2]=c
已知
y[0]=i,y[1]=j,y[2]=k
卷积的过程为:
- 第一步,x[n]乘以y[0]并平移到位置0
- 第二步,x[n]乘以y[1]并平移到位置1
- 第三步,x[n]乘以y[2]并平移到位置2
- 最后,把上面三个结果叠加,就得到了 x[n]∗y[n]
从这里,可以看到卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。
对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。
通俗的说:在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。这正是单位响应是如此重要的原因。
卷积实例:
卷积的定义:我们称
(f∗g)(n)
为
f,g
的卷积
其连续的定义为:
(f∗g)(n)=∫∞−∞f(τ)g(n−τ)dτ
其离散的定义为:
(f∗g)(n)=∑τ=−∞∞f(τ)g(n−τ)
离散卷积的例子:丢骰子
我有两枚骰子,把这两枚骰子都抛出去,两枚骰子的点数和是4的概率?
这里问题的关键是,两个骰子加起来要等于4,这正是卷积的应用场景:
其中f表示第一枚骰子,g表示第二枚骰子, f(1) 投出1的概率,以此类推。下面是两枚骰子点数加起来为4的情况:
因此,两枚骰子点数加起来为4的概率为:
符合卷积的定义,把它写成标准的形式就是:
图像处理的例子:
有这么一副图像,可以看到,图像上有很多噪点,即高频信号,现需要平滑,而卷积可以帮助实现这个平滑算法。
有噪点的原图,可以把它转为一个矩阵:
然后用下面的这个g平均矩阵来平滑图像
把高频信号与周围的数值平均一下就可以得到平滑,比如我要平滑 a1,1 点,就在矩阵中,取出 a1,1 点附近的点组成矩阵 f,和 g 进行卷积计算后,再填回去:
写成卷积公式就是:
(f∗g)(1,1)=∑k=02∑h=02f(h,k)g(1−h,1−k)
这样相当于实现了 g 这个矩阵在原来图像上的划动
又一例子:
关于卷积的一个血腥的讲解比如说你的老板命令你干活,你却到楼下打台球去了,后来被老板发现,他非常气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),于是你的脸上会渐渐地(贱贱地)鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统建立起来意义对应的联系。下面还需要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,无论什么时候老板打你一巴掌,打在你脸的同一位置,你的脸上总是会在相同的时间间隔内鼓起来一个相同高度的包来,并且假定以鼓起来的包的大小作为系统输出。好了,那么,下面可以进入核心内容——卷积了!
如果你每天都到地下去打台球,那么老板每天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了,所以时间长了,你甚至就适应这种生活了……如果有一天,老板忍无可忍,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,效果不断叠加了,这样这些效果就可以求和了,结果就是你脸上的包的高度随时间变化的一个函数了(注意理解);如果老板再狠一点,频率越来越高,以至于你都辨别不清时间间隔了,那么,求和就变成积分了。可以这样理解,在这个过程中的某一固定的时刻,你的脸上的包的鼓起程度和什么有关呢?和之前每次打你都有关!但是各次的贡献是不一样的,越早打的巴掌,贡献越小,所以这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是你脸上的包的大小随时间变化的函数。本来你的包几分钟就可以消肿,可是如果连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?
卷积矩阵及其运算实例:
矩阵的卷积运算主要用在图像处理中,假设输入信号为
x[m,n]
,激活响应为
h[m,n]
,则其卷积定义为:
不过在图像处理中这里的激活响应(也称为核)h[m,n]通常是一个3乘3矩阵,其下标如下图所示:
其余下标的值取0,注意到原点(0,0)是是矩阵的中心。
在图像处理中,输入信号 x[m,n] 的非零值通常是横坐标从0到M-1,纵坐标从0到N-1,这里M和N分别是图像宽和高的值,其余的值设置为0。但是下面的例子的输入矩阵的下标范围和核矩阵相同,也就是(-1,1)。
根据定义可以直接计算矩阵的卷积。假设我们有一个3x3的核和一个3x3的输入:
具体的计算过程如下:
计算过程中不在卷积范围的下标元素都设为0。
例如:
从以上卷积的公式可以得到上述的
y[0,0]
的计算过程,可以看到就是下面的过程:
在这里 y[0,1],y[0,2].... 的计算过程就省略了。
参考:
https://www.zhihu.com/question/22298352/answer/228543288
https://mlnotebook.github.io/post/CNN1/