對卷積的定義和意義的通俗解釋


https://blog.csdn.net/palet/article/details/88862647

對卷積的定義和意義的通俗解釋

版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/palet/article/details/88862647

對卷積的困惑

卷積這個概念,很早以前就學過,但是一直沒有搞懂。教科書上通常會給出定義,給出很多性質,也會用實例和圖形進行解釋,但究竟為什么要這么設計,這么計算,背后的意義是什么,往往語焉不詳。作為一個學物理出身的人,一個公式倘若倘若給不出結合實際的直觀的通俗的解釋(也就是背后的“物理”意義),就覺得少了點什么,覺得不是真的懂了。

教科書上一般定義函數f,g的卷積(f*g)(n)如下:

連續形式:

\displaystyle (f*g)(n)=\int _{-\infty }^{\infty }f(\tau )g(n-\tau )d\tau \\

離散形式:

\displaystyle (f*g)(n)=\sum _{\tau =-\infty }^{\infty }{f(\tau )g(n-\tau )}\\

並且也解釋了,先對g函數進行翻轉,相當於在數軸上把g函數從右邊褶到左邊去,也就是卷積的“卷”的由來。

然后再把g函數平移到n,在這個位置對兩個函數的對應點相乘,然后相加,這個過程是卷積的“積”的過程。

這個只是從計算的方式上對公式進行了解釋,從數學上講無可挑剔,但進一步追問,為什么要先翻轉再平移,這么設計有何用意?還是有點費解。

好在有萬能的互聯網,尤其是知乎,CSDN這樣的網站,很多的熱心網友對卷積舉了很多形象的例子進行了解釋,如卷地毯、丟骰子、打耳光、存錢等等,參見知乎上這兩個兩個經典的問題,回答的人很多:

如何通俗易懂地解釋卷積https://www.zhihu.com/question/22298352

卷積為什么叫「卷」積?  https://www.zhihu.com/question/54677157

讀完覺得非常生動有趣,但過細想想,還是感覺有些地方還是沒解釋清楚,甚至可能還有瑕疵,或者還可以改進(這些后面我會做一些分析)。

帶着問題想了兩個晚上,終於覺得有些問題想通了,所以就寫出來跟網友分享,共同學習提高。不對的地方歡迎評論拍磚。。。

明確一下,這篇文章主要想解釋兩個問題:

1. 卷積這個名詞是怎么解釋?“卷”是什么意思?“積”又是什么意思?

2. 卷積背后的意義是什么,該如何解釋?

考慮的應用場景

為了更好地理解這些問題,我們先給出兩個典型的應用場景:

1. 信號分析

一個輸入信號f(t),經過一個線性系統(其特征可以用單位沖擊響應函數g(t)描述)以后,輸出信號應該是什么?實際上通過卷積運算就可以得到輸出信號。

2. 圖像處理

輸入一幅圖像f(x,y),經過特定設計的卷積核g(x,y)進行卷積處理以后,輸出圖像將會得到模糊,邊緣強化等各種效果。

對卷積的理解

對卷積這個名詞的理解:所謂兩個函數的卷積,本質上就是先將一個函數翻轉,然后進行滑動疊加。

在連續情況下,疊加指的是對兩個函數的乘積求積分,在離散情況下就是加權求和,為簡單起見就統一稱為疊加。

整體看來是這么個過程:

                翻轉——>滑動——>疊加——>滑動——>疊加——>滑動——>疊加.....

多次滑動得到的一系列疊加值,構成了卷積函數。

卷積的“卷”,指的的函數的翻轉,從 g(t) 變成 g(-t) 的這個過程;

卷積的“積”,指的是滑動積分/加權求和。

有些文章只強調滑動疊加求和,而沒有說函數的翻轉,我覺得是不全面的;有的文章對“卷”的理解其實是“積”,我覺得是張冠李戴。

對卷積的意義的理解:

1. 從“積”的過程可以看到,我們得到的疊加值,是個全局的概念。以信號分析為例,卷積的結果是不僅跟當前時刻輸入信號的響應值有關,也跟過去所有時刻輸入信號的響應都有關系,考慮了對過去的所有輸入的效果的累積。在圖像處理的中,卷積處理的結果,其實就是把每個像素周邊的,甚至是整個圖像的像素都考慮進來,對當前像素進行某種加權處理。所以說,“積”是全局概念,或者說是一種“混合”,把兩個函數在時間或者空間上進行混合。

2. 那為什么要進行“卷”?直接相乘不好嗎?我的理解,進行“卷”(翻轉)的目的其實是施加一種約束,它指定了在“積”的時候以什么為參照。在信號分析的場景,它指定了在哪個特定時間點的前后進行“積”,在空間分析的場景,它指定了在哪個位置的周邊進行累積處理。

舉例說明

下面舉幾個例子說明為什么要翻轉,以及疊加求和的意義。

例1:信號分析

如下圖所示,輸入信號是 f(t) ,是隨時間變化的。系統響應函數是 g(t) ,圖中的響應函數是隨時間指數下降的,它的物理意義是說:如果在 t=0 的時刻有一個輸入,那么隨着時間的流逝,這個輸入將不斷衰減。換言之,到了 t=T時刻,原來在 t=0 時刻的輸入f(0)的值將衰減為f(0)g(T)。

考慮到信號是連續輸入的,也就是說,每個時刻都有新的信號進來,所以,最終輸出的是所有之前輸入信號的累積效果。如下圖所示,在T=10時刻,輸出結果跟圖中帶標記的區域整體有關。其中,f(10)因為是剛輸入的,所以其輸出結果應該是f(10)g(0),而時刻t=9的輸入f(9),只經過了1個時間單位的衰減,所以產生的輸出應該是 f(9)g(1),如此類推,即圖中虛線所描述的關系。這些對應點相乘然后累加,就是T=10時刻的輸出信號值,這個結果也是f和g兩個函數在T=10時刻的卷積值。

顯然,上面的對應關系看上去比較難看,是擰着的,所以,我們把g函數對折一下,變成了g(-t),這樣就好看一些了。看到了嗎?這就是為什么卷積要“卷”,要翻轉的原因,這是從它的物理意義中給出的。

上圖雖然沒有擰着,已經順過來了,但看上去還有點錯位,所以再進一步平移T個單位,就是下圖。它就是本文開始給出的卷積定義的一種圖形的表述:

所以,在以上計算T時刻的卷積時,要維持的約束就是: t+ (T-t) = T  。這種約束的意義,大家可以自己體會。

例2:丟骰子

在知乎問題 如何通俗易懂地解釋卷積?中排名第一的 馬同學在中舉了一個很好的例子(下面的一些圖摘自馬同學的文章,在此表示感謝),用丟骰子說明了卷積的應用。

要解決的問題是:有兩枚骰子,把它們都拋出去,兩枚骰子點數加起來為4的概率是多少?

分析一下,兩枚骰子點數加起來為4的情況有三種情況:1+3=4, 2+2=4, 3+1=4

因此,兩枚骰子點數加起來為4的概率為:

寫成卷積的方式就是:

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

在這里我想進一步用上面的翻轉滑動疊加的邏輯進行解釋。

首先,因為兩個骰子的點數和是4,為了滿足這個約束條件,我們還是把函數 g 翻轉一下,然后陰影區域上下對應的數相乘,然后累加,相當於求自變量為4的卷積值,如下圖所示:

進一步,如此翻轉以后,可以方便地進行推廣去求兩個骰子點數和為 時的概率,為f  g的卷積 f*g(n),如下圖所示:

由上圖可以看到,函數 g 的滑動,帶來的是點數和的增大。這個例子中對f和g的約束條件就是點數和,它也是卷積函數的自變量。有興趣還可以算算,如果骰子的每個點數出現的概率是均等的,那么兩個骰子的點數和n=7的時候,概率最大。

例3:圖像處理

還是引用知乎問題 如何通俗易懂地解釋卷積?中 馬同學的例子。圖像可以表示為矩陣形式(下圖摘自馬同學的文章):

preview

對圖像的處理函數(如平滑,或者邊緣提取),也可以用一個g矩陣來表示,如:

g=\begin{bmatrix} &b_{-1,-1} &b_{-1,0} &b_{-1,1}\\ &b_{0,-1} &b_{0,0} &b_{0,1} \\ &b_{1,-1} &b_{1,0} &b_{1,1} \end{bmatrix}

注意,我們在處理平面空間的問題,已經是二維函數了,相當於:

f(x,y)=a_{x,y}        g(x,y)=b_{x,y}      

那么函數f和g的在(u,v)處的卷積 f*g(u,v)該如何計算呢?

首先我們在原始圖像矩陣中取出(u,v)處的矩陣:

f=\begin{bmatrix} &a_{u-1,v-1} &a_{u-1,v} &a_{u-1,v+1}\\ &a_{u,v-1} &a_{u,v} &a_{u,v+1} \\ &a_{u+1,v-1} &a_{u+1,v} &a_{u+1,v+1} \end{bmatrix}

然后將圖像處理矩陣翻轉(延x軸和y軸兩個方向翻轉),如下:

g^{'}=\begin{bmatrix} &b_{1,1} &b_{1,0} &b_{1,-1}\\ &b_{0,1} &b_{0,0} &b_{0,-1} \\ &b_{-1,1} &b_{-1,0} &b_{-1,-1} \end{bmatrix}

計算卷積時,就可以用fg^{'}的內積:

f*g(u,v)=a_{u-1,v-1} \times b_{1,1} + a_{u-1,v} \times b_{1,0} + a_{u-1,v+1} \times b_{1,-1} + a_{u,v-1} \times b_{0,1} + a_{u,v} \times b_{0,0} + a_{u,v+1} \times b_{0,-1} + a_{u+1,v-1} \times b_{-1,1} + a_{u+1,v} \times b_{-1,0} + a_{u+1,v+1} \times b_{-1,-1}

請注意,以上公式有一個特點,做乘法的兩個對應變量a,b的下標之和都是(u,v),其目的是對這種加權求和進行一種約束。這也是為什么要將矩陣g進行翻轉的原因。

以上計算的是(u,v)處的卷積,延x軸或者y軸滑動,就可以求出圖像中各個位置的卷積,其輸出結果是處理以后的圖像(即經過平滑、邊緣提取等各種處理的圖像)。

再深入思考一下,在算圖像卷積的時候,我們是直接在原始圖像矩陣中取了(u,v)處的矩陣,為什么要取這個位置的矩陣,本質上其實是為了滿足以上的約束。因為我們要算(u,v)處的卷積,而g矩陣是3x3的矩陣,要滿足下標跟這個3x3矩陣的和是(u,v),只能是取原始圖像中以(u,v)為中心的這個3x3矩陣,即圖中的陰影區域的矩陣。

推而廣之,如果如果g矩陣不是3x3,而是6x6,那我們就要在原始圖像中取以(u,v)為中心的6x6矩陣進行計算。由此可見,這種卷積就是把原始圖像中的相鄰像素都考慮進來,進行混合。相鄰的區域范圍取決於g矩陣的維度,維度越大,涉及的周邊像素越多。而矩陣的設計,則決定了這種混合輸出的圖像跟原始圖像比,究竟是模糊了,還是更銳利了。

比如說,如下圖像處理矩陣將使得圖像變得更為平滑,顯得更模糊,因為它聯合周邊像素進行了平均處理:

g=\begin{bmatrix} &\frac{1}{9} &\frac{1}{9} &\frac{1}{9}\\ &\frac{1}{9} &\frac{1}{9} &\frac{1}{9} \\ &\frac{1}{9} &\frac{1}{9} &\frac{1}{9} \end{bmatrix}  

而如下圖像處理矩陣將使得像素值變化明顯的地方更為明顯,強化邊緣,而變化平緩的地方沒有影響,達到提取邊緣的目的:

g=\begin{bmatrix} &-1 &-1 &-1\\ &-1 &9 &-1 \\ &-1 &-1 &-1 \end{bmatrix}

對網上一些解釋的不同意見

網上有一些對卷積的形象解釋,如知乎問題卷積為什么叫「卷」積?中 荊哲 ,以及問題 如何通俗易懂地解釋卷積?中 馬同學 等人提出的如下比喻:

其實圖中“卷”的方向,是沿該方向進行積分求和的方向,並無翻轉之意。因此,這種解釋,並沒有完整描述卷積的含義,對“卷”的理解值得商榷。

一些參考資料

《數字信號處理(第二版)》程乾生,北京大學出版社

《信號與系統引論》 鄭君里,應啟珩,楊為理,高等教育出版社


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM