C 版本OpenCv教程 三十三 雙邊濾波

2021-10-14 16:25:35 字數 2921 閱讀 8840

前面我們介紹的濾波方法都會影象照成模糊,使得邊緣資訊變弱或者消失,因此需要一種能夠對影象邊緣資訊進行保留的濾波演算法,雙邊濾波就是經典的常用的能夠保留影象邊緣資訊的濾波演算法之一。雙邊濾波是一種綜合考慮濾波器內影象空域資訊和濾波器內影象畫素灰度值相似性的濾波演算法,可以實現在保留區域資訊的基礎上實現對雜訊的去除、對區域性邊緣的平滑。雙邊濾波對高頻率的波動訊號起到平滑的作用,同時保留大幅值的訊號波動,進而實現對保留影象中邊緣資訊的作用。雙邊濾波的示意圖如圖5-24所示,雙邊濾波器是兩個濾波器的結合,分別考慮空域資訊和值域資訊,使得濾波器對邊緣附近的畫素進行濾波時,距離邊緣較遠的畫素值不會對邊緣上的畫素值影響太多,進而保留了邊緣的清晰性。

雙邊濾波原理的數學表示如式(5.9)中所示。

其中ω(i,j,k,l)為加權係數,其取值決定於空域濾波器和值域濾波器的乘積,空域濾波器的表示形式如式(5.9)所示,值域表示形式如式(5.10)所示。

兩者相乘後,會產生形如式(5.11)所示的依賴於資料的雙邊濾波器。

兩者相乘後,會產生形如式(5.11)所示的依賴於資料的雙邊濾波器。

opencv 4提供了對影象進行雙邊濾波操作的bilateralfilter()函式,該函式的函式原型在**清單5-20中給出。

void cv:

:bilateralfilter

(inputarray src,

outputarray dst,

int d,

double sigmacolor,

double sigmaspace,

int bordertype = border_default

)

該函式可以對影象進行雙邊濾波處理,在減少雜訊的同時保持邊緣的清晰。該函式第乙個引數是待進行雙邊濾波的影象,該函式要求只能輸入單通道的灰度圖和三通道的彩色影象,並且對於影象的資料型別也有嚴格的要求,必須是cv_8u、cv_32f和cv_64f三者之一。函式第三個引數是濾波器的直徑,當濾波器的直徑大於5時,函式的執行速度會變慢,因此如果需要在實時系統中使用該函式,建議將濾波器的半徑設定為5,對於離線處理含有大量雜訊的濾波影象時,可以將濾波器的半徑設為9,當濾波器半徑為非正數的時候,會根據空間濾波器的標準差計算濾波器的直徑。函式第四個和第五個引數是兩個濾波器的標準差值,為了簡單起見可以將兩個引數設定成相同的數值,當他們小於10時,濾波器對影象的濾波作用較弱,當他們大於150時濾波效果會非常的強烈,使影象看起來具有**的效果。該函式執行時間比其他濾波方法時間要長,因此在實際工程中使用的時候,選擇合適的引數十分重要。另外比較有趣的現象是,使用雙邊濾波會具有美顏效果。

為了了解雙邊函式bilateralfilter()的使用方法,在**清單5-21中給出了利用雙邊濾波函式bilateralfilter()對含有人臉的影象進行濾波的示例程式,濾波結果在圖5-25、圖5-26給出。通過結果可以知道,濾波器的直徑對於濾波效果具有重要的影響,濾波器直徑越大,濾波效果越明顯;同時當濾波器半徑相同時,標準差值越大,濾波效果越明顯。另外通過結果也可以看出雙邊濾波確實能對人臉起到美顏的效果。

#include

#include

using namespace cv;

using namespace std;

intmain()

mat result1, result2, result3, result4;

//驗證不同濾波器直徑的濾波效果

bilateralfilter

(img1, result1,9,

50,25/

2);bilateralfilter

(img1, result2,25,

50,25/

2);//驗證不同標準差值的濾波效果

bilateralfilter

(img2, result3,9,

9,9)

;bilateralfilter

(img2, result4,9,

200,

200)

;//顯示原圖

imshow

("img1"

, img1)

;imshow

("img2"

, img2)

;//不同直徑濾波結果

imshow

("result1"

, result1)

;imshow

("result2"

, result2)

;//不同標準差值濾波結果

C 版本OpenCv教程 十 顏色模型與轉換

前面對於rgb顏色模型已經有所介紹,該模型的命名方式是採用三種顏色的英文首字母組成,分別是紅色 red 綠色 green 和藍色 blue 雖然該顏色模型的命名方式是紅色在前,但是在opencv中卻是相反的順序,第乙個通道時藍色 b 分量,第二個通道時綠色 g 分量,第三個通道時紅色 r 分量。根據...

C 版本OpenCv教程 二十九 方框濾波

方框濾波是均值濾波的一般形式,在均值濾波中,將濾波器中所有的畫素值求和後的平均值作為濾波後結果,方框濾波也是求濾波器內所有畫素值的之和,但是方框濾波可以選擇不進行歸一化,就是將所有畫素值的和作為濾波結果,而不是所有畫素值的平均值。opencv 4中提供了boxfilter 函式實現方框濾波,該函式的...

OpenCV學習記錄(C 版本)

影象的載入 imread 函式 mat imread const string filename,int flag 1 其中flag 1代表讀入rgb彩色影象,1表示讀取原始影象,0表示讀取灰度圖 todo 影象的顯示 imshow 函式 改變視窗大小 imshow時改變視窗大小,screensho...