高斯模糊的算法 (轉載)

原文地址:html

http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html算法

 

 

 

做者: 阮一峯wordpress

日期: 2012年11月14日函數

 

 

 

 

 

一般,圖像處理軟件會提供"模糊"(blur)濾鏡,使圖片產生模糊的效果。url

"模糊"的算法有不少種,其中有一種叫作"高斯模糊"(Gaussian Blur)。它將正態分佈(又名"高斯分佈")用於圖像處理。3d

本文介紹"高斯模糊"的算法,你會看到這是一個很是簡單易懂的算法。本質上,它是一種數據平滑技術(data smoothing),適用於多個場合,圖像處理剛好提供了一個直觀的應用實例。htm

1、高斯模糊的原理blog

所謂"模糊",能夠理解成每個像素都取周邊像素的平均值。圖片

上圖中,2是中間點,周邊點都是1。ip

"中間點"取"周圍點"的平均值,就會變成1。在數值上,這是一種"平滑化"。在圖形上,就至關於產生"模糊"效果,"中間點"失去細節。

顯然,計算平均值時,取值範圍越大,"模糊效果"越強烈。

上面分別是原圖、模糊半徑3像素、模糊半徑10像素的效果。模糊半徑越大,圖像就越模糊。從數值角度看,就是數值越平滑。

接下來的問題就是,既然每一個點都要取周邊像素的平均值,那麼應該如何分配權重呢?

若是使用簡單平均,顯然不是很合理,由於圖像都是連續的,越靠近的點關係越密切,越遠離的點關係越疏遠。所以,加權平均更合理,距離越近的點權重越大,距離越遠的點權重越小。

2、正態分佈的權重

正態分佈顯然是一種可取的權重分配模式。

在圖形上,正態分佈是一種鐘形曲線,越接近中心,取值越大,越遠離中心,取值越小。

計算平均值的時候,咱們只須要將"中心點"做爲原點,其餘點按照其在正態曲線上的位置,分配權重,就能夠獲得一個加權平均值。

3、高斯函數

上面的正態分佈是一維的,圖像都是二維的,因此咱們須要二維的正態分佈。

正態分佈的密度函數叫作"高斯函數"(Gaussian function)。它的一維形式是:

其中,μ是x的均值,σ是x的方差。由於計算平均值的時候,中心點就是原點,因此μ等於0。

根據一維高斯函數,能夠推導獲得二維高斯函數:

有了這個函數 ,就能夠計算每一個點的權重了。

4、權重矩陣

假定中心點的座標是(0,0),那麼距離它最近的8個點的座標以下:

更遠的點以此類推。

爲了計算權重矩陣,須要設定σ的值。假定σ=1.5,則模糊半徑爲1的權重矩陣以下:

這9個點的權重總和等於0.4787147,若是隻計算這9個點的加權平均,還必須讓它們的權重之和等於1,所以上面9個值還要分別除以0.4787147,獲得最終的權重矩陣。

5、計算高斯模糊

有了權重矩陣,就能夠計算高斯模糊的值了。

假設現有9個像素點,灰度值(0-255)以下:

每一個點乘以本身的權重值:

獲得

將這9個值加起來,就是中心點的高斯模糊的值。

對全部點重複這個過程,就獲得了高斯模糊後的圖像。若是原圖是彩色圖片,能夠對RGB三個通道分別作高斯模糊。

6、邊界點的處理

若是一個點處於邊界,周邊沒有足夠的點,怎麼辦?

一個變通方法,就是把已有的點拷貝到另外一面的對應位置,模擬出完整的矩陣。

7、參考文獻

How to program a Gaussian Blur without using 3rd party libraries

(完)

 

 

 

 

文檔信息

相關文章
相關標籤/搜索