卷积的介绍

最容易理解的对卷积(convolution)的解释_bitcarmanlee的博客-优快云博客_卷积

什么是图像卷积_naruhina的博客-优快云博客_图像卷积

一、

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
经常有同学私信或留言询问相关问题,V号bitcarmanlee。github上star的同学,在我能力与时间允许范围内,尽可能帮大家解答相关问题,一起进步。

啰嗦开场白
读本科期间,信号与系统里面经常讲到卷积(convolution),自动控制原理里面也会经常有提到卷积。硕士期间又学了线性系统理论与数字信号处理,里面也是各种大把大把卷积的概念。至于最近大火的深度学习,更有专门的卷积神经网络(Convolutional Neural Network, CNN),在图像领域取得了非常好的实际效果,已经把传统的图像处理的方法快干趴下了。啰啰嗦嗦说了这么多卷积,惭愧的是,好像一直以来对卷积的物理意义并不是那么清晰。一是上学时候只是简单考试,没有仔细思考过具体前后的来龙去脉。二是本身天资比较愚钝,理解能力没有到位。三则工作以后也没有做过强相关的工作,没有机会得以加深理解。趁着年前稍微有点时间,查阅了一些相关资料,力争将卷积的前世今生能搞明白。

1.知乎上排名最高的解释
首先选取知乎上对卷积物理意义解答排名最靠前的回答。
不推荐用“反转/翻转/反褶/对称”等解释卷积。好好的信号为什么要翻转?导致学生难以理解卷积的物理意义。
这个其实非常简单的概念,国内的大多数教材却没有讲透。

直接看图,不信看不懂。以离散信号为例,连续信号同理。

已知x[0] = a, x[1] = b, x[2]=c


已知y[0] = i, y[1] = j, y[2]=k


下面通过演示求x[n] * y[n]的过程,揭示卷积的物理意义。

第一步,x[n]乘以y[0]并平移到位置0:


第二步,x[n]乘以y[1]并平移到位置1


第三步,x[n]乘以y[2]并平移到位置2:


最后,把上面三个图叠加,就得到了x[n] * y[n]:


简单吧?无非是平移(没有反褶!)、叠加。
从这里,可以看到卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。

重复一遍,这就是卷积的意义:加权叠加。

对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。

通俗的说:
在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。
这正是单位响应是如此重要的原因。

在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。
这正是单位响应是如此重要的原因。

在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。
这正是单位响应是如此重要的原因。

以上是知乎上排名最高的回答。比较简单易懂。

有个回复也可以参考:
楼主这种做法和通常教材上的区别在于:书上先反褶再平移,把输入信号当作一个整体,一次算出一个时间点的响应值;而楼主把信号拆开,一次算出一个信号在所有时间的响应值,再把各个信号相加。两者本质上是相同的。

2.卷积的另外解释
卷积表示为y ( n ) = x ( n ) ∗ h ( n ) y(n) = x(n)*h(n)y(n)=x(n)∗h(n)
使用离散数列来理解卷积会更形象一点,我们把y(n)的序列表示成y ( 0 ) , y ( 1 ) , y ( 2 ) , ⋯ y(0),y(1),y(2),\cdotsy(0),y(1),y(2),⋯, 这是系统响应出来的信号。
同理,x ( n ) x(n)x(n)的对应时刻的序列为x ( 0 ) , x ( 1 ) , x ( 2 ) , ⋯ x(0),x(1),x(2),\cdotsx(0),x(1),x(2),⋯
其实我们如果没有学过信号与系统,就常识来讲,系统的响应不仅与当前时刻系统的输入有关,也跟之前若干时刻的输入有关,因为我们可以理解为这是之前时刻的输入信号经过一种过程(这种过程可以是递减,削弱,或其他)对现在时刻系统输出的影响,那么显然,我们计算系统输出时就必须考虑现在时刻的信号输入的响应以及之前若干时刻信号输入的响应之“残留”影响的一个叠加效果。
假设0时刻系统响应为y ( 0 ) y(0)y(0),若其在1时刻时,此种响应未改变,则1时刻的响应就变成了y ( 0 ) + y ( 1 ) y(0)+y(1)y(0)+y(1),叫序列的累加和(与序列的和不一样)。但常常系统中不是这样的,因为0时刻的响应不太可能在1时刻仍旧未变化,那么怎么表述这种变化呢,就通过h(t)这个响应函数与x(0)相乘来表述,表述为x ( m ) × h ( m − n ) x(m)×h(m-n)x(m)×h(m−n),具体表达式不用多管,只要记着有大概这种关系,引入这个函数就能够表述y ( 0 ) y(0)y(0)在1时刻究竟削弱了多少,然后削弱后的值才是y ( 0 ) y(0)y(0)在1时刻的真实值,再通过累加和运算,才得到真实的系统响应。
再拓展点,某时刻的系统响应往往不一定是由当前时刻和前一时刻这两个响应决定的,也可能是再加上前前时刻,前前前时刻,前前前前时刻,等等,那么怎么约束这个范围呢,就是通过对h ( n ) h(n)h(n)这个函数在表达式中变化后的h ( m − n ) h(m-n)h(m−n)中的m的范围来约束的。即说白了,就是当前时刻的系统响应与多少个之前时刻的响应的“残留影响”有关。
当考虑这些因素后,就可以描述成一个系统响应了,而这些因素通过一个表达式(卷积)即描述出来不得不说是数学的巧妙和迷人之处了。

3.卷积的数学定义
前面讲了这么多,我们看看教科书上对卷积的数学定义。


4.卷积的应用
用一个模板和一幅图像进行卷积,对于图像上的一个点,让模板的原点和该点重合,然后模板上的点和图像上对应的点相乘,然后各点的积相加,就得到了该点的卷积值。对图像上的每个点都这样处理。由于大多数模板都是对称的,所以模板不旋转。卷积是一种积分运算,用来求两个曲线重叠区域面积。可以看作加权求和,可以用来消除噪声、特征增强。
把一个点的像素值用它周围的点的像素值的加权平均代替。
卷积是一种线性运算,图像处理中常见的mask运算都是卷积,广泛应用于图像滤波。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。

5.补充
另外在知乎上看到非常好也非常生动形象的解释,特意复制粘贴过来。(知乎马同学的解释)

从数学上讲,卷积就是一种运算。
某种运算,能被定义出来,至少有以下特征:
1.首先是抽象的、符号化的
2.其次,在生活、科研中,有着广泛的作用

比如加法:
1.a+b,是抽象的,本身只是一个数学符号
2.在现实中,有非常多的意义,比如增加、合成、旋转等等

卷积,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分、级数,所以看起来觉得很复杂。

这两个式子有一个共同的特征:


这个特征有什么意义?

只看数学符号,卷积是抽象的,不好理解的,但是,我们可以通过现实中的意义,来习惯卷积这种运算,正如我们小学的时候,学习加减乘除需要各种苹果、糖果来帮助我们习惯一样。

我们来看看现实中,这样的定义有什么意义。

2 离散卷积的例子:丢骰子

我有两枚骰子:

把这两枚骰子都抛出去:


求:两枚骰子点数加起来为4的概率是多少?
这里问题的关键是,两个骰子加起来要等于4,这正是卷积的应用场景。

我们把骰子各个点数出现的概率表示出来:


那么,两枚骰子点数加起来为4的情况有:


因此,两枚骰子点数加起来为4的概率为:
f(1)g(3)+f(2)g(2)+f(3)g(1)

符合卷积的定义,把它写成标准的形式就是:

( f ∗ g ) ( 4 ) = ∑ m = 1 3 f ( 4 − m ) g ( m ) \displaystyle (f*g)(4)=\sum _{m=1}^{3}f(4-m)g(m)
(f∗g)(4)= 
m=1

3

 f(4−m)g(m)

3 连续卷积的例子:做馒头

楼下早点铺子生意太好了,供不应求,就买了一台机器,不断的生产馒头。
假设馒头的生产速度是 f(t) ,那么一天后生产出来的馒头总量为:
∫ 0 24 f ( t ) d t \int _{0}^{24}f(t)dt∫ 
0
24

 f(t)dt
馒头生产出来之后,就会慢慢腐败,假设腐败函数为 g(t) ,比如,10个馒头,24小时会腐败:
10 ∗ g ( t ) 10*g(t)10∗g(t)
想想就知道,第一个小时生产出来的馒头,一天后会经历24小时的腐败,第二个小时生产出来的馒头,一天后会经历23小时的腐败。
如此,我们可以知道,一天后,馒头总共腐败了:
∫ 0 24 f ( t ) g ( 24 − t ) d t \int _{0}^{24}f(t)g(24-t)dt∫ 
0
24

 f(t)g(24−t)dt
这就是连续的卷积。

4 图像处理
4.1 原理

有这么一副图像,可以看到,图像上有很多噪点:


高频信号,就好像平地耸立的山峰:


看起来很显眼。

平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去。用数学的话来说,就是把山峰周围的高度平均一下。

平滑后得到:


4.2 计算

卷积可以帮助实现这个平滑算法。

有噪点的原图,可以把它转为一个矩阵:


然后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)来平滑图像:

g = [ 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 ] g=
⎡⎣⎢⎢⎢191919191919191919⎤⎦⎥⎥⎥
[191919191919191919]
g= 



  
9
1

 
9
1

 
9
1

 

  
9
1

 
9
1

 
9
1

 

  
9
1

 
9
1

 
9
1

 

  



 

记得刚才说过的算法,把高频信号与周围的数值平均一下就可以平滑山峰。

比如我要平滑$ a_{1,1}$ 点,就在矩阵中,取出$ a_{1,1} $点附近的点组成矩阵 f ,和 g 进行卷积计算后,再填回去


要注意一点,为了运用卷积, g 虽然和 f 同维度,但下标有点不一样:


写成卷积公式就是:

( f ∗ g ) ( 1 , 1 ) = ∑ k = 0 2 ∑ h = 0 2 f ( h , k ) g ( 1 − h , 1 − k ) \displaystyle (f*g)(1,1)=\sum _{k=0}^{2}\sum _{h=0}^{2}f(h,k)g(1-h,1-k)(f∗g)(1,1)= 
k=0

2

  
h=0

2

 f(h,k)g(1−h,1−k)

要求$ c_{4,5} $,一样可以套用上面的卷积公式。

这样相当于实现了 g 这个矩阵在原来图像上的划动(准确来说,下面这幅图把 g 矩阵旋转了18 0 ∘ 180^\circ180 

  ):

6.另外一个关于卷积的有意思的解释
看了好多关于卷积的答案,看到这个例子才彻底地理解了这个过程~
关于卷积的一个血腥的讲解
比如说你的老板命令你干活,你却到楼下打台球去了,后来被老板发现,他非常气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),于是你的脸上会渐渐地(贱贱地)鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统建立起来意义对应的联系。下面还需要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,无论什么时候老板打你一巴掌,打在你脸的同一位置(这似乎要求你的脸足够光滑,如果你说你长了很多青春痘,甚至整个脸皮处处连续处处不可导,那难度太大了,我就无话可说了哈哈),你的脸上总是会在相同的时间间隔内鼓起来一个相同高度的包来,并且假定以鼓起来的包的大小作为系统输出。好了,那么,下面可以进入核心内容——卷积了!
如果你每天都到地下去打台球,那么老板每天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了,所以时间长了,你甚至就适应这种生活了……如果有一天,老板忍无可忍,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,效果不断叠加了,这样这些效果就可以求和了,结果就是你脸上的包的高度随时间变化的一个函数了(注意理解);如果老板再狠一点,频率越来越高,以至于你都辨别不清时间间隔了,那么,求和就变成积分了。可以这样理解,在这个过程中的某一固定的时刻,你的脸上的包的鼓起程度和什么有关呢?和之前每次打你都有关!但是各次的贡献是不一样的,越早打的巴掌,贡献越小,所以这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是你脸上的包的大小随时间变化的函数。本来你的包几分钟就可以消肿,可是如果连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?反映到剑桥大学的公式上,f(a)就是第a个巴掌,g(x-a)就是第a个巴掌在x时刻的作用程度,乘起来再叠加就ok了,大家说是不是这个道理呢?我想这个例子已经非常形象了,你对卷积有了更加具体深刻的了解了吗?

参考资料:
1.https://www.zhihu.com/question/22298352
2.http://blog.youkuaiyun.com/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.youkuaiyun.com/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 如何理解傅里叶变换公式?
————————————————
版权声明:本文为优快云博主「bitcarmanlee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/bitcarmanlee/article/details/54729807

二、什么是图像卷积

本文章内容

1 连续时间信号的卷积
2 离散时间信号的卷积
3 图像卷积是什么
4 图像卷积的一些应用
5.图像卷积与卷积核,滤波的关系
文章由我们熟悉的一维连续时间信号的卷积逐渐过渡到图像卷积。文章是循序渐进的,希望想要了解的朋友们可以耐心读一读。本人理解有限,如有错误还请指出

(1)先看连续时间信号的卷积:

可以看到对与连续时间信号而言,卷积是一种特殊的积分运算,它的过程就是一个函数固定不动,另一个函数先以y轴为对称轴反转,然后不断执行相乘,积分,滑动。

(2.)当我们把连续时间信号离散化后,卷积的定义便成为了:

其中x(n)和h(n)是参与运算的离散时间信号。在这个定义中,卷积的过程尤为清晰:
在坐标轴上让x(n)保持不动,先把h(n)反转,然后不断执行二者重合部分相乘求和然后让h(n)滑动的过程。离散时间信号可以看作是一串序列,它是一维的,如果我们把它扩充为二维序列,那不就是图像了吗?图像的本质就是灰度值的二维序列。
(3.)下面我们来看什么是图像的卷积:

在这幅图中,source pixel 是我们的图像,它本质是灰度的二维序列,图中的convolution kernel是什么呢?这个我们称它为卷积核,这个卷积核就相当于是一维离散信号卷积中的一个参与卷积的信号,图像本身就相当于是一维离散信号卷积中的另一个离散序列信号,图像卷积的过程与一维的情况十分类似:图像卷积就是卷积核在图像上按行滑动遍历像素时不断的相乘求和的过程。举个例子:如图中所示,目前卷积核滑动到了图像左上角,我们把图像上的9个值与卷积核的9个数值按照对应位置相乘再相加得到一个和,这个和就是我们得到的卷积值。然后把卷积核向右移动一个像素,再执行对应位置相乘再相加的过程得到第二个卷积值,当把所有像素遍历完成之后我们得到的结果就构成了一幅图像。这就是卷积得到的图像。
(4.)在图像处理中,我们不会为了卷积而去卷积,为什么呢?按照卷积的定义,它是与卷积核相乘求和的结果,如果图像本身像素的数据类型是8位无符号数,那么它的灰度范围就是0(黑色)到255(白色),这样以来相乘后的值很容易大于255,那么怎么办呢?一般就是截断为255。从我这几行的描述可以看到,单单卷积确实没什么用,因为图像卷积的用武之处不在于此。
(5.)图像卷积常常用于图像滤波(平滑化),图像梯度,开运算,闭运算,黑帽运算,顶帽运算等形态处理,以及基于梯度运算的边缘提取中。

比如均值滤波的卷积核是这样的:

它也是按照卷积运算的过程相乘求和再滑动,只不过它的核里每个值都是1,在求和之后还除以核的大小来取平均。

比如高斯滤波是这样的:

高斯滤波的时候它的核是离中心越近值越大,也就是不同位置的权重不同。在相乘求和之后会除以核内数值的求和值以保证灰度值不会超出范围

看到这里大家应该会有疑惑,不是正在说卷积吗,怎么就开始扯滤波了?情况是这样的:什么是滤波?它的本质就是卷积,是按照一定的特殊规则去卷积,此时使用的卷积核不是随意的,而是有既定的规矩的,比如卷积核应取3x3,5x5这样的具有中心的核,而且核内数值的分布也是有规定的,视不同的滤波方式而定。

讲了这么多我还没有说什么是卷积核,卷积核就是一种求和的规则,是一种映射的规则。原图像像素点的值与对应位置上的卷积核的值相乘然后按权重相加处理,这个过程用数学去表示不就是src(原图像) x kernel(映射规则)=result(卷积的结果) 吗?所以卷积核就是一种运算的规则,由卷积核规则的不同衍生出了不同的滤波方式,不同的梯度运算方式等。

讲到这里我还想再说一说滤波,为什么卷积一下就滤波了呢?我举个例子:就比如上文写到的均值滤波,它的映射规则(就是卷积核)不就是全部都是1除以核大小吗?也就是说原图像与这样的卷积核卷积的结果就是原图像的像素值乘以卷积核对应位置的值相加,很巧合的是核内的值都是1/25(这是对于5x5大小的核来说的),那这样看很显然,卷积的结果就是把原图像像素值相加取平均值。这样一来像素与像素之间的差异性就变小了,图像中分明的线条和边界就是像素值迥然的差异所导致的,差异性减小导致边界就模糊了,图像自然就变得平滑了。说到这里还是没说滤波这个概念,我们在数字信号处理中接触的诸如高通滤波就是为了滤除高频信号(分布在π附近的信号),在图像滤波中也是如此。我刚才说滤波后像素与像素之间的差异性减小了,这不就意味着滤除了高频成分吗?高频信号的定义就是变化很快的信号,在图像中,如果两个像素差异很大就意味着移动一个像素的距离带来的变化就是巨大的,而当这巨大的变化连接起来就是图像中的图形的边界或线条,这样就是为什么线条被称之为高频信号。

我想看到这里大家应该就理解了为什么卷积一下就能滤波了吧,卷积的一种应用形式就是滤波,当然不同的卷积核有不同的卷积效果,所以卷积还有诸如梯度运算等其他的应用形式,差别就在于卷积核的不同

总结起来就是:图像卷积靠卷积核完成,卷积核规定了运算的规则,滤波是卷积运算所带来的效果。不同的卷积核所得到的卷积效果不同,故衍生出了不同种类的滤波,形态运算,梯度运算等等概念。由此可见:卷积是图像处理的基础,许许多多处理方式都是离不开卷积的
————————————————
版权声明:本文为优快云博主「naruhina」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/naruhina/article/details/104729037/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值