高斯圖像濾波原理及其編程離散化實現方法

本文主要根據作者的理解整理而來,有什麼錯誤之處,請大家共同討論指出。


1、圖像濾波

        在三維計算機視覺領域,通常對於二維圖像的特徵抽取是很關鍵的第一步,這主要包括抽取二維圖像上的邊緣、角點、紋理等。通常從這些被稱爲基元圖的組成部分中,我們可以提取圖像的以下特徵:

        1)不同物體邊緣成像所帶來的灰度躍變;

        2)物體不同材料或者不同顏色組成部分之間的分界線會產生灰度躍變;

        3)物體輪廓線與背景具有不同的反射特性,也會形成灰度值不連續;

        4)物體受到光照會形成陰影,這也會形成層灰度的躍變。

       從上面分析可以看出,如果能夠較好的從二維圖像中提取出這些信息,那麼對於三維重建,物體定位,空間監控等後期目標能夠有很好的支撐作用。而這些含有圖像輪廓以及空間位置信息的點、線、面等特徵,在圖像上都體現爲灰度值的不連續或者劇烈變化。也就是說,如果我們能夠根據圖像灰度矩陣找到灰度不連續的點位置,那麼也就是實現了特徵抽取。

        不失一般性,從最簡單的一維信號回憶,如果我們想從一維信號中找到其不連續的點,那麼根據高等數學內容,可以對信號求導,其一階導數局部最大值即爲信號劇烈變化的點。

        在二維函數中,梯度向量代表着函數的最大變化率方向,因此對於二維信號,可以採用其梯度向量的模來選取灰度值不連續點。這樣在理想情況下,我們就可以用離散化的梯度逼近函數來檢測圖像灰度矩陣的灰度躍變位置,從而實現特徵抽取。

        現實中,有攝像機獲取的圖像,往往都存在噪聲,而且信號並不存在理想的階躍畸變,這樣如果依然直接採用拉普拉斯算子進行灰度躍變檢測,那樣會產生很多的虛假特徵點。因此,往往在圖像處理之前,需要對灰度圖進行濾波處理。

2、高斯濾波原理

         高斯濾波是最常用的一種圖像濾波方法,本文就要對這種濾波的思路以及具體的編程實現原理進行挖掘整理。

2.1噪聲的特性總結

       通常信息處理系統的目標是從測量到的帶有噪聲的信號中提取出真實的有用的信息,而往往真實有用信息是不可知的,因此只能通過濾波的方法進行信息估計。

       在我們進行數學仿真或者誤差評估是,往往認爲傳感器所引入的噪聲服從正態分佈(高斯白噪聲),這樣我們在進行濾波的時候就可以有針對性的來進行濾波器設計。

2.2濾波通俗理解

       濾波就是根據觀測某一隨機過程的結果,對另一與之有關的隨機過程進行估計的概率理論與方法。更通俗點講,濾波就是建立的一個數學模型,通過這個模型來將圖像數據進行能量轉化,而能量低的就排除掉,噪聲就是屬於低能量部分。

       通常從傳感器所獲得的數據都是離散的,常用的圖像濾波方法都是根據像素點附近鄰域像素的灰度值進行相應的加權平均所得(經過實際檢驗,通過這樣,可以有效的消除近似白噪聲的噪聲信號,對於圖像濾波來說,這會使得圖像邊緣相比濾波前模糊一點),不同的濾波方法這個權值大小以及所加權的數據範圍不同。

2.3 高斯濾波

       引入高斯濾波函數爲:

                  

       該函數各向同性,其曲線是草帽狀的對稱圖,該曲線對整個覆蓋面積求積分爲1。高斯濾波的思路就是:對高斯函數進行離散化,以離散點上的高斯函數值爲權值,對我們採集到的灰度矩陣的每個像素點做一定範圍鄰域內的加權平均,即可有效消除高斯噪聲。

3、高斯濾波離散化算法實現


       可以發現很多教材以及網上的資料都描述高斯濾波的原理是採用高斯算子對圖像進行卷積運算。其實在各個算法庫如Matlab、OpenCV等,在實現的時候,就是採用一個矩陣模板進行加權運算,拿圖像的八連通區域來說,中間點的像素值就等於八連通區的像素值的均值,這樣達到平滑的效果,該模板我們常成爲高斯核。

       根據上述分析可知,高斯核是整個求解的關鍵。很顯然,它是通過二維高斯函數計算得來的。這裏給出離散高斯核矩陣的計算公式。

       離散的高斯卷積核H: (2k+1)×(2k+1)維,其元素計算方法爲:


       其中Sigma爲方差,k確定核矩陣的維數,關於這兩個取值,在下文進行分析。

4、與matlab函數運行結果對比

      這裏對高斯卷積核的矩陣算法進行驗證。

      1)在matlab中用以下代碼可以產生一個3×3的核。

                                               filter=fspecial('gaussian',3,1);

      所產生的核矩陣爲:

                                   filter =

                                              0.0751    0.1238   0.0751

                                              0.1238    0.2042   0.1238

                                              0.0751   0.1238    0.0751

      2)同樣對於上述的公式,我們取k=1,Sigma=1,即可得到3×3的高斯卷積核如下:

      

      上文說到,我們進行加權濾波,權係數之和必須爲1,上面所求出的高斯濾波核函數同樣的必須進行歸一化:

       

      由此可以證明該核函數計算方法的正確性。


5、OpenCv中cvSmooth函數的用法

      該函數原型爲:

                 void cvSmooth(const CvArr* src, CvArr* dst,

                              int smoothtype=CV_GAUSSIAN,

                              int param1=3, int param2=0,double param3=0, double param4=0 );

      該函數前三個參數很容易理解,至於後四個參數以下進行分析。

      1) 如果指定param1和param2,則代表核函數的行列,即爲濾波窗口的寬度和高度;

      2) Param3:高斯卷積的Sigma值

      3) 如果用戶希望採用非對稱的高斯核,則引入param4,最後兩個參數分別代表水平核以及垂直核維數;

      4) 如果param3沒有給出,則有前兩個參數param1和param2計算出Sigma。這裏的根據是高斯分佈的特點(如圖所示,數值分佈在(μ—3σ,μ+3σ)中的概率爲0.9974),如果核矩陣更大,那麼相應的Sigma也更大,相反,如果Sigma更大,那麼核矩陣覆蓋範圍也更大。具體到OpenCv下,用如下公式進行計算(根據其源代碼顯示)。

  

      5)同樣的根據這個公式可知,如果param1和param2爲0(或者沒有給出),那麼濾波窗口的尺寸,則有後兩個參數代表的Sigma來確定。

    

6、總結

      本文主要整理了本人最近幾天學習的心得體會,主要包括對濾波的理解,對高斯濾波方法原理以及實現過程的初窺。同時對採用OpenCV進行濾波實現的函數也給出了相應的解釋。在此還要再說一下,在選擇Sigma時要注意,如果選的過大,那麼會加深濾波程度,這樣會導致圖像邊緣模糊,不利於下一步的邊緣檢測,如果過小,則濾波效果不佳,對於該參數的選取目前本人也沒什麼較好的理解,在此引出問題,希望大家共同探討進步。


參考資料:

[1] http://zh.wikipedia.org/wiki/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83

[2]http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86

[3] http://www.cnblogs.com/donj/articles/1656122.html

[4]學習OpenCV中文版

[5]計算機視覺(馬頌德版)


歡迎登陸我的個人主頁,hello2019,查看原文:http://richardliu.cn/

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