天天看點

圖像卷積、相關以及在MATLAB中的操作圖像卷積、相關以及在MATLAB中的操作

2016年7月11日 20:34:35, By ChrisZZ

圖像進行中常常需要用一個濾波器做空間濾波操作。空間濾波操作有時候也被叫做卷積濾波,或者幹脆叫卷積(離散的卷積,不是微積分裡連續的卷積);濾波器也有很多名字:卷積模版、卷積核、掩模、視窗等。

空間濾波可以分為線性濾波和非線性濾波。非線性濾波常見的有中值濾波、最大值濾波等,相當于自定義一個函數,在數學上由于不滿足線性變換是以叫做非線性濾波。這裡不細研究它。

線性濾波則通常是:将模版覆寫區域内的元素,以模版中對應位置元素為權值,進行累加。看起來挺簡單的,但是要區分相關(cross-correlation)和卷積(convolution)兩種模式。為什麼呢?因為在MATLAB裡是有所區分的,而且不少中文書裡面把它們混淆了。

我們最容易的了解是:将模版中元素從左到右、從上到下,作為使用順序,那麼卷積操作的結果,就是模版第一個元素乘以它覆寫的元素,加上模版第二個元素乘以它覆寫的元素,再加上模版第三個元素乘以它覆寫的元素,...,一直加到模版最後一個元素乘以它覆寫的元素。好吧,其實就是:模版覆寫區域内,元素逐一相乘然後累加,此時的對應位置就是上下投影後被覆寫的位置。

上面這個了解确實是看起來最容易了解的,因而很多中文書把它叫做"卷積"。然而這個概念其實叫做相關,而卷積則相當于:将同樣的模版旋轉180°後,再做"相關"操作。當然,如果模版是180°對稱的那麼卷積和相關是相同的。但是并不是所有的模版都對稱。是以,我建議,在滑窗操作、計算圖像梯度等場合,不要使用“卷積”,而要使用“濾波”或者“相關”。因為,我們通常講的卷積,其實是相關,那就不要用卷積這個詞以免引起混淆。

在MATLAB中用<code>imfilter</code>來實作線性空間濾波:

最常用的是這句:

當然,如果硬要做真正的卷積濾波,除了指定<code>imfilter</code>中的的<code>conv</code>參數,也可以先将模版旋轉180°:

說了這麼多廢話,總結起來就是3句話:

很多中文書裡(數字圖象處理一類)講的卷積過濾其實應當叫做相關過濾

平時濾波最常用的是相關濾波,也就是“覆寫位相乘,然後累加”

MATLAB中的寫法為<code>imfilter(f, w, 'replicate')</code>

<a href="https://www.zhihu.com/question/29121110">https://www.zhihu.com/question/29121110</a>

繼續閱讀