基礎——線性濾波與卷積、高斯濾波

本文轉載於:
http://blog.csdn.net/zouxy09/article/details/49080029
http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

一、線性濾波與卷積的基本概念

  線性濾波可以說是圖像處理最基本的方法,它可以允許我們對圖像進行處理,產生很多不同的效果。做法很簡單。首先,我們有一個二維的濾波器矩陣(有個高大上的名字叫卷積核)和一個要處理的二維圖像。然後,對於圖像的每一個像素點,計算它的鄰域像素和濾波器矩陣的對應元素的乘積,然後加起來,作爲該像素位置的值。這樣就完成了濾波過程。
  這裏寫圖片描述
  對圖像和濾波矩陣進行逐個元素相乘再求和的操作就相當於將一個二維的函數移動到另一個二維函數的所有位置,這個操作就叫卷積或者協相關。卷積和協相關的差別是,卷積需要先對濾波矩陣進行180的翻轉,但如果矩陣是對稱的,那麼兩者就沒有什麼差別了。
  Correlation 和 Convolution可以說是圖像處理最基本的操作,但卻非常有用。這兩個操作有兩個非常關鍵的特點:它們是線性的,而且具有平移不變性shift-invariant。平移不變性指我們在圖像的每個位置都執行相同的操作。線性指這個操作是線性的,也就是我們用每個像素的鄰域的線性組合來代替這個像素。這兩個屬性使得這個操作非常簡單,因爲線性操作是最簡單的,然後在所有地方都做同樣的操作就更簡單了。
  實際上,在信號處理領域,卷積有廣泛的意義,而且有其嚴格的數學定義,但在這裏不關注這個。
  2D卷積需要4個嵌套循環4-double loop,所以它並不快,除非我們使用很小的卷積核。這裏一般使用3x3或者5x5。而且,對於濾波器,也有一定的規則要求
   1)濾波器的大小應該是奇數,這樣它纔有一箇中心,例如3x3,5x5或者7x7。有中心了,也有了半徑的稱呼,例如5x5大小的核的半徑就是2。
   2)濾波器矩陣所有的元素之和應該要等於1,這是爲了保證濾波前後圖像的亮度保持不變。當然了,這不是硬性要求了。
   3)如果濾波器矩陣所有元素之和大於1,那麼濾波後的圖像就會比原圖像更亮,反之,如果小於1,那麼得到的圖像就會變暗。如果和爲0,圖像不會變黑,但也會非常暗。
   4)對於濾波後的結構,可能會出現負數或者大於255的數值。對這種情況,我們將他們直接截斷到0和255之間即可。對於負數,也可以取絕對值。
  


二、神奇的卷積核

  上面說到,對圖像的濾波處理就是對圖像應用一個小小的卷積核,那這個小小的卷積核到底有哪些魔法,能讓一個圖像從慘不忍睹變得秀色可餐。下面我們一起來領略下一些簡單但不簡單的卷積核的魔法。
  

1、啥也不做

  哈哈,大家可以看到啥了嗎?這個濾波器啥也沒有做,得到的圖像和原圖是一樣的。因爲只有中心點的值是1。鄰域點的權值都是0,對濾波後的取值沒有任何影響。
  這裏寫圖片描述
  下面我們動點真格的。
  

2、圖像銳化濾波器Sharpness Filter

  圖像的銳化和邊緣檢測很像,首先找到邊緣,然後把邊緣加到原來的圖像上面,這樣就強化了圖像的邊緣,使圖像看起來更加銳利了。這兩者操作統一起來就是銳化濾波器了,也就是在邊緣檢測濾波器的基礎上,再在中心的位置加1,這樣濾波後的圖像就會和原始的圖像具有同樣的亮度了,但是會更加銳利。
這裏寫圖片描述
  
  我們把核加大,就可以得到更加精細的銳化效果:
這裏寫圖片描述
  
   另外,下面的濾波器會更強調邊緣:
這裏寫圖片描述
  
  主要是強調圖像的細節。最簡單的3x3的銳化濾波器如下:
這裏寫圖片描述
   實際上是計算當前點和周圍點的差別,然後將這個差別加到原來的位置上。另外,中間點的權值要比所有的權值和大於1,意味着這個像素要保持原來的值。
  

3、邊緣檢測Edge Detection

  我們要找水平的邊緣:需要注意的是,這裏矩陣的元素和是0,所以濾波後的圖像會很暗,只有邊緣的地方是有亮度的。
這裏寫圖片描述
  
  爲什麼這個濾波器可以尋找到水平邊緣呢?因爲用這個濾波器卷積相當於求導的離散版本:你將當前的像素值減去前一個像素值,這樣你就可以得到這個函數在這兩個位置的差別或者斜率。下面的濾波器可以找到垂直方向的邊緣,這裏像素上和下的像素值都使用:
這裏寫圖片描述
  
  再下面這個濾波器可以找到45度的邊緣:取-2不爲了什麼,只是爲了讓矩陣的元素和爲0而已。
這裏寫圖片描述
  
  那下面這個濾波器就可以檢測所有方向的邊緣:
這裏寫圖片描述
  
  爲了檢測邊緣,我們需要在圖像對應的方向計算梯度。用下面的卷積核來卷積圖像,就可以了。但在實際中,這種簡單的方法會把噪聲也放大了。另外,需要注意的是,矩陣所有的值加起來要是0.
這裏寫圖片描述
  

4、均值模糊Box Filter (Averaging)

  我們可以將當前像素和它的四鄰域的像素一起取平均,然後再除以5,或者直接在濾波器的5個地方取0.2的值即可,如下圖:
這裏寫圖片描述
  
  可以看到,這個模糊還是比較溫柔的,我們可以把濾波器變大,這樣就會變得粗暴了:注意要將和再除以13.
這裏寫圖片描述
  
  所以,如果你想要更模糊的效果,加大濾波器的大小即可。或者對圖像應用多次模糊也可以。
  這裏寫圖片描述
  這裏寫圖片描述
  
  


三、高斯模糊

  均值模糊很簡單,但不是很平滑。高斯模糊就有這個優點,所以被廣泛用在圖像降噪上。特別是在邊緣檢測之前,都會用來移除細節。高斯濾波器是一個低通濾波器。它將正態分佈(又名”高斯分佈”)用於圖像處理。本質上,它是一種數據平滑技術(data smoothing),適用於多個場合,圖像處理恰好提供了一個直觀的應用實例。
  

1、高斯模糊的原理

  所謂”模糊”,可以理解成每一個像素都取周邊像素的平均值。
  這裏寫圖片描述
  上圖中,2是中間點,周邊點都是1。
  這裏寫圖片描述
  “中間點”取”周圍點”的平均值,就會變成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三個通道分別做高斯模糊。

發佈了73 篇原創文章 · 獲贊 17 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章