文章目錄
0. 前言
圖像的卷積或濾波操作在各種場合應用很普遍,如各種濾鏡、卷積神經網絡等。下面這張圖片就很能說明圖像卷積的基本原理了:
CSDN上這篇博客對圖像卷積的解釋也很到位。在此先總結幾個點:
- 卷積操作的主要目的就是對圖像進行降維以及特徵提取;
- 卷積核往往是行數和列數均爲奇數的矩陣,這樣中心較好定位;
- 卷積核元素的總和體現出輸出的亮度,若元素總和爲1,卷積後的圖像與原圖像亮度基本一致;若元素總和爲0,則卷積後的圖像基本上是黑色,其中較亮的部分往往就是提取出圖像的某種特徵;
- 濾波實際上就是Same模式的卷積操作,也就是說濾波後圖像的大小不變,各種濾鏡和照片的風格化就是使用不同的濾波器對圖像進行操作。因此卷積核、濾波器本質上都是一個東西;
- 高通濾波器(High Pass Filter, HPF)表示僅允許圖像中高頻部分(即圖片中變化較劇烈的部分)通過,往往用於對圖像進行銳化處理、增強圖像中物體邊緣等。如Sobel算子、Prewitt算子、銳化濾波器等;
- 低通濾波器(Low Pass Filter, LPF)表示僅允許圖像中低頻部分(即圖片中變化較平緩的部分)通過,往往用於對圖像進行模糊/平滑處理、消除噪點等。如高斯濾波器、均值濾波器等;
本文在此將常用的卷積核及其對應的意義總結記錄一下,以便隨時複習。
1. 均值濾波和高斯濾波
1.1 簡介
這兩個濾波器有如下兩個共同點:
- 濾波器中元素之和爲1,輸出亮度與輸入基本一致;
- 均爲低通濾波器,主要用於圖像模糊/平滑處理、消除噪點;
- 核越大,模糊程度越大;
其中均值濾波器從名字就可以看出,每個元素值都一樣,是卷積核元素個數的倒數,這樣每個輸出像素就是其周圍像素的均值。一個的均值濾波器如下所示:
高斯濾波器雖然元素總和也爲1,但每個位置的權重不一樣,權重在行和列上的分佈均服從高斯分佈,故稱高斯濾波器。高斯分佈的標準差越大,則模糊程度越大。一個標準差爲1的高斯濾波器如下所示:
1.2 示例
這兩個濾波器主要作用均爲模糊圖像,或在圖像預處理中消除圖像中的噪點:
2. 銳化卷積核
2.1 簡介
銳化卷積核從名字就可以看出,主要作用就是對圖片進行銳化操作,也就是讓圖像的邊緣更加銳利。圖像的邊緣往往就是變化較大的地方,也就是圖像的高頻部分,因此銳化卷積核就是一種高通濾波器。一個的銳化卷積核如下所示:
可見該卷積核就是計算中心位置像素與周圍像素的差值,差值越大則表示該元素附近的變化越大(頻率越大),輸出值也就越大,因此是高頻濾波器的一種。銳化卷積核元素總和如果是0,則有提取圖像邊緣信息的效果。
2.2 示例
銳化卷積核作用爲突出圖像中物體的邊緣,相當於給物體描邊:
3. 一階微分算子
3.1 簡介
圖像中物體的邊緣往往就是變化較爲劇烈的部分(高頻部分),對於一個函數來說,變化越劇烈的地方,對應的導數的絕對值也就越大。圖像就是一種二元函數,表示處像素的值,因此導數除了大小,還有方向。那麼求圖像在某方向上的一階導數(或稱圖像的梯度),也就可以反映出圖像在該處的變化程度,變化程度越快,在該方向的垂直方向可能就存在物體的邊緣。
一階微分算子可以計算出某個方向上物體的邊緣,但往往對噪聲較爲敏感,且邊緣檢測敏感度依賴於物體的大小。
3.2 Prewitt算子
Prewitt算子就是對圖像進行差分來近似對圖像的某個部分求一階導數。由於導數還具有方向性,因此同樣大小的Prewitt算子還有8種不同的類型,目的在於求上、下、左、右、左上、左下、右上、右下8個方向上的梯度。其中求向右梯度的Prewitt算子如下所示:
類似地,求向右上方梯度的Prewitt算子則爲:
3.3 Sobel算子
Sobel算子則是Prewitt算子的改進版,對中間的元素適當進行了加權,Sobel算子之於Prewitt算子類似於高斯濾波之於均值濾波。同樣Prewitt算子,Sobel算子一樣考慮方向,計算向上梯度的Sobel算子如下所示:
類似地,求向左上方梯度的Sobel算子則爲:
3.4 示例
使用一階梯度可以提取出圖像中物體在某個具體方向上的邊緣:
4. 二階微分算子
4.1 簡介
上一小節介紹的Prewitt算子和Sobel算子都是近似對圖像進行一階導數的計算,只能提取出某個具體方向的邊緣。由微積分的知識可知,一個函數的二階導數爲0時,代表此處的一階導數取得極值,對應地也就表明原函數在此處的變化最大。比如著名的Sigmoid函數及其一階導數、二階導數的圖像如下:
因此往往還可以根據圖像的二階導數過零點的位置,來預測圖像中變化最劇烈的地方,也許對應物體的邊緣。與一階微分算子不同,這些二階微分算子對邊緣的計算具有旋轉不變性,也就是可以檢測出各個方向上的邊緣。
4.2 Laplace算子
Laplace算子可以近似計算出圖像的二階導數,具有旋轉不變性,也就是可以檢測出各個方向的邊緣。
Laplace算子分爲兩種,分別考慮4-鄰接(D4)和8-鄰接(D8)兩種鄰域的二階微分。一個的4-鄰接Laplace算子如下所示:
8-鄰接的Laplace算子則考慮到斜對角方向上的梯度:
可以看出D8 Laplace算子與銳化卷積核類似,銳化卷積覈計算的是中心像素減去周圍像素的差值(中心權重爲正,周邊權重爲負);而Laplace算子則是周圍像素之和減去中心像素的差值(中心權重爲負,周邊權重爲正)。
4.3 LoG算子
Laplace算子對噪聲依然很敏感。因此常常先使用高斯濾波器對圖像進行平滑操作,再使用Laplace算子計算二階微分。二者結合稱爲LoG算子(Laplacian of Gaussian),該算子可以更加穩定地計算圖像的二階微分。常用的的LoG算子如下所示:
4.4 DoG算子
LoG算子的計算量較大,因此有數學家發明了DoG(Difference of Gaussians)算子來近似LoG算子。DoG算子翻譯爲高斯差分算子,從名稱上可以看出,就是使用兩個標準差不同的高斯濾波器對圖像進行濾波操作,再將濾波後的兩個結果相減,最後的結果可以近似LoG算子。其中涉及到的數學理論較爲複雜,在此暫不討論。
4.5 示例
二階微分算子可以提取出圖像中物體在各個方向上的邊緣: