目錄
- 高斯模糊GaussianBlur()中參數(shù)詳解
1.1. 由參數(shù)解釋產(chǎn)生的問題 - 深入理解前的準(zhǔn)備:高斯函數(shù)、圖像濾波處理及卷積核
- 解釋1.1的問題
- 權(quán)重矩陣、高斯模糊的流程
摘要
- 高斯濾波是一種線性平滑濾波
- 高斯濾波是對(duì)整幅圖像進(jìn)行加權(quán)平均的過程,每一個(gè)像素點(diǎn)的值都由其本身和鄰域內(nèi)的其他像素值經(jīng)過加權(quán)平均后得到。高斯濾波的具體操作是:用一個(gè)模板(或稱卷積、掩模)掃描圖像中的每一個(gè)像素,用模板確定的鄰域內(nèi)像素的加權(quán)平均灰度值去替代模板中心像素點(diǎn)的值。
- 基于二維高斯函數(shù),構(gòu)建權(quán)重矩陣,進(jìn)而構(gòu)建高斯核,最終對(duì)每個(gè)像素點(diǎn)進(jìn)行濾波處理(平滑、去噪)
1.高斯模糊GaussianBlur()中參數(shù)詳解
1)原型:
- cv2.GaussianBlur( SRC,ksize,sigmaX [,DST [,sigmaY [,borderType ] ] ] ) →DST
2)參數(shù):
- src –輸入圖像;圖像可以具有任何數(shù)量的信道,其獨(dú)立地處理的,但深度應(yīng)CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
- dst –輸出與圖像大小和類型相同的圖像src。
- ksize –高斯核大小。 ksize.width 并且 ksize.height 可以有所不同,但它們都必須是正數(shù)和奇數(shù)?;蛘撸鼈兛梢詾榱?,然后從計(jì)算 sigma*。
- sigmaX – X方向上的高斯核標(biāo)準(zhǔn)偏差。
-
sigmaY – Y方向上的高斯核標(biāo)準(zhǔn)差;如果 sigmaY 為零,則將其設(shè)置為等于 sigmaX;如果兩個(gè)西格瑪均為零,則分別根據(jù)ksize.width 和 進(jìn)行計(jì)算 ksize.height(getGaussianKernel()有關(guān)詳細(xì)信息,請(qǐng)參見 link);完全控制的結(jié)果,無論這一切的語義未來可能的修改,建議指定所有的ksize,sigmaX和sigmaY。
borderType –像素外推方法。
1.1.由參數(shù)解釋產(chǎn)生的問題
??? 不知道你初次看到這些參數(shù)是否很迷惑,是否能迅速理解其代表的含義和作用,反正我是迷的很,在我們對(duì)GaussianBlur()進(jìn)行簡(jiǎn)單使用時(shí),很多時(shí)候我們并不理解我們所設(shè)置的參數(shù)的內(nèi)涵及其背后的處理是怎么樣的,在我的學(xué)習(xí)過程中,我提出了如下的幾個(gè)問題:
- 高斯核是什么?ksize作用是什么或者說起到什么效果?
- 為什么存在對(duì)兩個(gè)標(biāo)準(zhǔn)差的設(shè)置?二維高斯函數(shù)不也只有一個(gè)標(biāo)準(zhǔn)差嗎?
- 高斯模糊的具體實(shí)現(xiàn)流程
這些問題先放一下,先來看一下必要的準(zhǔn)備知識(shí)
2.高斯函數(shù)、卷積核
首先來看高斯分布(即正態(tài)分布):
正態(tài)分布:
X ~ :隨機(jī)變量X的取值x_i和其對(duì)應(yīng)的概率值P(X = x_i) 滿足正態(tài)分布(高斯函數(shù))
2.1 一維高斯分布
概率密度函數(shù)(高斯函數(shù)):
2.2二維高斯分布
概率密度函數(shù):這里的u、v對(duì)應(yīng)圖像坐標(biāo)系下像素點(diǎn)的坐標(biāo)
可視化圖片為:該圖來源于link
2.3線性濾波處理及卷積核
線性濾波與卷積的基本概念
??? ??? 線性濾波可以說是圖像處理最基本的方法,它可以允許我們對(duì)圖像進(jìn)行處理,產(chǎn)生很多不同的效果。做法很簡(jiǎn)單。首先,我們有一個(gè)二維的濾波器矩陣(有個(gè)高大上的名字叫卷積核)和一個(gè)要處理的二維圖像。然后,對(duì)于圖像的每一個(gè)像素點(diǎn),計(jì)算它的鄰域像素和濾波器矩陣的對(duì)應(yīng)元素的乘積,然后加起來,作為該像素位置的值。這樣就完成了濾波過程。
關(guān)于卷積核的具體處理實(shí)例可在這里查看,便于理解:link
貼一張那篇文章中的實(shí)例圖:
3.解釋1.1的問題
3.1高斯核是什么?ksize作用是什么或者說起到什么效果?
- 高斯核可看作卷積核,同樣為二維濾波器矩陣,不同的是高斯核在普通卷積核的基礎(chǔ)上進(jìn)行了加權(quán)處理(后面會(huì)講的權(quán)重矩陣)
- ksize即規(guī)定這個(gè)二維濾波器矩陣的形狀
3.2為什么存在對(duì)兩個(gè)標(biāo)準(zhǔn)差的設(shè)置?二維高斯函數(shù)不也只有一個(gè)標(biāo)準(zhǔn)差嗎?
??? ??? 由cv2.GaussianBlur()原型我們知道,存在兩個(gè)標(biāo)準(zhǔn)差sigmaX和sigmaY的設(shè)置,部分博客中會(huì)提到這兩個(gè)sigma分別是對(duì)X,Y方向(也可說u、v方向,都是針對(duì)圖像坐標(biāo)系)的標(biāo)準(zhǔn)差,但基本均未給出其處理邏輯、過程,讓人很是迷惑。
關(guān)于參數(shù)的問題,當(dāng)然要看官方文檔/源代碼
首先,cv2.GaussianBlur中調(diào)用了getGaussianKernel()接口
那么來看getGaussianKernel:
??? ??? 這個(gè)函數(shù)可以根據(jù)ksize和sigma求出對(duì)應(yīng)的高斯核,而返回值是一個(gè)一維高斯核。
??? ??? 其中需要注意的是,如果sigma為非正數(shù)(負(fù)數(shù)或0)的話,就會(huì)根據(jù)ksize來自動(dòng)計(jì)算sigma,計(jì)算公式為sigma = 0.3*((ksize-1)*0.5-1)+0.8
??? ??? 在官方解釋中,我們可以看到:兩個(gè)這樣產(chǎn)生的一維高斯核可以傳遞給sepFilter2D函數(shù)
那我們來看看這個(gè)函數(shù)是怎么處理這倆個(gè)一維高斯核的:
??? ??? cv2.sepFilter2D函數(shù)傳入兩個(gè)一維kernel,然后對(duì)圖像的每一行以kernelX為卷積核做卷積,對(duì)結(jié)果的每一列以kernelY為卷積核做卷積,最后歸一化得到新的高斯濾波后的圖像。
對(duì)
這
個(gè)
問
題
我
們
得
出
結(jié)
論
:
\color{#FF3030}{對(duì)這個(gè)問題我們得出結(jié)論:}
對(duì)這個(gè)問題我們得出結(jié)論:opencv實(shí)現(xiàn)的高斯濾波,是對(duì)傳入的sigmaX,
sigmaY分別產(chǎn)生兩個(gè)一維卷積核,然后分別再行和列上做卷積,其中sigmaX和sigmaY如果沒有傳入?yún)?shù),則由ksize計(jì)算得到。
4.權(quán)重矩陣、高斯模糊的過程
??? ??? 高斯模糊或者說高斯濾波(高斯核)對(duì)圖像進(jìn)行濾波處理的一大特點(diǎn)就是對(duì)中心點(diǎn)鄰域像素值進(jìn)行‘加權(quán)平均’后將值賦予中心像素點(diǎn),這里便用到了權(quán)重矩陣,該矩陣就是基于二維高斯函數(shù)(概率密度函數(shù))得到的。
偷懶一下,這部分基本未更改,來自link
權(quán)重矩陣:
假設(shè)高斯核(3*3),即對(duì)中心點(diǎn)領(lǐng)域內(nèi)8個(gè)點(diǎn)進(jìn)行加權(quán)平均,那么原始矩陣如下:
假定在此矩陣中的中心點(diǎn)的坐標(biāo)是(0,0),那么距離它最近的8個(gè)點(diǎn)的坐標(biāo)如上圖所示。
為了計(jì)算權(quán)重矩陣,需要自己設(shè)定σ模糊半徑(指的就是你中心點(diǎn)與周圍像素的距離取值后所確定的值)。我們來定σ=1.5,則模糊半徑為1.5的權(quán)重矩陣如下:
為了完成權(quán)重矩陣的歸一化,我們還需要對(duì)上面的各值進(jìn)行除于他們的總值的計(jì)算,目的是讓最終的圖像通道的權(quán)重總值為1,不然使用總值大于1的卷積濾鏡會(huì)讓圖像偏亮,小于1的卷積濾鏡會(huì)讓圖像偏暗。這九個(gè)權(quán)重值的總和等于0.4787147,所以我們直接進(jìn)行除法運(yùn)算,得到以下的權(quán)重矩陣。
這個(gè)權(quán)重矩陣就是我們最終得到的高斯核??!即濾波器矩陣
假設(shè)我們有一個(gè)圖像矩陣也就是未經(jīng)過處理的圖像矩陣,他們的灰度值如下圖所示(如果是彩色RGB圖像則需要分別計(jì)算3個(gè)通道的色值):
高斯模糊后的灰度值矩陣,有效數(shù)據(jù)是中心點(diǎn)數(shù)值
對(duì)一個(gè)圖像的所有點(diǎn)都進(jìn)行如上過程,就能最終得到高斯模糊后的圖像。文章來源:http://www.zghlxwxcb.cn/news/detail-451616.html
參考文檔:
link1
link2
link3
link4
link5文章來源地址http://www.zghlxwxcb.cn/news/detail-451616.html
到了這里,關(guān)于CV2逐步學(xué)習(xí)-2:cv2.GaussianBlur()詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!