基於OpenCV3.0圖像處理中常見的五個濾波函數

初學OpenCV的開發者很容易被OpenCV中各種濾波方法所困擾,不知道到底該用哪裏一個來做濾波。表面原因看起來是因爲OpenCV中各種濾波方式實在是太多太雜,其背後原因是對各種濾波方法的應用場景認知出現了問題,所以這裏小編從應用場景與項目中解決問題的實際出發,跟大家一起探討一下各種濾波方法。

 

一:模糊函數blur


參數說明


-參數InputArray表示輸入圖像Mat對象


-參數OutputArray表示模糊之後輸出Mat對象


-參數Size表示卷積核大小,此參數決定模糊程度,Size(x, y)其中x, y取值越大表現模糊程度越深,而且X與Y的值爲奇數。


-參數Point表示錨定的位置,也就是卷積核替換重疊像素中的哪個位置。此參數一般使用Point(-1,-1)表示使用卷積核的中心位置。


-最後一個參數表示對邊緣的處理方法,一般默認4表示默認處理方法

 

XY方向模糊-示例代碼:



效果顯示如下:


Y方向模糊-代碼示例


效果顯示如下


X方向模糊-代碼示例


效果顯示如下:


應用場景:

通過blur函數一般來去除噪聲,可以在圖像邊緣提取、特徵提取之前對圖像進行大小爲3x3的模糊以此來達到去掉干擾和噪聲目的


二:高斯模糊函數GaussianBlur


參數說明


-參數InputArray表示輸入圖像Mat對象


-參數OutputArray表示模糊之後輸出Mat對象


-參數Size表示卷積核大小,此參數決定模糊程度,Size(x, y)其中x, y取值越大表現模糊程度越深,而且X與Y的值爲奇數。


-參數SigmaX表示高斯方程中X方向的標準方差


-參數SigmaY表示高斯方程中X方向的標準方差


-最後一個參數表示對邊緣的處理方法,一般默認4表示默認處理方法

 

其中Size大小表示高斯卷積核、必須是奇數而且必須是正數、SigmaX在當Size大小不爲零的時候直接從Size大小計算、SigmaY在SigmaX不爲零的時候從X計算、SigmaX爲零的時候從Size大小中計算。

 

高斯模糊卷積核大小5x5-示例代碼


效果顯示


高斯模糊卷積核從SigmaX與SigmaY計算得到-代碼示例


效果顯示:


應用場景:

高斯模糊的應用場景一般作爲退化函數使用,可以去除圖像噪聲,Canny邊緣提取的第一步就是高斯模糊,以此來消除噪聲干擾,用高斯模糊去噪對於隨機噪聲效果明顯。


三:中值濾波函數-medianBlur


參數說明:


-參數InputArray表示輸入圖像Mat對象


-參數OutputArray表示模糊之後輸出Mat對象


-參數ksize表示卷積核大小,必須是正數而且必須是大於1,如:3、5、7等。


共有三個參數、其中第一個表示輸入圖像Mat對象,第二個表示濾波結果輸出Mat對象、第三個參數則表示卷積核的大小。

 

中值濾波-代碼示例


效果顯示


其中左邊原圖有椒鹽噪聲,中值濾波之後椒鹽噪聲被去除。


應用場景:

從上面的例子我們可以看出,中值濾波對椒鹽噪聲的圖像有比較好的效果,可以去除圖像中像素極大或者極小值。


四:雙邊模糊函數-bilateralFilter


參數說明:


-參數InputArray表示輸入圖像Mat對象


-參數OutputArray表示模糊之後輸出Mat對象


-參數d表示雙邊濾波時候中心到周圍像素距離


-參數sigmaColor表示高斯核中顏色值標準方差


-參數sigmaSpace表示高斯核中空間的標準方差


-參數borderType表示邊緣的處理方法


一共六個參數,其中如果參數d沒有申明的話或者是負數的話就從sigmaSpace中計算得到即可。常見的d取值爲15或者20如果過大會導致運算時間較長。


高斯雙邊模糊-代碼演示


效果顯示:


應用場景:

高斯雙邊濾波經常被用來實現圖像美化類APP用來做高斯磨皮核心算法,然後基於SOBEL算子進行疊加處理,通過高斯模糊得到最終結果。效果異常明顯,是一個不錯的選擇。


五:濾波函數filter2D


參數說明


-參數InputArray表示輸入圖像Mat對象


-參數OutputArray表示模糊之後輸出Mat對象


-參數d表輸出圖像的深度,-1表示跟輸入圖像深度相同。


-參數kernel表示自定義的Mat對象,卷積核或者算子。


-參數Point表示錨定的位置,Point(-1, -1)表示默認爲卷積核中心位置。


-參數delta表示卷積處理之後的每個像素值是否加上常量delta,默認0.0表示不加上額外值到處理後的像素值上。


-參數borderType表示邊緣像素的處理方式,默認爲BORDER_DEFAULT。


通過定義不同的卷積核、filter2D函數可以實現卷積的各種功能、包括模糊、銳化、邊緣提取等。下面我們就來一一通過代碼演示


實現模糊-代碼演示


演示效果:


實現邊緣提取-代碼演示


效果演示


實現銳化-代碼演示


效果演示


出了上述常見的三個卷積功能可以通過該函數自定義算子達成之外,還可以實現如下常見梯度算子效果。



Robot算子效果-代碼演示


效果如下


Sobel算子效果-代碼


效果如下:


應用場景:

filter2D是OpenCV中相當靈活的濾波函數、靈活使用可以適合多個不同應用場景,實現多種功能包括模糊、銳化、邊緣提取、圖像增強等等。


總結:

OpenCV中爲我們提供上述常見5種濾波函數,熟練掌握這五種濾波方法與應用場景是學以致用的關鍵。


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