》》點贊,收藏+關(guān)注,理財&技術(shù)不迷路《《
此章節(jié)是樓主碼字最多的,也是我個人認(rèn)為最為重要和基礎(chǔ)的一個章節(jié),我對原理,數(shù)學(xué)公式以及API解釋都進行了詳細(xì)描述,希望能堅持看完!希望對你們有所幫助??!
目錄:


濾波(blur)操作是一種基于鄰域的圖像平滑方法。
7.0 噪聲和降噪
圖像噪聲 —— pattern noise
圖像噪聲是指存在于圖像數(shù)據(jù)中的不必要的或多余的干擾信息。噪聲的存在嚴(yán)重影響了遙感圖像的質(zhì)量,因此在圖像增強處理和分類處理之前,必須予以糾正。 圖像中各種妨礙人們對其信息接受的因素即可稱為圖像噪聲 。噪聲在理論上可以定義為“不可預(yù)測,只能用概率統(tǒng)計方法來認(rèn)識的隨機誤差”。因此將圖像噪聲看成是多維隨機過程是合適的,因而描述噪聲的方法完全可以借用隨機過程的描述,即用其概率分布函數(shù)和概率密度分布函數(shù)。
噪聲在圖像上常表現(xiàn)為一引起較強視覺效果的孤立像素點或像素塊。一般,噪聲信號與要研究的對象不相關(guān),它以無用的信息形式出現(xiàn),擾亂圖像的可觀測信息。通俗的說就是噪聲讓圖像不清楚。
噪聲的來源:
(1)圖像獲取過程中
兩種常用類型的圖像傳感器CCD和CMOS采集圖像過程中,由于受傳感器材料屬性、工作環(huán)境、電子元器件和電路結(jié)構(gòu)等影響,會引入各種噪聲,如電阻引起的熱噪聲、場效應(yīng)管的溝道熱噪聲、光子噪聲、暗電流噪聲、光響應(yīng)非均勻性噪聲。
(2)圖像信號傳輸過程中
由于傳輸介質(zhì)和記錄設(shè)備等的不完善,數(shù)字圖像在其傳輸記錄過程中往往會受到多種噪聲的污染。另外,在圖像處理的某些環(huán)節(jié)當(dāng)輸入的對象并不如預(yù)想時也會在結(jié)果圖像中引入噪聲。
7.0.1 圖像處理 —— 濾波
過濾 :是信號和圖像處理中基本的任務(wù)。其目的是根據(jù)應(yīng)用環(huán)境的不同,選擇性的提取圖像中某些認(rèn)為是重要的信息。過濾可以移除圖像中的噪音、提取感興趣的可視特征、允許圖像重采樣等等。
頻域分析 :將圖像分成從低頻到高頻的不同部分。低頻對應(yīng)圖像強度變化小的區(qū)域,而高頻是圖像強度變化非常大的區(qū)域。
在頻率分析領(lǐng)域的框架中,濾波器是一個用來增強圖像中某個波段或頻率并阻塞(或降低)其他頻率波段的操作。低通濾波器是消除圖像中高頻部分,但保留低頻部分。高通濾波器消除低頻部分。
濾波(高通、低通、帶通、帶阻) 、模糊、去噪、平滑等。

7.0.2 常見噪聲的分類
先上一個結(jié)論,常見噪聲總結(jié):


噪聲按照不同的分類標(biāo)準(zhǔn)可以有不同的分類形式:
基于產(chǎn)生原因:
內(nèi)部噪聲:
一般又可分為以下四種:
(1)由光和電的基本性質(zhì)所引起的噪聲。如電流的產(chǎn)生是由電子或空穴粒子的集合,定向運動所形成。因這些粒子運動的隨機性而形成的散粒噪聲;導(dǎo)體中自由電子的無規(guī)則熱運動所形成的熱噪聲;根據(jù)光的粒子性,圖像是由光量子所傳輸,而光量子密度隨時間和空間變化所形成的光量子噪聲等。
(2)電器的機械運動產(chǎn)生的噪聲。如各種接頭因抖動引起電流變化所產(chǎn)生的噪聲;磁頭、磁帶等抖動或一起的抖動等。
(3)器材材料本身引起的噪聲。如正片和負(fù)片的表面顆粒性和磁帶磁盤表面缺陷所產(chǎn)生的噪聲。隨著材料科學(xué)的發(fā)展,這些噪聲有望不斷減少,但還是不可避免的。
(4)系統(tǒng)內(nèi)部設(shè)備電路所引起的噪聲。如電源引入的交流噪聲;偏轉(zhuǎn)系統(tǒng)和箝位電路所引起的噪聲等。
外部噪聲:系統(tǒng)外部干擾以電磁波或經(jīng)電源串進系統(tǒng)內(nèi)部而引起的噪聲。如電氣設(shè)備,天體放電現(xiàn)象等引起的噪聲。
根據(jù) 圖像(信號)與噪聲 之間的關(guān)系 來分類:
(1)加性噪聲
??? 噪聲和原始圖像不相關(guān),可以表示為:

其中f(x,y)代表被污染的圖像(噪聲圖像),g(x,y)代表原始圖像,n(x,y)代表噪聲。圖像中的加性噪聲一般是在圖像的傳輸過程中由“信道噪聲”和CCD攝像機對圖像數(shù)字化的過程中產(chǎn)生的。
(2)乘性噪聲
??????????噪聲和原始圖像相關(guān),可以表示為:

圖像中的乘性噪聲一般是由膠片中的顆粒、飛點掃描圖像中的噪聲、電視掃描光柵等原因造成的。
(3)量化噪聲
??????????圖像中的量化噪聲是圖像在量化過程中圖像從模擬到數(shù)字所產(chǎn)生的差異,是圖像量化過程中的誤差。
根據(jù)基于 統(tǒng)計后的概率密度函數(shù):是比較重要的,主要因為引入數(shù)學(xué)模型,這就有助于運用數(shù)學(xué)手段去除噪聲。在不同場景下噪聲的施加方式都不同,由于在外界的某種條件下,噪聲下圖像-原圖像(沒有噪聲時)的概率密度函數(shù)(統(tǒng)計結(jié)果)服從某種分布函數(shù),那么就把它歸類為相應(yīng)的噪聲。下面將具體說明基于統(tǒng)計后的概率密度函數(shù)的噪聲分類及其消除方式。
圖像常見噪聲基本上有以下四種,高斯噪聲,泊松噪聲,乘性噪聲,椒鹽噪聲。
7.0.2.1 Gaussian Noise
高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲。如果一個噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不相關(guān),一階矩為常數(shù),是指先后信號在時間上的相關(guān)性。
產(chǎn)生原因:
1)圖像傳感器在拍攝時視場不夠明亮、亮度不夠均勻;
2)電路各元器件自身噪聲和相互影響;
3)圖像傳感器長期工作,溫度過高。
高斯函數(shù):

其中灰度值用x表示,灰度值的期望值用μ表示,灰度值的標(biāo)準(zhǔn)差用σ表示。高斯噪聲的概率密度函數(shù)如下圖所示:

首先下面是原圖:

統(tǒng)計直方圖:

可以看到,噪聲的直方圖中圖形像高斯正態(tài)函數(shù)的分布。
說明:噪聲對原圖像的影響是隨機的,直方圖呈現(xiàn)的分布形式是基于統(tǒng)計的結(jié)果。直方圖表示了(歸一化后)灰度值的概率密度分布,因此可以使用直方圖來表示灰度值的概率密度。


7.0.2.2 脈沖(椒鹽)噪聲
椒鹽噪聲也稱為脈沖噪聲,是圖像中經(jīng)常見到的一種噪聲,它是一種隨機出現(xiàn)的白點或者黑點,可能是亮的區(qū)域有黑色像素或是在暗的區(qū)域有白色像素(或是兩者皆有)。鹽和胡椒噪聲的成因可能是影像訊號受到突如其來的強烈干擾而產(chǎn)生、類比數(shù)位轉(zhuǎn)換器或位元傳輸錯誤等。例如失效的感應(yīng)器導(dǎo)致像素值為最小值,飽和的感應(yīng)器導(dǎo)致像素值為最大值。

脈沖(椒鹽)噪聲的消除方式
一般使用非線性濾波器處理椒鹽噪聲:
異常值偵測異常偵測(Anomaly detection)有時稱為異常值偵測(Outlier detection),如其名所隱含的,在給定的資料集合中,它將偵測在已有的規(guī)律中表現(xiàn)異常者?,F(xiàn)今常用的方法以計算距離為基礎(chǔ)的K-近鄰算法或是機器學(xué)習(xí)中的支持向量機等。
中值濾波器中值濾波器(Median filtering) 如其名所隱含的,它將一個像素的值用該像素鄰域中強度值的中間值來取代(計算中間值的過程中,也會將該像素的原始值包含),中值濾波器在處理鹽和胡椒噪聲上能提供絕佳的噪聲降低效能。
偽中值濾波器為了改進中值濾波器的計算速率,偽中值濾波器(Pseudo-median filtering) 以近似的方法算出中間值。
7.0.2.3 泊松噪聲
泊松噪聲,就是符合泊松分布的噪聲模型,泊松分布適合于描述單位時間內(nèi)隨機事件發(fā)生的次數(shù)的概率分布。如某一服務(wù)設(shè)施在一定時間內(nèi)受到的服務(wù)請求的次數(shù),電話交換機接到呼叫的次數(shù)、汽車站臺的候客人數(shù)、機器出現(xiàn)的故障數(shù)、自然災(zāi)害發(fā)生的次數(shù)、DNA序列的變異數(shù)、放射性原子核的衰變數(shù)等等

7.0.2.4 乘性噪聲
乘性噪聲一般由信道不理想引起,它們與信號的關(guān)系是相乘,信號在它在,信號不在他也就不在。

7.1 原理
7.1.1 卷積神經(jīng)網(wǎng)絡(luò)
卷積的作用:
消除噪聲
銳化
7.1.1.1 卷積背景及原理
卷積是泛函分析中的一種數(shù)學(xué)算子。通過兩個函數(shù) f? 和 g 來生成第三個函數(shù)的運算。
f(t’) 和 g(t - t’) 實際就是兩個函數(shù),g(-t’) 實際就是與 g(t’) 關(guān)于 y 軸對稱 ,g(-t’ + x)就是將g(t’) 關(guān)于y軸對稱后 然后繼續(xù)平移??闯?g[- (t’ - x) ] 左加右減。往右平移了x個單位。然后和 f(t’) 相乘再定積分,定積分范圍是 負(fù)無窮到正無窮,然后累加。注意它是對 t’ 進行積分,而不是對我們的x進行積分,就是我們下面畫圖中的橫軸就是 t’。


所以卷積的作用:把一個函數(shù)先對折,再按照 x 個單位去逐漸的平移,平移完后再相乘做定積分。
卷積操作歷史上來發(fā)展于信號處理領(lǐng)域,在信號處理中原始信號通常會被混入噪音,假設(shè)傳感器在每個時刻t? 會輸出一個信號 f(t),這個信號通?;烊肓艘恍┰肼?,我們可以通過過個測量點進行加權(quán)平均來抵消掉噪聲,并且離當(dāng)前時間點t? 越近的測量點權(quán)重應(yīng)該越高,我們可以用下面的公式表示

上式中 g是一個權(quán)重函數(shù),參數(shù)是時間點 t’ 距離當(dāng)前時間 t 的距離,輸出 t' 時間點測量的權(quán)重; f 是信號測量函數(shù)。?在這個例子中, t’? 的采樣是離散的,因此采用了加和的形式,同時g? 還應(yīng)該是一個概率密度函數(shù),因為在這個例子中表示了一種權(quán)重。下圖就是這個例子的可視化,灰色是f(t)? ,紅色的部分就是經(jīng)過翻轉(zhuǎn)的g? ,綠色部分是生成的 h。

卷和:針對離散型變量

通常將函數(shù)? f 稱為輸入(input),函數(shù)? g? 稱為卷積核(kernel),函數(shù)? h? 稱為特征圖譜(feature map)
多維度:

藍色部分對應(yīng)的是輸入的圖像,紅色部分是卷積核convolutional kernel,卷積運算:通過滑動窗口進行矩陣相稱得到綠色部分。
卷積核有不同類型。有保持原圖,銳化的,模糊的,邊緣檢測的核等等。不同卷積核實不同功能。
7.1.1.2 卷積的特點(與全連接的區(qū)別與聯(lián)系)
卷積神經(jīng)網(wǎng)絡(luò)(Convotional Neural Network, CNN)是深度學(xué)習(xí)領(lǐng)域中重要的一個領(lǐng)域,可以說 CNN 近年在計算機視覺領(lǐng)域取得的成功直接推動了深度學(xué)習(xí)的復(fù)興。 CNN 是一種基于卷積操作的神經(jīng)網(wǎng)絡(luò),可以粗略地理解為 CNN 就是將全連接網(wǎng)絡(luò)中的矩陣相乘換成卷積操作(說粗略是因為通常 CNN 中還帶有 pooling 等 CNN 專有的操作)。那么卷積操作有什么區(qū)別于全連接的特點呢?
我們以一個例子來看卷積的具體:

t這樣處理實際上左邊的 kernel matrix 乘上右邊的 flatten input 向量后得到結(jié)果與上面的結(jié)果是等效的,即向量的卷積操作可以表示為上圖的一個核矩陣乘一個向量得到。有沒有覺得很眼熟?這種一個參數(shù)矩陣乘一個輸入向量得到一個輸出向量的形式與全連接是完全一致的。

因此卷積和全連接實質(zhì)上都是一組線性轉(zhuǎn)換,但是卷積相比全連接而言,其參數(shù)矩陣更加稀疏,kernel matrix 中很多為零(sparse connectivity),同時非零部分的參數(shù)實際上是共享的(parameter sharing)。這兩個特點讓卷積可以大大減少參數(shù)的數(shù)量,同時同一套參數(shù)(卷積核)在多個地方復(fù)用更有利于捕捉局部的特征。相比之下全連接的參數(shù)更多,每個參數(shù)只負(fù)責(zé)唯一的連接,計算量、內(nèi)存需求增大的同時也更加難以訓(xùn)練。
所以卷積的兩個優(yōu)點:
sparse connectivity(稀疏連接)
parameter sharing(非零參數(shù)共享,參數(shù)復(fù)用)
全連接:
參數(shù)多,每個參數(shù)只負(fù)責(zé)唯一連接,計算量和內(nèi)存需求大,難以訓(xùn)練。
更本質(zhì)來說,卷積相比全連接實際上是對參數(shù)矩陣做了一種先驗的限制(矩陣是稀疏的、同時參數(shù)復(fù)用),這種先驗是建立在在高維空間中相鄰的數(shù)據(jù)點存在一定的關(guān)系的基礎(chǔ)上,比如圖像中一個局部之間可能構(gòu)成一個形狀或者一個組件,因此卷積這種操作特別適合應(yīng)用于圖像數(shù)據(jù)。雖然加入這種先驗會讓模型損失一定的擬合能力,但是從最終效果上看帶來的收益是遠(yuǎn)遠(yuǎn)大于擬合能力的損失的。
7.1.1.3 卷積三種模式
深度學(xué)習(xí)框架中通常會實現(xiàn)三種不同的卷積模式,分別是 SAME、VALID、FULL。這三種模式的核心區(qū)別在于卷積核進行卷積操作的移動區(qū)域不同,進而導(dǎo)致輸出的尺寸不同。我們以一個例子來看這三種模式的區(qū)別,輸入圖片的尺寸是 5x5 ,卷積核尺寸是 3x3 ,stride 取 1。
FULL 模式:碰到就開始。
FULL 模式下卷積核從與輸入有一個點的相交的地方就開始卷積。如下圖所示,藍框的位置就是卷積核第一個卷積的地方,灰色部分是為了卷積能夠正常進行的 padding(一般填 0)。因此 FULL 模式下卷積核移動區(qū)域最大,卷積后輸出的尺寸也最大。

VALID 模式:一定要整個重疊才開始
VALID 模式與 FULL 模式相反,在整個卷積核與輸入重疊的地方才開始卷積操作,因此不需要 padding,輸出的尺寸也最小

SAME 模式:可以自加來padding,反正尺寸不變。
SAME 模式是最常用的一種模式,SAME 的意思是卷積后輸出的尺寸與輸入尺寸保持一致(假定 stride 為 1)。通過將卷積核的中心與輸入的第一個點進行對齊確定卷積核起始位置,然后補齊對應(yīng) padding 即可。如下圖所示,可以看到卷積輸出的尺寸與出入保持一致。

SAME 模式下當(dāng)卷積核邊長為偶數(shù)時,可以通過在其中一邊增加多一行(列)padding,即不對稱的 padding 實現(xiàn)輸出尺寸與輸入尺寸保持一致,如下圖所示(卷積核尺寸為 2x2 )

7.2 模糊操作

“模糊”,就是將圖像中每個像素值進行重置的過程,這個過程采用將每一個像素都設(shè)置成周邊像素的平均值。
2是中間點,周邊點都是1。假設(shè)周邊的點對中間點的影響都是相同的,即構(gòu)造的卷積算子如下:
可以看出中間的 2 被重置為了?!爸虚g點"取"周圍點"的平均值,變成10/9。在數(shù)值上,這是一種"平滑化”。在圖形上,就相當(dāng)于產(chǎn)生"模糊"效果,"中間點"失去細(xì)節(jié)。
顯然,計算平均值時,取值范圍越大,"模糊效果"越強烈。如下三幅圖,分別表示原圖,3X3和5X5的模糊效果圖。

模糊操作的原理就是:卷積。? 不同卷積核得到不同卷積效果。
均值:
dst = cv.blur(image,(x,y))
中值
dst = cv.medianBlur(image,A)
自定義模糊:
kernel = np.ones([5, 5], np.float32) / 25
dst = cv.filter2D(src,depth,kernel,dst,another,delta,borderType)

收尾不變。上面就是均值模糊:1*2+1*3+1*6=11 , 11*3=3.X 取整為1.
卷積核最好都為奇數(shù)
越卷積越平滑。
7.2.1 均值模糊(低通濾波)
均值模糊是用來去噪聲的。
void blur( InputArray src, OutputArray dst,
????????????????????????Size ksize, Point anchor = Point(-1,-1),
????????????????????????int borderType = BORDER_DEFAULT );
src是輸入圖像,dst為輸出圖像;ksize是濾波器模板窗口的大?。缓髢蓚€參數(shù)分別表示,待處理像素在模板窗口的位置,默認(rèn)值是窗口的中心位置,所以窗口的大小一般為奇數(shù),最后一個參數(shù)表示對編解類型的處理,使用默認(rèn)值即可。其調(diào)用示例blur(src,dst,Size(5,5),模板窗口的大小為5×5。
均值濾波是一種線性濾波器,處理思路也很簡單,就是將一個窗口區(qū)域中的像素計算平均值,然后將窗口中計算得到的均值設(shè)置為錨點上的像素值。
該算法有優(yōu)點在于效率高,思路簡單。同樣,缺點也很明顯,計算均值會將圖像中的邊緣信息以及特征信息“模糊”掉,會丟失很多特征。
均值濾波使用簡單的卷積方案來實現(xiàn),既然是計算窗口區(qū)域中的像素和,即使用如下卷積核即可。圖像的邊界部分采用padding操作處理。另外,得到的錨點像素值要進行歸一化,即除以窗口尺寸大小。在OpenCV中,我們使用cv.blur()這個函數(shù)即可實現(xiàn)。
這樣的結(jié)果就是降低圖像中的“尖銳”變化。這就造成,均值濾波器可以降低噪聲的同時,也會模糊圖像的邊緣。均值濾波器的處理結(jié)果是過濾掉圖像中的“不相關(guān)”細(xì)節(jié),其中“不相關(guān)”細(xì)節(jié)指的是:與濾波器模板尺寸相比較小的像素區(qū)域。

在y,豎直方向進行了模糊。
我們可以嘗試在 x 方向,橫向進行模糊:


上面兩個都是一維卷積核進行模糊,截下來我們嘗試 5*5 卷積核進行模糊,5*5也是最常用的:

7.2.2 中值模糊(中值濾波)
用于處理椒鹽噪聲
void medianBlur( InputArray src, OutputArray dst, int ksize );

○src:源圖像Mat對象
○dst:目標(biāo)圖像Mat對象
○ksize:濾波模板的尺寸大小,必須是大于1的奇數(shù),如:3,5,7...
中值濾波是一種非線性濾波,在處理脈沖噪聲以及椒鹽噪聲時效果極佳,能夠有效的保護好圖像的邊緣信息。中值濾波的處理思路很簡單,取卷積核當(dāng)中所覆蓋像素中的中值作為錨點的像素值即可。
如果按照遍歷所有像素,再對卷積核中的像素排序取中值,那么時間復(fù)雜度會很高,需要對中值濾波進行改進。
中值濾波器的想法很簡單,如果一個信號是平緩變化的,那么某一點的輸出值可以用這點的某個大小的鄰域內(nèi)的所有值的統(tǒng)計中值來代替。這個鄰域在信號處理領(lǐng)域稱之為窗(window)。窗開的越大,輸出的結(jié)果就越平滑,但也可能會把我們有用的信號特征給抹掉。所以窗的大小要根據(jù)實際的信號和噪聲特性來確定。
如:以3*3的領(lǐng)域為例求中值濾波中像素5的值

1)int pixel[9]中存儲像素1,像素2...像素9的值;
2)對數(shù)組pixel[9]進行排序操作;
3)像素5的值即為數(shù)組pixel[9]的中值pixel[4]。

左圖圖像中有很多黑點,黑點都是噪聲,是椒鹽噪聲。食鹽是白色的,胡椒粉是黑色的,椒鹽是黑白的。所以說中值模糊對椒鹽噪聲有很好的處理能力。

均值模糊對隨機噪聲有很好的處理能力,但是我們用均值模糊來處理同樣的圖的話,會發(fā)現(xiàn)均值模糊還是不能很好的將椒鹽噪聲處理干凈。
7.2.3 自定義模糊
自定義算子還是有幾個要求:
?1. 必須是奇數(shù)
2. 總和為0(做邊緣梯度)或者 1(在做增強等工作)
CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst,?
int ddepth,InputArray kernel,?
Point anchor=Point(-1,-1),
double delta=0, int borderType=BORDER_DEFAULT );
InputArray src: 輸入圖像
OutputArray dst: 輸出圖像,和輸入圖像具有相同的尺寸和通道數(shù)量
int ddepth: 目標(biāo)圖像深度,如果沒寫將生成與原圖像深度相同的圖像。原圖像和目標(biāo)圖像支持的圖像深度如下:
src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F
src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F
src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F
src.depth() = CV_64F, ddepth = -1/CV_64F
當(dāng)ddepth輸入值為-1時,目標(biāo)圖像和原圖像深度保持一致。
InputArray kernel: 卷積核(或者是相關(guān)核),一個單通道浮點型矩陣。如果想在圖像不同的通道使用不同的kernel,可以先使用split()函數(shù)將圖像通道事先分開。
Point anchor: 內(nèi)核的基準(zhǔn)點(anchor),其默認(rèn)值為(-1,-1)說明位于kernel的中心位置?;鶞?zhǔn)點即kernel中與進行處理的像素點重合的點。
double delta: 在儲存目標(biāo)圖像前可選的添加到像素的值,默認(rèn)值為0
int borderType: 像素向外逼近的方法,默認(rèn)值是BORDER_DEFAULT,即對全部邊界進行計算。
該函數(shù)使用于任意線性濾波器的圖像,支持就地操作。當(dāng)其中心移動到圖像外,函數(shù)可以根據(jù)指


很明顯和我們之前調(diào)用的opencv中均值模糊的API效果其實是一樣的:


拉普拉斯算子—— 銳化
讓圖像的輪廓,細(xì)節(jié)更加突出,更加清晰。

7.3 高斯模糊Gaussian Blur
高斯模糊對于 去噪? 效果好。
高斯模糊的原理和參數(shù):
GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst

src參數(shù)表示待處理的輸入圖像。
ksize參數(shù)表示高斯濾波器模板大小。 ksize.width和ksize.height可以不同,但它們都必須是正數(shù)和奇數(shù)?;蛘?,它們可以是零,即(0, 0),然后從σ計算出來。
sigmaX參數(shù)表示 X方向上的高斯內(nèi)核標(biāo)準(zhǔn)差。
sigmaY參數(shù)表示 Y方向上的高斯內(nèi)核標(biāo)準(zhǔn)差。 如果sigmaY為零,則設(shè)置為等于sigmaX,如
果兩個sigma均為零,則分別從ksize.width和ksize.height計算得到。
補:若ksize不為(0, 0),則按照ksize計算,后面的sigmaX沒有意義。若ksize為(0, 0),則根據(jù)后面的sigmaX計算ksize
int borderType=BORDER_DEFAULT: 推斷圖像外部像素的某種便捷模式,有默認(rèn)值BORDER_DEFAULT,如果沒有特殊需要不用更改。

可知:
這個函數(shù)可以根據(jù)ksize和sigma求出對應(yīng)的高斯核,計算方式就是上文提到的計算方式,而返回值是一個一維高斯核。
其中需要注意的是,如果sigma為非正數(shù)(負(fù)數(shù)或0)的話,就會根據(jù)ksize來自動計算sigma,計算公式為sigma = 0.3*((ksize-1)*0.5-1)+0.8
由上述公式可以計算得出,
當(dāng)ksize=3時,sigma=0.8
當(dāng)ksize=5時,sigma為1.1.
cv2.sepFilter2D函數(shù)傳入兩個一維kernel,然后對圖像的每一行以kernelX為卷積核做卷積,對結(jié)果的每一列以kernelY為卷積核做卷積,最后歸一化得到新的高斯濾波后的圖像。
綜上:opencv實現(xiàn)的高斯濾波,是對傳入的sigmaX,sigmaY分別產(chǎn)生兩個一維卷積核,然后分別再行和列上做卷積,其中sigmaX和sigmaY如果沒有傳入?yún)?shù),則由ksize計算得到。
高斯模糊/噪聲
輪廓還在,保留圖像的主要特征
高斯模糊比均值模糊去噪效果好
原理:是把要模糊的像素色值統(tǒng)計,用數(shù)學(xué)上加權(quán)平均的計算方法(高斯函數(shù))得到色值,對范圍、半徑等進行模糊。通俗的講,高斯濾波就是對整幅圖像進行加權(quán)平均的過程,每一個像素點的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過加權(quán)平均后得到。
應(yīng)用:一些美顏軟件、美顏相機上的磨皮和毛玻璃特效基本上都是用的高斯模糊,并且大部分圖像處理軟件中都有高斯模糊的操作,除此之外,高斯模糊還具有減少圖像層次和深度的功能
7.3.1 高斯原理
7.3.1.1 介紹
高斯模糊(英語:Gaussian Blur),也叫高斯平滑,通常用它來減少圖像噪聲以及降低細(xì)節(jié)層次。這種模糊技術(shù)生成的圖像,其視覺效果就像是經(jīng)過一個半透明屏幕在觀察圖像,這與鏡頭焦外成像效果散景以及普通照明陰影中的效果都明顯不同。高斯平滑也用于計算機視覺算法中的預(yù)先處理階段,以增強圖像在不同比例大小下的圖像效果(參見尺度空間表示以及尺度空間實現(xiàn))。
?從數(shù)學(xué)的角度來看,圖像的高斯模糊過程就是圖像與正態(tài)分布做卷積。由于正態(tài)分布又叫作高斯分布,所以這項技術(shù)就叫作高斯模糊。圖像與圓形方框模糊做卷積將會生成更加精確的焦外成像效果。由于高斯函數(shù)的傅立葉變換是另外一個高斯函數(shù),所以高斯模糊對于圖像來說就是一個低通濾波器。
“模糊”,就是將圖像中每個像素值進行重置的過程,這個過程采用將每一個像素都設(shè)置成周邊像素的平均值。
2是中間點,周邊點都是1。假設(shè)周邊的點對中間點的影響都是相同的,即構(gòu)造的卷積算子如下:

可以看出中間的 2 被重置為了10/9?!爸虚g點"取"周圍點"的平均值,變成10/9。在數(shù)值上,這是一種"平滑化”。在圖形上,就相當(dāng)于產(chǎn)生"模糊"效果,"中間點"失去細(xì)節(jié)。
顯然,計算平均值時,取值范圍越大,"模糊效果"越強烈。如下三幅圖,分別表示原圖,3X3和5X5的模糊效果圖。

接下來的問題就是,既然每個點都要取周邊像素的平均值,那么應(yīng)該如何分配權(quán)重呢?
如果使用簡單平均,顯然不是很合理,因為圖像都是連續(xù)的,越靠近的點關(guān)系越密切,越遠(yuǎn)離的點關(guān)系越疏遠(yuǎn)。因此,加權(quán)平均更合理,距離越近的點權(quán)重越大,距離越遠(yuǎn)的點權(quán)重越小。
7.3.1.2 ND的權(quán)重分布和sigma/ksize
正態(tài)分布顯然是一種可取的權(quán)重分配模式,可理解為加權(quán)平均。
在圖形上,正態(tài)分布是一種鐘形曲線,越接近中心,取值越大,越遠(yuǎn)離中心,取值越小。
計算平均值的時候,我們只需要將"中心點"作為原點,其他點按照其在正態(tài)曲線上的位置,分配權(quán)重,就可以得到一個加權(quán)平均值。

正態(tài)分布的密度函數(shù)叫做"高斯函數(shù)"(Gaussian function)。它的一維形式是:

其中,μ是x的均值,σ是x的方差。因為計算平均值的時候,中心點就是原點,所以μ等于0。通過上述兩個維度的高斯濾波器函數(shù)可以得到下圖的函數(shù)圖像。其中σ的大小決定了高斯函數(shù)的寬度, σ越大函數(shù)圖像跨幅越寬,反之則越窄。

上面的正態(tài)分布是一維的,圖像都是二維的,所以我們需要二維的正態(tài)分布。

有了這個函數(shù) ,就可以計算每個點的權(quán)重了。
權(quán)重矩陣:
假定中心點的坐標(biāo)是(0,0),那么距離它最近的8個點的坐標(biāo)如下:

更遠(yuǎn)的點以此類推。
為了計算權(quán)重矩陣,需要設(shè)定σ的值。假定σ=1.5(σ值越大圖像越平滑/模糊, gama越大第一部分越小,e越大),則模糊半徑為1的權(quán)重矩陣如下:
以(0,1)為例:x=0, y=1. G(x,y) = 1/(2pi1.5^2) * e^(-1/ 2*1.5^2) = 0.56640584...

這9個點的權(quán)重總和等于0.4787147,如果只計算這9個點的加權(quán)平均,還必須讓它們的權(quán)重之和等于1,因此上面9個值還要分別除以0.4787147,得到最終的權(quán)重矩陣

假定中心點坐標(biāo)為(0,0),當(dāng)設(shè)定卷積核為3時,只需計算距離它最近的8個點,如圖中的第一個矩陣所示。以此矩陣中的坐標(biāo),帶入到公式2-14中,并且取σ=1.5,則半徑為1的權(quán)重矩陣如圖中第二個矩陣所示。因為需要利用該權(quán)重矩陣做加權(quán)平均,故需要對原始的矩陣做歸一化。具體操作方式是求出第二個矩陣的總和為0.4783,然后再將該矩陣的9個值分別除以0.4783,得到最終的卷積核(權(quán)重矩陣)。
你不進行歸一化,該核乘以像素可能就會超過0-255范圍。(比如你核中值都大于一的話,很可能越界,所以做一個歸一化最好)

上述計算都只是得到了 高斯核?。。?如果要做進一步模糊就要用這個核來模糊。
通過上述步驟計算出高斯核,基于該高斯核便可進行高斯濾波操作。假設(shè)現(xiàn)有9個像素點,灰度值(0-255)如下圖中第一個卷積核所示,計算圖中中心點的濾波后的值。每個像素點乘以相對應(yīng)的權(quán)重值,得到最終的分布值。將這9個像素的值相加得到的結(jié)果,就是中心位置圖像濾波后的值。對所有點重復(fù)這個過程,就得到了高斯濾波后的圖像。如果原圖是彩色圖片,可以對RGB三個通道分別做高斯濾波。


??值的意義及選取
通過上述的實現(xiàn)過程,不難發(fā)現(xiàn),高斯濾波器模板的生成最重要的參數(shù)就是高斯分布的標(biāo)準(zhǔn)差??。標(biāo)準(zhǔn)差代表著數(shù)據(jù)的離散程度,如果??較小,那么生成的模板的中心系數(shù)較大,而周圍的系數(shù)較小,這樣對圖像的平滑效果就不是很明顯;反之,??較大,則生成的模板的各個系數(shù)相差就不是很大,比較類似均值模板,對圖像的平滑效果比較明顯。
來看下一維高斯分布的概率分布密度圖:

橫軸表示可能得取值x,豎軸表示概率分布密度F(x),那么不難理解這樣一個曲線與x軸圍成的圖形面積為1。??(標(biāo)準(zhǔn)差)決定了這個圖形的寬度,可以得出這樣的結(jié)論:??越大,則圖形越寬,尖峰越小,圖形較為平緩;
??越小,則圖形越窄,越集中,中間部分也就越尖,圖形變化比較劇烈。這其實很好理解,如果sigma也就是標(biāo)準(zhǔn)差越大,則表示該密度分布一定比較分散,由于面積為1,于是尖峰部分減小,寬度越寬(分布越分散);同理,當(dāng)??越小時,說明密度分布較為集中,于是尖峰越尖,寬度越窄!
于是可以得到如下結(jié)論:
??越大,分布越分散,各部分比重差別不大,于是生成的模板各元素值差別不大,類似于平均模板
??越小,分布越集中,中間部分所占比重遠(yuǎn)遠(yuǎn)高于其他部分,反映到高斯模板上就是中心元素值遠(yuǎn)遠(yuǎn)大于其他元素值,于是自然而然就相當(dāng)于中間值得點運算。
7.3.1.3 計算高斯模糊
有了權(quán)重矩陣,就可以計算高斯模糊的值了。假設(shè)現(xiàn)有9個像素點,灰度值(0-255)如下:

每個點乘以自己的權(quán)重值:
將這9個值加起來,就是中心點的高斯模糊的值。
對所有點重復(fù)這個過程,就得到了高斯模糊后的圖像。如果原圖是彩色圖片,可以對RGB三個通道分別做高斯模糊。
uniformed(高斯正態(tài))概率分布

其中 x 是圖像中的半徑。
上面也可以看成一維高斯,對應(yīng)三個值的話,-1,0,1. 這三個值所對應(yīng)的值? x y z,這三個對應(yīng)的xyz權(quán)重綜合加起來為1.(x的權(quán)重=x/(x+y+z))
知道 x 后就能通過 x 求出sigma,如果知道sigma,也可以通過sigma求出 x??梢酝ㄟ^x開平方或者sigma求平方得到x,來做模糊,這是最常見的方法,當(dāng)然還有別的方法來對x和y之間解算。
因為浮點數(shù)在計算機中很費cpu,所以我們可以把它轉(zhuǎn)為整數(shù):
下面是高斯分布的filter。

比如該表格 15*1+20*2+25*1 = 80, 1+2+1 = 4, 80/4 = 20。然后豎著1*3矩陣算子做模糊,得到二圖就是最終圖。其實這就是高斯3*3模糊的原理,先橫后豎。其實也可以直接3*3矩陣一起來過濾。
二維高斯拆分為一維高斯達到加速目的:
所以二維高斯你可以用二維也可以拆解為一維來用。二維的高斯就是3*3, 那么對應(yīng)的就是 9次乘法,8次加法,一次除法。一維就是一個1*3一個3*1,對應(yīng)的就是 6次乘法,4次加法,兩次除法。如果只看乘除法,二維:10次計算。一維:8次計算。所以一維比二維要少兩次運算。所以5*5 , N*N, 越高它少的就越多!?。?!所以很多二維filter高斯就把它拆分為一維,來做到加速,計算加速。
7.3.2 代碼層面代碼層面:

原圖加上高斯噪音:

對原圖進行高斯模糊:(毛玻璃效果)高斯模糊的效果如下,輪廓還在,但是他又很模糊,他考慮了每個像素的權(quán)重,他當(dāng)前權(quán)是最大的沒得平均,所以他保留了像素的主要特征,所以高斯模糊比均值模糊要好一點,因為它保留了圖片的特征。
對原圖加了高斯噪音的圖進行高斯模糊:

高斯模糊對高斯噪音是有抑制作用的。

我們改為 5*5 的高斯模糊后,噪聲被抑制了很多,說明我們高斯的模糊對我們高斯的噪聲有一定的抑制作用。

7.4 邊緣保留濾波(EPF)
我們對去燥之后的照片進行觀察可以發(fā)現(xiàn),前面的四種去燥方法的確抑制了噪聲,但是同時也使圖像本身變得更加朦朧了。當(dāng)人物和背景同時存在時,人物和背景之間的界限也變得模糊不清了。這其實是和算法本身的局限性密切相關(guān)的,前面四種算法像是一個沒有感情的機器人,對所有的像素點都是一視同仁,不管你是人像還是背景還是分界線,我的計算方法永遠(yuǎn)不變,上來先卷積了再說。這種類似中央空調(diào)似的做法,也就導(dǎo)致了人像、背景、邊界混在一起,主次難辨了。
基于此,一種優(yōu)化的濾波算法被設(shè)計了出來——邊緣保留濾波。正如它的名字表明的那樣,這種濾波算法可以把圖像的邊緣保留下來。
實現(xiàn)EPF有很多方法:高斯雙邊 和 均值遷移 和 局部均方差 等等。
OpenCV給出的最經(jīng)典的兩種:高斯雙邊 和 均值遷移。
EPF = Edge Preservation Filter 邊緣保留濾波
人臉美容或濾鏡,EPF是一個核心步驟,沒有它就沒有美顏; 當(dāng)然還存在一些其他的步驟,其他步驟只是用來處理失真等問題,讓圖像看起來更好,有EPF才叫美顏。
7.4.1 高斯雙邊(磨皮,非線性濾波):
void bilateralFilter( InputArray src,?
OutputArray dst,?
int d,
double sigmaColor, double sigmaSpace,
int borderType = BORDER_DEFAULT );
d表示在過濾過程中每個像素鄰域的直徑范圍。如果這個值是非正數(shù),則函數(shù)會從第五個參數(shù)sigmaSpace計算該值,一般情況下取0。
sigmaColor越大,表明該像素鄰域內(nèi)有越寬廣的顏色會被混合到一起,產(chǎn)生較大的半相等顏色區(qū)域,即色差多大范圍之內(nèi)才參與計算,一般取一個大一點的值。?
sigmaSpace:該值較大,則意味著顏色相近的較遠(yuǎn)的像素將相互影響,從而使更大的區(qū)域中足夠相似的顏色獲取相同的顏色。
當(dāng)d>0時,d指定了鄰域大小且與sigmaSpace無關(guān),否則d正比于sigmaSpace。
cv2.bilateralFilter(img, d, ’p1’, ’p2’ )
d是領(lǐng)域的直徑,后面兩個參數(shù)是空間高斯函數(shù)標(biāo)準(zhǔn)差和灰度值相似性高斯函數(shù)標(biāo)準(zhǔn)差。
高斯模糊只考慮了權(quán)重,只考慮了像素空間的分布,沒有考慮像素值和另一個像素值之間差異的問題,如果像素間差異較大的情況下(比如圖像的邊緣),高斯模糊會進行處理,但是我們不需要處理邊緣,要進行的操作就叫做邊緣保留濾波(EPF)
雙邊濾波是一種非線性濾波器,它可以達到保持邊緣、降噪平滑的效果。和其他濾波原理一樣,雙邊濾波也是采用加權(quán)平均的方法,用周邊像素亮度值的加權(quán)平均代表某個像素的強度,所用的加權(quán)平均基于高斯分布[1]。最重要的是,雙邊濾波的權(quán)重不僅考慮了像素的歐氏距離(如普通的高斯低通濾波,只考慮了位置對中心像素的影響),還考慮了像素范圍域中的輻射差異(例如卷積核中像素與中心像素之間相似程度、顏色強度,深度距離等),在計算中心像素的時候同時考慮這兩個權(quán)重。?
我們來看一下左上角的那個黃圖。其中白色那個點就是像素點靠近邊緣的情況。我們可以把比較高的那部分想象成像素值比較高的人像,比較低的那部分想象成像素值比較低的背景。這樣在濾波的時候,人像那部分權(quán)值不為0,比較低的背景部分權(quán)值為0。這樣只有人像部分參與了濾波。同理,在進行背景部分的濾波時也是這樣。這樣大家各玩各的,互不影響,邊緣就被保留了下來。

圖中梯度有高有低,低的梯度意味著像素值小,高的地發(fā)意味著像素之高。低的地發(fā)可以說越接近0,趨向黑色。高的地發(fā)接近255, 趨向于白色。當(dāng)濾波滑動到邊緣的時候,發(fā)現(xiàn)低位的數(shù)值太小了,就直接保留,高點的值還是和算子值很接近,所以就模糊掉。
我們有兩個space,一個是spatial一個是邊緣。圖中第一個核就是我們的 spatial kernel,它代表我們空間的sigma。下面range kernel 這個就是我們color的sigma,顏色的差異值我們就不考慮。
雙邊濾波里的兩個權(quán)重域的概念:空間域(spatial domain S)和像素范圍域(range domain R),這個是它跟高斯濾波等方法的最大不同點。下面是我找到的對比說明,更好地理解雙邊濾波,首先是高斯濾波的情況:
Iq為輸入圖像

然后對比再看一下雙邊濾波的過程:

雙邊濾波的核函數(shù)是空間域核與像素范圍域核的綜合結(jié)果:在圖像的平坦區(qū)域,像素值變化很小,對應(yīng)的像素范圍域權(quán)重接近于1,此時空間域權(quán)重起主要作用,相當(dāng)于進行高斯模糊;在圖像的邊緣區(qū)域,像素值變化很大,像素范圍域權(quán)重變大,從而保持了邊緣的信息。

7.4.2 MeanShift(更加類似于油畫)
7.4.3 代碼(Gaussian / MeanShift)


通過上圖我們會發(fā)現(xiàn),他只對人臉進行了邊緣處理,右下角的百度經(jīng)驗沒有被模糊。
均值漂移(更加類似于油畫):

