文章出處

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

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

區分卷積和相關

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

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

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

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

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

MATLAB下的操作

在MATLAB中用imfilter來實現線性空間濾波:

imfilter(f, w, filtering_mode, boundary_options, size_options)
f:圖像
w:濾波模版
filtering_mode:濾波模式
    'corr':相關濾波。[默認值]
    'conv':卷積濾波。
boundary_options:邊界選項
    P:(沒有引號)邊界外圍補充0。[默認值]
    'replicate':邊界外圍復制邊界值
    'symmetric':邊界外圍使用邊界鏡像
    'circular':圖像的大小通過講圖像處理為二維周期函數的一個周期來擴展(這是什么?)
size_options:大小選項
    'same':輸出大小與輸入圖像f大小相同。[默認值]
    'full':輸出與擴展(填充)后的圖像大小相同。

最常用的是這句:

imfilter(f, w, 'replicate') %相關濾波,邊界外圍填充0,輸出大小與輸入圖像f相同

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

rotated_filter=flipud(fliplr(filter))

總結

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

  1. 很多中文書里(數字圖象處理一類)講的卷積過濾其實應當叫做相關過濾
  2. 平時濾波最常用的是相關濾波,也就是“覆蓋位相乘,然后累加”
  3. MATLAB中的寫法為imfilter(f, w, 'replicate')

ref

https://www.zhihu.com/question/29121110


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()