常用圖像卷積核小結

0. 前言

圖像的卷積或濾波操作在各種場合應用很普遍,如各種濾鏡、卷積神經網絡等。下面這張圖片就很能說明圖像卷積的基本原理了:
圖像卷積

CSDN上這篇博客對圖像卷積的解釋也很到位。在此先總結幾個點:

  • 卷積操作的主要目的就是對圖像進行降維以及特徵提取;
  • 卷積核往往是行數和列數均爲奇數的矩陣,這樣中心較好定位;
  • 卷積核元素的總和體現出輸出的亮度,若元素總和爲1,卷積後的圖像與原圖像亮度基本一致;若元素總和爲0,則卷積後的圖像基本上是黑色,其中較亮的部分往往就是提取出圖像的某種特徵;
  • 濾波實際上就是Same模式的卷積操作,也就是說濾波後圖像的大小不變,各種濾鏡和照片的風格化就是使用不同的濾波器對圖像進行操作。因此卷積核、濾波器本質上都是一個東西;
  • 高通濾波器(High Pass Filter, HPF)表示僅允許圖像中高頻部分(即圖片中變化較劇烈的部分)通過,往往用於對圖像進行銳化處理、增強圖像中物體邊緣等。如Sobel算子、Prewitt算子、銳化濾波器等;
  • 低通濾波器(Low Pass Filter, LPF)表示僅允許圖像中低頻部分(即圖片中變化較平緩的部分)通過,往往用於對圖像進行模糊/平滑處理、消除噪點等。如高斯濾波器、均值濾波器等;

本文在此將常用的卷積核及其對應的意義總結記錄一下,以便隨時複習。

1. 均值濾波和高斯濾波

1.1 簡介

這兩個濾波器有如下兩個共同點:

  • 濾波器中元素之和爲1,輸出亮度與輸入基本一致;
  • 均爲低通濾波器,主要用於圖像模糊/平滑處理、消除噪點;
  • 核越大,模糊程度越大;

其中均值濾波器從名字就可以看出,每個元素值都一樣,是卷積核元素個數的倒數,這樣每個輸出像素就是其周圍像素的均值。一個3×33\times3的均值濾波器如下所示:
[1/91/91/91/91/91/91/91/91/9] \begin{bmatrix} 1/9 & 1/9 & 1/9 \\ 1/9 & 1/9 & 1/9 \\ 1/9 & 1/9 & 1/9 \end{bmatrix}

高斯濾波器雖然元素總和也爲1,但每個位置的權重不一樣,權重在行和列上的分佈均服從高斯分佈,故稱高斯濾波器。高斯分佈的標準差越大,則模糊程度越大。一個3×33\times3標準差爲1的高斯濾波器如下所示:
[1/162/161/162/164/162/161/162/161/16] \begin{bmatrix} 1/16 & 2/16 & 1/16 \\ 2/16 & 4/16 & 2/16 \\ 1/16 & 2/16 & 1/16 \end{bmatrix}

1.2 示例

這兩個濾波器主要作用均爲模糊圖像,或在圖像預處理中消除圖像中的噪點:
低通濾波

2. 銳化卷積核

2.1 簡介

銳化卷積核從名字就可以看出,主要作用就是對圖片進行銳化操作,也就是讓圖像的邊緣更加銳利。圖像的邊緣往往就是變化較大的地方,也就是圖像的高頻部分,因此銳化卷積核就是一種高通濾波器。一個3×33\times3的銳化卷積核如下所示:
[111191111] \begin{bmatrix} -1 & -1 & -1 \\ -1 & 9 & -1 \\ -1 & -1 & -1 \end{bmatrix}

可見該卷積核就是計算中心位置像素與周圍像素的差值,差值越大則表示該元素附近的變化越大(頻率越大),輸出值也就越大,因此是高頻濾波器的一種。銳化卷積核元素總和如果是0,則有提取圖像邊緣信息的效果。

2.2 示例

銳化卷積核作用爲突出圖像中物體的邊緣,相當於給物體描邊:
高頻濾波

3. 一階微分算子

3.1 簡介

圖像中物體的邊緣往往就是變化較爲劇烈的部分(高頻部分),對於一個函數來說,變化越劇烈的地方,對應的導數的絕對值也就越大。圖像就是一種二元函數,f(x,y)f(x,y)表示(x,y)(x,y)處像素的值,因此導數除了大小,還有方向。那麼求圖像在某方向上的一階導數(或稱圖像的梯度),也就可以反映出圖像在該處的變化程度,變化程度越快,在該方向的垂直方向可能就存在物體的邊緣。

一階微分算子可以計算出某個方向上物體的邊緣,但往往對噪聲較爲敏感,且邊緣檢測敏感度依賴於物體的大小。

3.2 Prewitt算子

Prewitt算子就是對圖像進行差分來近似對圖像的某個部分求一階導數。由於導數還具有方向性,因此同樣大小的Prewitt算子還有8種不同的類型,目的在於求上、下、左、右、左上、左下、右上、右下8個方向上的梯度。其中求向右梯度的3×33\times3Prewitt算子如下所示:
[101101101] \begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix}

類似地,求向右上方梯度的3×33\times3Prewitt算子則爲:
[011101110] \begin{bmatrix} 0 & 1 & 1 \\ -1 & 0 & 1 \\ -1 & -1 & 0 \end{bmatrix}

3.3 Sobel算子

Sobel算子則是Prewitt算子的改進版,對中間的元素適當進行了加權,Sobel算子之於Prewitt算子類似於高斯濾波之於均值濾波。同樣Prewitt算子,Sobel算子一樣考慮方向,計算向上梯度的3×33\times3Sobel算子如下所示:
[121000121] \begin{bmatrix} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{bmatrix}

類似地,求向左上方梯度的3×33\times3Sobel算子則爲:
[210101012] \begin{bmatrix} 2 & 1 & 0 \\ 1 & 0 & -1 \\ 0 & -1 & -2 \end{bmatrix}

3.4 示例

使用一階梯度可以提取出圖像中物體在某個具體方向上的邊緣:
一階微分算子

4. 二階微分算子

4.1 簡介

上一小節介紹的Prewitt算子和Sobel算子都是近似對圖像進行一階導數的計算,只能提取出某個具體方向的邊緣。由微積分的知識可知,一個函數的二階導數爲0時,代表此處的一階導數取得極值,對應地也就表明原函數在此處的變化最大。比如著名的Sigmoid函數及其一階導數、二階導數的圖像如下:
Sigmoid Derivatives
因此往往還可以根據圖像的二階導數過零點的位置,來預測圖像中變化最劇烈的地方,也許對應物體的邊緣。與一階微分算子不同,這些二階微分算子對邊緣的計算具有旋轉不變性,也就是可以檢測出各個方向上的邊緣。

4.2 Laplace算子

Laplace算子可以近似計算出圖像的二階導數,具有旋轉不變性,也就是可以檢測出各個方向的邊緣。

Laplace算子分爲兩種,分別考慮4-鄰接(D4)和8-鄰接(D8)兩種鄰域的二階微分。一個3×33\times3的4-鄰接Laplace算子如下所示:
[010141010] \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix}

8-鄰接的3×33\times3Laplace算子則考慮到斜對角方向上的梯度:
[111181111] \begin{bmatrix} 1 & 1 & 1 \\ 1 & -8 & 1 \\ 1 & 1 & 1 \end{bmatrix}

可以看出D8 Laplace算子與銳化卷積核類似,銳化卷積覈計算的是中心像素減去周圍像素的差值(中心權重爲正,周邊權重爲負);而Laplace算子則是周圍像素之和減去中心像素的差值(中心權重爲負,周邊權重爲正)。

4.3 LoG算子

Laplace算子對噪聲依然很敏感。因此常常先使用高斯濾波器對圖像進行平滑操作,再使用Laplace算子計算二階微分。二者結合稱爲LoG算子(Laplacian of Gaussian),該算子可以更加穩定地計算圖像的二階微分。常用的5×55\times5的LoG算子如下所示:
[00100012101216210121000100] \begin{bmatrix} 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 2 & 1 & 0 \\ 1 & 2 & -16 & 2 & 1 \\ 0 & 1 & 2 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 \end{bmatrix}

4.4 DoG算子

LoG算子的計算量較大,因此有數學家發明了DoG(Difference of Gaussians)算子來近似LoG算子。DoG算子翻譯爲高斯差分算子,從名稱上可以看出,就是使用兩個標準差不同的高斯濾波器對圖像進行濾波操作,再將濾波後的兩個結果相減,最後的結果可以近似LoG算子。其中涉及到的數學理論較爲複雜,在此暫不討論。

4.5 示例

二階微分算子可以提取出圖像中物體在各個方向上的邊緣:
二階微分算子

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