图像模糊
目錄
- 一 什么是圖像模糊
- 二 圖像模糊原理與實(shí)現(xiàn)
- 三 參考文獻(xiàn)
注:原創(chuàng)不易,轉(zhuǎn)載請(qǐng)務(wù)必注明原作者和出處,感謝支持!
一 什么是圖像模糊
圖像模糊是圖像處理中最簡(jiǎn)單和常用的操作之一,其主要目的之一是給圖像預(yù)處理的時(shí)候降低圖像噪聲。比如,在大目標(biāo)提取之前去除圖像中的一些瑣碎細(xì)節(jié)。圖像的模糊通常依靠圖像的卷積操作來實(shí)現(xiàn)。圖像模糊又被稱為平滑濾波。
常見的圖像模糊方法可以總結(jié)如下:
(1) 歸一化均值濾波器(API為blur())
(2) 高斯濾波器(API為GaussianBlur())
(3) 中值濾波器(API為medianBlur())
(4) 雙邊濾波器(API為bilateralFilter())
二 圖像模糊原理與實(shí)現(xiàn)
歸一化均值濾波
歸一化均值濾波是最簡(jiǎn)單的濾波器,輸出像素值是對(duì)應(yīng)核窗口內(nèi)像素的均值(所有像素加權(quán)系數(shù)相等,當(dāng)然也可以是不相等的)。該濾波器的核如下所示:
\[ K=\frac{1}{K_{width} \cdot K_{height}} \begin{bmatrix} 1&1&1&...&1\\ 1&1&1&...&1\\ .&.&.&...&1\\ .&.&.&...&1\\ 1&1&1&...&1\\ \end{bmatrix} \]
OpenCV提供了歸一化均值濾波器API為blur()
void cv::blur(InputArray src, // 原圖像OutputArray dst, // 濾波后圖像Size ksize, // 濾波器大小Point anchor = Point(-1, -1), // 錨點(diǎn)位置,默認(rèn)為卷積核的中心int borderType = BORDER_DEFAULT );下面是原圖和濾波器大小分別為3x3、7x7和11x11時(shí)的濾波效果
高斯濾波
二維高斯函數(shù)的公式為:
\[ G(x,y) = Ae^{\frac{-(x-u_x)^2}{2\sigma_x^2} + \frac{-(y-u_y)^2}{2\sigma_y^2}} \]
和一維高斯函數(shù)一樣,中間像素\((x,y)\)的值是最大的,周邊像素的加權(quán)系數(shù)隨著它們遠(yuǎn)離中間像素的距離增大而減小。
OpenCV中的高斯濾波器API的詳細(xì)信息如下:
void cv::GaussianBlur(InputArray src, // 輸入圖像OutputArray dst, // 輸出圖像Size ksize, // 濾波器大小double sigmaX, // 對(duì)應(yīng)公式中的sigma Xdouble sigmaY = 0, // 對(duì)應(yīng)公式中的sigma Yint borderType = BORDER_DEFAULT );下面是原圖和濾波器大小分別為3x3、7x7和11x11時(shí)的濾波效果(其中sigmaX和sigmaY均為5)
中值濾波
中值濾波原理比較簡(jiǎn)單,其是將圖像中的每個(gè)像素用領(lǐng)域像素中的中值來代替。中值濾波對(duì)椒鹽噪聲有很好的抑制作用。OpenCV中提供了APImedianBlur()來完成中值濾波。
下面是使用中值濾波去除椒鹽噪聲的實(shí)驗(yàn)效果的原圖和濾波器大小分別為3、5、7時(shí)的實(shí)際濾波效果
雙邊濾波
雙邊濾波的原理。和加權(quán)均值濾波器的原理一樣,雙邊濾波的輸出像素值同樣是依賴領(lǐng)域像素的加權(quán)組合。
\[ g(i,j) = \frac{\sum_{k,l}f(k,l)w(i,j,k,l)}{\sum_{k,l}w(i,j,k,l)} \]
區(qū)別在于,權(quán)重系數(shù)\(w(i,j,k,l)\)的選取。在雙邊濾波中,\(w(i,j,k,l)\)被設(shè)置為定義域核
\[ d(i,j,k,l)=exp(- \frac{(i-k)^2+(j-l)^2}{2 \sigma_d^2}) \]
注意,該式子相當(dāng)于是二維正態(tài)分布公式的簡(jiǎn)化版。
和依賴于數(shù)據(jù)的值域核
\[ r(i,j,k,l) = exp(- \frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2}) \]
的乘積,也即
\[ w(i,j,k,l)=exp(- \frac{(i-k)^2+(j-l)^2}{2 \sigma_d^2} - \frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2}) \]
定量分析:
當(dāng)像素差異大時(shí)(邊緣處),\(r(i,j,k,l) \rightarrow 0\),此時(shí),高斯濾波效果將大大減弱。
當(dāng)像素差異小時(shí)(非邊緣處),\(r(i,j,k,l) \rightarrow 1\),此時(shí),高斯濾波效果幾乎不變。
因此,雙邊濾波具有較好的保邊效果。
OpenCV中提供了APIbilateralFilter()來完成雙邊濾波操作。
bilateralFilter(InputArray src, // 輸入圖像OutputArray dst, // 輸出圖像int d, // 濾波過程中每個(gè)像素領(lǐng)域的直徑double sigmaColor, // 顏色空間的sigma值double sigmaSpace, // 坐標(biāo)空間的sigma值int borderType = BORDER_DEFAULT );下面的實(shí)驗(yàn)中,像素直徑d設(shè)為9,sigmaColor和sigmaSpace分別設(shè)為(50, 50)、(150, 150)、(200, 200)
請(qǐng)注意在實(shí)現(xiàn)效果圖中圖像邊緣的保持情況
三 參考文獻(xiàn)
(1) 《計(jì)算機(jī)視覺——算法與應(yīng)用》
(2) 《數(shù)字圖像處理(第三版)》
(3) OpenCV Documentation
轉(zhuǎn)載于:https://www.cnblogs.com/laizhenghong2012/p/11278888.html
總結(jié)
- 上一篇: [TCP/IP] HTTPS的工作原理
- 下一篇: B监狱 noip 模拟 7.29(区间