读本科期间,信号与系统里面常常讲到卷积(convolution),自动控制原理里面也会常常有提到卷积。硕士期间又学了线性系统理论与数字信号处理,里面也是各类大把大把卷积的概念。至于最近大火的深度学习,更有专门的卷积神经网络(Convolutional Neural Network, CNN),在图像领域取得了很是好的实际效果,已经把传统的图像处理的方法快干趴下了。啰啰嗦嗦说了这么多卷积,惭愧的是,好像一直以来对卷积的物理意义并非那么清晰。一是上学时候只是简单考试,没有仔细思考过具体先后的前因后果。二是自己天资比较愚钝,理解能力没有到位。三则工做之后也没有作过强相关的工做,没有机会得以加深理解。趁着年前稍微有点时间,查阅了一些相关资料,力争将卷积的前世此生能搞明白。html
首先选取知乎上对卷积物理意义解答排名最靠前的回答。
不推荐用“反转/翻转/反褶/对称”等解释卷积。好好的信号为何要翻转?致使学生难以理解卷积的物理意义。
这个其实很是简单的概念,国内的大多数教材却没有讲透。算法
直接看图,不信看不懂。以离散信号为例,连续信号同理。网络
已知x[0] = a, x[1] = b, x[2]=c 函数
已知y[0] = i, y[1] = j, y[2]=k 学习
下面经过演示求x[n] * y[n]的过程,揭示卷积的物理意义。atom
第一步,x[n]乘以y[0]并平移到位置0: spa
第二步,x[n]乘以y[1]并平移到位置1 .net
第三步,x[n]乘以y[2]并平移到位置2: htm
最后,把上面三个图叠加,就获得了x[n] * y[n]: blog
简单吧?无非是平移(没有反褶!)、叠加。
从这里,能够看到卷积的重要的物理意义是:一个函数(如:单位响应)在另外一个函数(如:输入信号)上的加权叠加。
重复一遍,这就是卷积的意义:加权叠加。
对于线性时不变系统,若是知道该系统的单位响应,那么将单位响应和输入信号求卷积,就至关于把输入信号的各个时间点的单位响应 加权叠加,就直接获得了输出信号。
通俗的说:
在输入信号的每一个位置,叠加一个单位响应,就获得了输出信号。
这正是单位响应是如此重要的缘由。
在输入信号的每一个位置,叠加一个单位响应,就获得了输出信号。
这正是单位响应是如此重要的缘由。
在输入信号的每一个位置,叠加一个单位响应,就获得了输出信号。
这正是单位响应是如此重要的缘由。
以上是知乎上排名最高的回答。比较简单易懂。
有个回复也能够参考:
楼主这种作法和一般教材上的区别在于:书上先反褶再平移,把输入信号看成一个总体,一次算出一个时间点的响应值;而楼主把信号拆开,一次算出一个信号在全部时间的响应值,再把各个信号相加。二者本质上是相同的。
卷积表示为y(n)=x(n)∗h(n)
使用离散数列来理解卷积会更形象一点,咱们把y(n)的序列表示成y(0),y(1),y(2),⋯, 这是系统响应出来的信号。
同理,x(n)的对应时刻的序列为x(0),x(1),x(2),⋯
其实咱们若是没有学过信号与系统,就常识来说,系统的响应不只与当前时刻系统的输入有关,也跟以前若干时刻的输入有关,由于咱们能够理解为这是以前时刻的输入信号通过一种过程(这种过程能够是递减,削弱,或其余)对如今时刻系统输出的影响,那么显然,咱们计算系统输出时就必须考虑如今时刻的信号输入的响应以及以前若干时刻信号输入的响应之“残留”影响的一个叠加效果。
假设0时刻系统响应为y(0),若其在1时刻时,此种响应未改变,则1时刻的响应就变成了y(0)+y(1),叫序列的累加和(与序列的和不同)。但经常系统中不是这样的,由于0时刻的响应不太可能在1时刻仍旧未变化,那么怎么表述这种变化呢,就经过h(t)这个响应函数与x(0)相乘来表述,表述为x(m)×h(m−n),具体表达式不用多管,只要记着有大概这种关系,引入这个函数就可以表述y(0)在1时刻究竟削弱了多少,而后削弱后的值才是y(0)在1时刻的真实值,再经过累加和运算,才获得真实的系统响应。
再拓展点,某时刻的系统响应每每不必定是由当前时刻和前一时刻这两个响应决定的,也多是再加上前前时刻,前前前时刻,前前前前时刻,等等,那么怎么约束这个范围呢,就是经过对h(n)这个函数在表达式中变化后的h(m−n)中的m的范围来约束的。即说白了,就是当前时刻的系统响应与多少个以前时刻的响应的“残留影响”有关。
当考虑这些因素后,就能够描述成一个系统响应了,而这些因素经过一个表达式(卷积)即描述出来不得不说是数学的巧妙和迷人之处了。
前面讲了这么多,咱们看看教科书上对卷积的数学定义。
用一个模板和一幅图像进行卷积,对于图像上的一个点,让模板的原点和该点重合,而后模板上的点和图像上对应的点相乘,而后各点的积相加,就获得了该点的卷积值。对图像上的每一个点都这样处理。因为大多数模板都是对称的,因此模板不旋转。卷积是一种积分运算,用来求两个曲线重叠区域面积。能够看做加权求和,能够用来消除噪声、特征加强。
把一个点的像素值用它周围的点的像素值的加权平均代替。
卷积是一种线性运算,图像处理中常见的mask运算都是卷积,普遍应用于图像滤波。
卷积关系最重要的一种状况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,能够将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
另外在知乎上看到很是好也很是生动形象的解释,特地复制粘贴过来。(知乎马同窗的解释)
从数学上讲,卷积就是一种运算。
某种运算,能被定义出来,至少有如下特征:
1.首先是抽象的、符号化的
2.其次,在生活、科研中,有着普遍的做用
好比加法:
1.a+b,是抽象的,自己只是一个数学符号
2.在现实中,有很是多的意义,好比增长、合成、旋转等等
卷积,是咱们学习高等数学以后,新接触的一种运算,由于涉及到积分、级数,因此看起来以为很复杂。
这两个式子有一个共同的特征:
这个特征有什么意义?
只看数学符号,卷积是抽象的,很差理解的,可是,咱们能够经过现实中的意义,来习惯卷积这种运算,正如咱们小学的时候,学习加减乘除须要各类苹果、糖果来帮助咱们习惯同样。
咱们来看看现实中,这样的定义有什么意义。
2 离散卷积的例子:丢骰子
我有两枚骰子:
把这两枚骰子都抛出去:
求:两枚骰子点数加起来为4的几率是多少?
这里问题的关键是,两个骰子加起来要等于4,这正是卷积的应用场景。
咱们把骰子各个点数出现的几率表示出来:
那么,两枚骰子点数加起来为4的状况有:
所以,两枚骰子点数加起来为4的几率为:
f(1)g(3)+f(2)g(2)+f(3)g(1)
符合卷积的定义,把它写成标准的形式就是:
3 连续卷积的例子:作馒头
楼下早点铺子生意太好了,供不该求,就买了一台机器,不断的生产馒头。
假设馒头的生产速度是 f(t) ,那么一天后生产出来的馒头总量为:
∫240f(t)dt
馒头生产出来以后,就会慢慢腐败,假设腐败函数为 g(t) ,好比,10个馒头,24小时会腐败:
10∗g(t)
想一想就知道,第一个小时生产出来的馒头,一天后会经历24小时的腐败,第二个小时生产出来的馒头,一天后会经历23小时的腐败。
如此,咱们能够知道,一天后,馒头总共腐败了:
∫240f(t)g(24−t)dt
这就是连续的卷积。
4 图像处理
4.1 原理
有这么一副图像,能够看到,图像上有不少噪点:
高频信号,就好像平地耸立的山峰:
看起来很显眼。
平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去。用数学的话来讲,就是把山峰周围的高度平均一下。
平滑后获得:
4.2 计算
卷积能够帮助实现这个平滑算法。
有噪点的原图,能够把它转为一个矩阵:
而后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)来平滑图像:
g=⎡⎣⎢⎢191919191919191919⎤⎦⎥⎥
记得刚才说过的算法,把高频信号与周围的数值平均一下就能够平滑山峰。
好比我要平滑a1,1 点,就在矩阵中,取出a1,1点附近的点组成矩阵 f ,和 g 进行卷积计算后,再填回去
要注意一点,为了运用卷积, g 虽然和 f 同维度,但下标有点不同:
写成卷积公式就是:
(f∗g)(1,1)=∑k=02∑h=02f(h,k)g(1−h,1−k)
要求c4,5,同样能够套用上面的卷积公式。
这样至关于实现了 g 这个矩阵在原来图像上的划动(准确来讲,下面这幅图把 g 矩阵旋转了180∘ ):
看了好多关于卷积的答案,看到这个例子才完全地理解了这个过程~
关于卷积的一个血腥的讲解
好比说你的老板命令你干活,你却到楼下打台球去了,后来被老板发现,他很是气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),因而你的脸上会渐渐地(贱贱地)鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统创建起来意义对应的联系。下面还须要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,不管何时老板打你一巴掌,打在你脸的同一位置(这彷佛要求你的脸足够光滑,若是你说你长了不少青春痘,甚至整个脸皮到处连续到处不可导,那难度太大了,我就无话可说了哈哈),你的脸上老是会在相同的时间间隔内鼓起来一个相同高度的包来,而且假定以鼓起来的包的大小做为系统输出。好了,那么,下面能够进入核心内容——卷积了!
若是你天天都到地下去打台球,那么老板天天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了,因此时间长了,你甚至就适应这种生活了……若是有一天,老板忍无可忍,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断做用在你脸上,效果不断叠加了,这样这些效果就能够求和了,结果就是你脸上的包的高度随时间变化的一个函数了(注意理解);若是老板再狠一点,频率愈来愈高,以致于你都辨别不清时间间隔了,那么,求和就变成积分了。能够这样理解,在这个过程当中的某一固定的时刻,你的脸上的包的鼓起程度和什么有关呢?和以前每次打你都有关!可是各次的贡献是不同的,越早打的巴掌,贡献越小,因此这就是说,某一时刻的输出是以前不少次输入乘以各自的衰减系数以后的叠加而造成某一点的输出,而后再把不一样时刻的输出点放在一块儿,造成一个函数,这就是卷积,卷积以后的函数就是你脸上的包的大小随时间变化的函数。原本你的包几分钟就能够消肿,但是若是连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?反映到剑桥大学的公式上,f(a)就是第a个巴掌,g(x-a)就是第a个巴掌在x时刻的做用程度,乘起来再叠加就ok了,你们说是否是这个道理呢?我想这个例子已经很是形象了,你对卷积有了更加具体深入的了解了吗?
参考资料:
1.https://www.zhihu.com/question/22298352
2.http://blog.csdn.net/yeeman/article/details/6325693
3.http://muchong.com/html/201001/1773707.html
4.https://www.zhihu.com/question/39753115
5.https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
6.http://blog.csdn.net/tiandijun/article/details/40080823
7.https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E5%AE%9A%E7%90%86
8.https://www.zhihu.com/question/19714540/answer/14738630 如何理解傅里叶变换公式?