如何確定高斯濾波的標準差和窗口大小

如何確定高斯濾波的標準差和窗口大小 - Mr-Lee - 博客園

   

高斯函數與高斯濾波

一維高斯函數我們都熟悉,形式如下:

image

計算機視覺中,高斯濾波使用的高斯核爲\(x\)\(y\)兩個一維高斯的乘積,兩個維度上的標準差\(\sigma\)通常相同,形式如下:

image

高斯濾波(平滑),即用某一尺寸的二維高斯核與圖像進行卷積。高斯核是對連續高斯函數的離散近似,通常對高斯曲面進行離散採樣和歸一化得出,這裏,歸一化指的是卷積核所有元素之和爲1,下圖爲標準高斯和\(\sigma=1.4\)大小爲\(5\times5\)的高斯核。

izvye1

標準差

當μ=0時,唯一需要控制的參數就是標準差σ,多少合適呢?σ的確定十分依賴於問題背景,需要具體問題具體分析。但理解σ的作用,可以指導調整的方向。

高斯核可以看成是與中心距離負相關的權重。平滑時,調整σ實際是在調整週圍像素對當前像素的影響程度,調大σ即提高了遠處像素對中心像素的影響程度,濾波結果也就越平滑。高斯曲線隨σ變化的曲線如下:

izOixs

從頻域角度看,高斯函數的傅立葉變換仍是高斯,兩者標準差間的關係如下:

image

其中,σx爲空域高斯的標準差,σw爲對應頻域高斯的標準差,在空域進行高斯平滑相當於頻域低通濾波,σx越大,σw越小,頻域高斯越集中,高頻成分削弱得越多,圖像越平滑。

從低通濾波角度考慮,可以對圖像做傅立葉變換進行頻譜分析,疊加上頻域高斯並調整查看效果,找到適合的σw,再推算出空域高斯所需的σx。

窗口大小

標準差σ確定後,接下來需要確定窗口大小。上面講了高斯核是對連續高斯的離散近似,窗口越大自然近似越好,但高斯函數是鐘形曲線,距離中心越遠數值越小,足夠遠處可以忽略不計,但多遠算遠呢?

鍾型曲線在區間(μ−σ,μ+σ)範圍內的面積佔曲線下總面積的68%,(μ−2σ,μ+2σ)範圍佔95%(μ−3σ,μ+3σ)範圍佔99.7%,一般外的數值已接近於0,可忽略,半徑爲即窗口大小爲6σ × 6σ即可,通常取最近的奇數。上述3個範圍在一維和二維高斯中示意如下:


izOkMn

OpenCV中標準差與窗口大小的換算

在OpenCV函數createGaussianFilter中,若未指定窗口大小,通過σ推算窗口大小方式如下,半徑爲σ的3或4倍:

izOEq0

若指定了窗口大小,但未指定σ大小,則通過窗口大小推算σ的方式如下:

image

具體地,在函數getGaussianKernel中,當ksize不大於7時,直接從內部的small_gaussian_tab取對應大小的高斯核,若大於7,則使用上式計算出σ然後套用高斯公式,最後再歸一化。

izOeaT

在實際使用時,爲了高效,卷積核通常取[0, 255]範圍內的整數(1個Byte),因此高斯核中心最大取值爲255時,窗口尺寸的選取只需讓高斯核邊界值剛好大於0即可。令高斯核尺寸爲n,半徑爲rr = (n-1)/2,高斯核x軸上邊界(r, 0)處與中心(0, 0)處數值之比如下:

image

r足夠大,其極限爲image,若中心值爲255,則邊界值爲255*0.00386592=0.9858096,是合適的。但公式是如何設計出來的還不清楚,這裏只是校驗了其性質,sigh。



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