最容易理解的對卷積(convolution)的解釋

囉嗦開場白

讀本科期間,信號與系統裏面常常講到卷積(convolution),自動控制原理裏面也會常常有提到卷積。碩士期間又學了線性系統理論與數字信號處理,裏面也是各類大把大把卷積的概念。至於最近大火的深度學習,更有專門的卷積神經網絡(Convolutional Neural Network, CNN),在圖像領域取得了很是好的實際效果,已經把傳統的圖像處理的方法快乾趴下了。囉囉嗦嗦說了這麼多卷積,慚愧的是,好像一直以來對卷積的物理意義並非那麼清晰。一是上學時候只是簡單考試,沒有仔細思考過具體先後的前因後果。二是自己天資比較愚鈍,理解能力沒有到位。三則工做之後也沒有作過強相關的工做,沒有機會得以加深理解。趁着年前稍微有點時間,查閱了一些相關資料,力爭將卷積的前世此生能搞明白。html

1.知乎上排名最高的解釋

首先選取知乎上對卷積物理意義解答排名最靠前的回答。 
不推薦用「反轉/翻轉/反褶/對稱」等解釋卷積。好好的信號爲何要翻轉?致使學生難以理解卷積的物理意義。 
這個其實很是簡單的概念,國內的大多數教材卻沒有講透。算法

直接看圖,不信看不懂。以離散信號爲例,連續信號同理。網絡

已知x[0] = a, x[1] = b, x[2]=c 
這裏寫圖片描述函數

已知y[0] = i, y[1] = j, y[2]=k 
這裏寫圖片描述學習

下面經過演示求x[n] * y[n]的過程,揭示卷積的物理意義。url

第一步,x[n]乘以y[0]並平移到位置0: 
這裏寫圖片描述spa

第二步,x[n]乘以y[1]並平移到位置1 
這裏寫圖片描述.net

第三步,x[n]乘以y[2]並平移到位置2: 
這裏寫圖片描述3d

最後,把上面三個圖疊加,就獲得了x[n] * y[n]: 
這裏寫圖片描述htm

簡單吧?無非是平移(沒有反褶!)、疊加。 
從這裏,能夠看到卷積的重要的物理意義是:一個函數(如:單位響應)在另外一個函數(如:輸入信號)上的加權疊加。

重複一遍,這就是卷積的意義:加權疊加。

對於線性時不變系統,若是知道該系統的單位響應,那麼將單位響應和輸入信號求卷積,就至關於把輸入信號的各個時間點的單位響應 加權疊加,就直接獲得了輸出信號。

通俗的說: 
在輸入信號的每一個位置,疊加一個單位響應,就獲得了輸出信號。 
這正是單位響應是如此重要的緣由。

在輸入信號的每一個位置,疊加一個單位響應,就獲得了輸出信號。 
這正是單位響應是如此重要的緣由。

在輸入信號的每一個位置,疊加一個單位響應,就獲得了輸出信號。 
這正是單位響應是如此重要的緣由。

以上是知乎上排名最高的回答。比較簡單易懂。

有個回覆也能夠參考: 
樓主這種作法和一般教材上的區別在於:書上先反褶再平移,把輸入信號看成一個總體,一次算出一個時間點的響應值;而樓主把信號拆開,一次算出一個信號在全部時間的響應值,再把各個信號相加。二者本質上是相同的。

2.卷積的另外解釋

卷積表示爲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),⋯, 這是系統響應出來的信號。 
同理,x(n)x(n)的對應時刻的序列爲x(0),x(1),x(2),x(0),x(1),x(2),⋯ 
其實咱們若是沒有學過信號與系統,就常識來說,系統的響應不只與當前時刻系統的輸入有關,也跟以前若干時刻的輸入有關,由於咱們能夠理解爲這是以前時刻的輸入信號通過一種過程(這種過程能夠是遞減,削弱,或其餘)對如今時刻系統輸出的影響,那麼顯然,咱們計算系統輸出時就必須考慮如今時刻的信號輸入的響應以及以前若干時刻信號輸入的響應之「殘留」影響的一個疊加效果。 
假設0時刻系統響應爲y(0)y(0),若其在1時刻時,此種響應未改變,則1時刻的響應就變成了y(0)+y(1)y(0)+y(1),叫序列的累加和(與序列的和不同)。但經常系統中不是這樣的,由於0時刻的響應不太可能在1時刻仍舊未變化,那麼怎麼表述這種變化呢,就經過h(t)這個響應函數與x(0)相乘來表述,表述爲x(m)×h(mn)x(m)×h(m−n),具體表達式不用多管,只要記着有大概這種關係,引入這個函數就可以表述y(0)y(0)在1時刻究竟削弱了多少,而後削弱後的值纔是y(0)y(0)在1時刻的真實值,再經過累加和運算,才獲得真實的系統響應。 
再拓展點,某時刻的系統響應每每不必定是由當前時刻和前一時刻這兩個響應決定的,也多是再加上前前時刻,前前前時刻,前前前前時刻,等等,那麼怎麼約束這個範圍呢,就是經過對h(n)h(n)這個函數在表達式中變化後的h(mn)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)

符合卷積的定義,把它寫成標準的形式就是:

 

 
(fg)(4)=m=13f(4m)g(m)(f∗g)(4)=∑m=13f(4−m)g(m)

 

3 連續卷積的例子:作饅頭

樓下早點鋪子生意太好了,供不該求,就買了一臺機器,不斷的生產饅頭。 
假設饅頭的生產速度是 f(t) ,那麼一天後生產出來的饅頭總量爲: 
240f(t)dt∫024f(t)dt 
饅頭生產出來以後,就會慢慢腐敗,假設腐敗函數爲 g(t) ,好比,10個饅頭,24小時會腐敗: 
10g(t)10∗g(t) 
想一想就知道,第一個小時生產出來的饅頭,一天後會經歷24小時的腐敗,第二個小時生產出來的饅頭,一天後會經歷23小時的腐敗。 
如此,咱們能夠知道,一天後,饅頭總共腐敗了: 
240f(t)g(24t)dt∫024f(t)g(24−t)dt 
這就是連續的卷積。

4 圖像處理 
4.1 原理

有這麼一副圖像,能夠看到,圖像上有不少噪點: 
這裏寫圖片描述

高頻信號,就好像平地聳立的山峯: 
這裏寫圖片描述

看起來很顯眼。

平滑這座山峯的辦法之一就是,把山峯刨掉一些土,填到山峯周圍去。用數學的話來講,就是把山峯周圍的高度平均一下。

平滑後獲得: 
這裏寫圖片描述

4.2 計算

卷積能夠幫助實現這個平滑算法。

有噪點的原圖,能夠把它轉爲一個矩陣: 
這裏寫圖片描述

而後用下面這個平均矩陣(說明下,原圖的處理實際上用的是正態分佈矩陣,這裏爲了簡單,就用了算術平均矩陣)來平滑圖像:

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

記得剛纔說過的算法,把高頻信號與周圍的數值平均一下就能夠平滑山峯。

好比我要平滑a1,1a1,1 點,就在矩陣中,取出a1,1a1,1點附近的點組成矩陣 f ,和 g 進行卷積計算後,再填回去 
這裏寫圖片描述

要注意一點,爲了運用卷積, g 雖然和 f 同維度,但下標有點不同: 
這裏寫圖片描述

這裏寫圖片描述

寫成卷積公式就是:

(fg)(1,1)=k=02h=02f(h,k)g(1h,1k)(f∗g)(1,1)=∑k=02∑h=02f(h,k)g(1−h,1−k)

要求c4,5c4,5,同樣能夠套用上面的卷積公式。

這樣至關於實現了 g 這個矩陣在原來圖像上的划動(準確來講,下面這幅圖把 g 矩陣旋轉了180180∘ ):

6.另一個關於卷積的有意思的解釋

看了好多關於卷積的答案,看到這個例子才完全地理解了這個過程~ 
關於卷積的一個血腥的講解 
好比說你的老闆命令你幹活,你卻到樓下打檯球去了,後來被老闆發現,他很是氣憤,扇了你一巴掌(注意,這就是輸入信號,脈衝),因而你的臉上會漸漸地(賤賤地)鼓起來一個包,你的臉就是一個系統,而鼓起來的包就是你的臉對巴掌的響應,好,這樣就和信號系統創建起來意義對應的聯繫。下面還須要一些假設來保證論證的嚴謹:假定你的臉是線性時不變系統,也就是說,不管何時老闆打你一巴掌,打在你臉的同一位置(這彷佛要求你的臉足夠光滑,若是你說你長了不少青春痘,甚至整個臉皮到處連續到處不可導,那難度太大了,我就無話可說了哈哈),你的臉上老是會在相同的時間間隔內鼓起來一個相同高度的包來,而且假定以鼓起來的包的大小做爲系統輸出。好了,那麼,下面能夠進入核心內容——卷積了! 
若是你天天都到地下去打檯球,那麼老闆天天都要扇你一巴掌,不過當老闆打你一巴掌後,你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 如何理解傅里葉變換公式?

相關文章
相關標籤/搜索