什么!卷積要旋轉(zhuǎn)180度?!

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

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

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

泛函分析中,卷積疊積、摺積旋積,是通過兩個函數(shù)fg生成第三個函數(shù)的一種數(shù)學(xué)算子,表征函數(shù)f與經(jīng)過翻轉(zhuǎn)和平移g的乘積函數(shù)所圍成的曲邊梯形的面積。

連續(xù)卷積

數(shù)學(xué)定義是:
函數(shù)f和g是定義在Rn上的可測函數(shù),f與g的卷積記做f*g,它是其中一個函數(shù)翻轉(zhuǎn)并平移后與另一個函數(shù)的乘積的積分,是一個對平移量的函數(shù),也就是:

連續(xù)卷積公式(From Wikipedia)

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

圖解卷積(From Wikipedia)

離散卷積

離散卷積(From Wikipedia)

Example

我主要做圖像處理,所以用到的是離散卷積。使用python做驗證。
下面這個圖是我們最常見的卷積運算圖:

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

中間的卷積核,其實是已經(jīng)逆時針旋轉(zhuǎn)過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]],沒有旋轉(zhuǎn)只有乘積求和就不叫卷積運算。

先來兩個矩陣,根據(jù)公式手動推導(dǎo)一下:


手算卷積

可以發(fā)現(xiàn),只有卷積核旋轉(zhuǎn)180度再掃描,才會和公式推導(dǎo)計算的結(jié)果一樣,
將I和K矩陣用python做卷積:


python卷積.png

和我們手算的一樣。所以自己做卷積的時候,記得「翻轉(zhuǎn)再平移」……或者干脆用公式計算,至少不會錯。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容