自适应中值滤波及实现
前言
無意中看到了一篇比較老的論文,Adaptive median filters: new algorithms and results。感興趣的可以下載下來看看。主要就是提出了一種自適應(yīng)中值濾波算法,這個(gè)算法是很經(jīng)典的中值濾波算法的改進(jìn)版本,自動(dòng)選擇濾波器的大小,以追求更好的效果。原理十分簡單,后面都盡量簡短地進(jìn)行說明。
中值濾波器(Median Filter)
中值濾波的思想就是比較一定領(lǐng)域內(nèi)的像素值的大小,取出其中值作為這個(gè)領(lǐng)域的中心像素新的值。假設(shè)對(duì)一定領(lǐng)域內(nèi)的所有像素從小到大進(jìn)行排序,如果存在孤立的噪聲點(diǎn),比如椒鹽噪聲(椒噪聲——較小的灰度值,呈現(xiàn)的效果是小黑點(diǎn);鹽噪聲——較大的灰度值,呈現(xiàn)的效果是小白點(diǎn)),那么從小到大排序的這個(gè)數(shù)組中,那些孤立的噪聲一定會(huì)分布在兩邊(要么很小,要么很大),這樣子取出的中值點(diǎn)可以很好地保留像素信息,而濾除了噪聲點(diǎn)的影響。
中值濾波器受濾波窗口大小影響較大,用于消除噪聲和保護(hù)圖像細(xì)節(jié),兩者會(huì)存在沖突。如果窗口較小,則能較好地保護(hù)圖像中的一些細(xì)節(jié)信息,但對(duì)噪聲的過濾效果就會(huì)打折扣;反之,如果窗口尺寸較大則會(huì)有較好的噪聲過濾效果,但也會(huì)對(duì)圖像造成一定的模糊效果,從而丟失一部分細(xì)節(jié)信息。另外,如果在濾波窗口內(nèi)的噪聲點(diǎn)的個(gè)數(shù)大于整個(gè)窗口內(nèi)像素的個(gè)數(shù),則中值濾波就不能很好的過濾掉噪聲。
自適應(yīng)中值濾波器(Adaptive Median Filter)
在噪聲密度不是很大的情況下(根據(jù)經(jīng)驗(yàn),噪聲的出現(xiàn)的概率小于0.2),使用中值濾波的效果不錯(cuò)。但是當(dāng)噪聲出現(xiàn)的概率比較高時(shí),原來的中值濾波算法就不是很有效了。只有增大濾波器窗口尺寸,盡管會(huì)使圖像變得模糊。
使用自適應(yīng)中值濾波器的目的就是,根據(jù)預(yù)設(shè)好的條件,動(dòng)態(tài)地改變中值濾波器的窗口尺寸,以同時(shí)兼顧去噪聲作用和保護(hù)細(xì)節(jié)的效果。
下面是自適應(yīng)中值濾波器算法的詳細(xì)描述:
預(yù)先定義好以下符號(hào):
- SxySxy:濾波器的作用區(qū)域,濾波器窗口所覆蓋的區(qū)域,該區(qū)域中心點(diǎn)為圖像中第y行第x列個(gè)像素點(diǎn);
- ZminZmin:SxySxy中最小的灰度值;
- ZmaxZmax:SxySxy中最大的灰度值;
- ZmedZmed:SxySxy中所有灰度值的中值;
- ZxyZxy:表示圖像中第y行第x列個(gè)像素點(diǎn)的灰度值;
- SmaxSmax:SxySxy所允許的最大窗口尺寸;
自適應(yīng)中值濾波器分為以下兩個(gè)過程,A和B:
A:
1. A1 = ZmedZmed - ZminZmin
2. A2 = ZmedZmed - ZmaxZmax
3. 如果A1>0A1>0 且 A2<0A2<0,則跳轉(zhuǎn)到B
4. 否則,增大窗口的尺寸
5. 如果增大后的尺寸≤≤SmaxSmax,則重復(fù)A
6. 否則,直接輸出ZmedZmed
B:
1. B1 = ZxyZxy - ZminZmin
2. B2 = ZxyZxy - ZmaxZmax
3. 如果B1>0B1>0 且 B2<0B2<0,則輸出ZxyZxy
4. 否則輸出ZmedZmed
直觀解釋
在自適應(yīng)中值濾波算法中,A步驟里面會(huì)先判斷是否滿足Zmin<Zmed<ZmaxZmin<Zmed<Zmax。這一步驟實(shí)質(zhì)是判斷當(dāng)前區(qū)域的中值點(diǎn)是否是噪聲點(diǎn),通常來說是滿足Zmin<Zmed<ZmaxZmin<Zmed<Zmax這個(gè)條件的,此時(shí)中值點(diǎn)不是噪聲點(diǎn),跳轉(zhuǎn)到B;考慮一些特殊情況,如果Zmed=ZminZmed=Zmin或者Zmed=ZmaxZmed=Zmax,則認(rèn)為是噪聲點(diǎn),應(yīng)該擴(kuò)大窗口尺寸,在一個(gè)更大的范圍內(nèi)尋找一個(gè)合適的非噪聲點(diǎn),隨后再跳轉(zhuǎn)到B,否則輸出的中值點(diǎn)是噪聲點(diǎn);
接下來考慮跳轉(zhuǎn)到B之后的情況:判斷中心點(diǎn)的像素值是否是噪聲點(diǎn),判斷條件為Zmin<Zxy<ZmaxZmin<Zxy<Zmax,原理同上,因?yàn)槿绻?span id="ze8trgl8bvbq" class="MathJax_Preview" style="color: inherit; display: none;">Zxy=ZminZxy=Zmin或者Zxy=ZmaxZxy=Zmax,則認(rèn)為是噪聲點(diǎn)。如果不是噪聲點(diǎn),我們可以保留當(dāng)前像素點(diǎn)的灰度值;如果是噪聲點(diǎn),則使用中值替代原始灰度值,濾去噪聲。
程序?qū)崿F(xiàn)
程序中定義了產(chǎn)生椒噪聲和鹽噪聲函數(shù),以及中值濾波和自適應(yīng)中值濾波的函數(shù)。
程序很基礎(chǔ),不做贅述。
結(jié)果截圖
原始圖像和添加椒鹽噪聲后的圖像。
其實(shí)截圖中看不出很明顯的區(qū)別,在自己電腦上運(yùn)行后看結(jié)果會(huì)清楚點(diǎn)。可以看到使用普通中值濾波的結(jié)果相比另一個(gè)會(huì)模糊一些,且局部仍然會(huì)有一小的噪聲點(diǎn)。圖像邊緣多出來的區(qū)域不好做中值濾波處理保留了原始圖像,所以邊緣那一圈仍然有噪聲。
總結(jié)
以上是生活随笔為你收集整理的自适应中值滤波及实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Caffe官方教程翻译(10):Edit
- 下一篇: HOG特征检测学习笔记