如何通俗易懂地解釋卷積?卷積爲什麼要旋轉180度?

如何通俗易懂地解釋卷積?

知乎回答:

https://www.zhihu.com/question/22298352/answer/228543288

https://www.zhihu.com/question/22298352/answer/637156871

 

卷積爲什麼要旋轉180度?

一看這個標題就會想,這有什麼大驚小怪的,可能好多人覺得這是個腦殘話題,但我確實誤解了兩三年……

 

今天在讀《OpenCV算法精解》的時候,發現對兩個矩陣做卷積運算的時候,作爲卷積算子的矩陣要逆時針旋轉180度,這是以前從來沒注意過的步驟, 說來慚愧,平時都是直接調用API,忽略了原理,以爲卷積就是像很多圖上畫的,一個卷積核挨着掃描另一個矩陣,結果疊加起來,當初上數字圖像處理課的時候也手算過卷積,不知道是老師講錯了還是我記錯了,總之一直都沒注意到卷積運算其實是「先翻轉再平移」。

 

維基百科中這樣描述卷積的物理意義:

在泛函分析中,卷積、疊積、摺積或旋積,是通過兩個函數f和g生成第三個函數的一種數學算子,表徵函數f與經過翻轉和平移的g的乘積函數所圍成的曲邊梯形的面積。

 

連續卷積

 

數學定義是:


函數f和g是定義在Rn上的可測函數,f與g的卷積記做f*g,它是其中一個函數翻轉並平移後與另一個函數的乘積的積分,是一個對平移量的函數,也就是:

 

640?wx_fmt=other

連續卷積公式(From Wikipedia)

 

知乎上有一個關於「如何通俗易懂地解釋卷積」的問答,有很多解釋版本,也都通俗易懂,挺有意思,但是個人認爲維基百科的下面這張圖用於理解卷積已經足夠。特別注意圈住的那句話,對理解卷積的意義很有幫助。

 

640?wx_fmt=other

圖解卷積(From Wikipedia)

 

離散卷積

 

640?wx_fmt=other

離散卷積(From Wikipedia)

 

Example

 

我主要做圖像處理,所以用到的是離散卷積。使用python做驗證。


下面這個圖是我們最常見的卷積運算圖:

 

640?wx_fmt=other

卷積運算圖(來自百度圖片搜索)

 

中間的卷積核,其實是已經逆時針旋轉過180度的,即做卷積的兩個矩陣其實是[[2, 1, 0, 2, 3], [9, 5, 2,4, 2, 0], [2, 3, 4, 5, 6], [1, 2, 3, 1, 0], [0, 4, 4, 2, 8]]和[[1, 0, -1], [1, 0, -1], [1, 0, -1]],沒有旋轉只有乘積求和就不叫卷積運算。

 

先來兩個矩陣,根據公式手動推導一下:

 

640?wx_fmt=other

手算卷積

 

可以發現,只有卷積核旋轉180度再掃描,纔會和公式推導計算的結果一樣,將I和K矩陣用python做卷積:

 

640?wx_fmt=other

 

和我們手算的一樣。所以自己做卷積的時候,記得「翻轉再平移」……或者乾脆用公式計算,至少不會錯。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章