摘 要:傳統的中值濾波方法在去除脈沖噪聲的同時會損失部分圖像細節,且運行速度也不能很好地滿足實時性要求。在此對Matlab工具箱中的中值濾波算法進行改進,提出一種基于×字形濾波窗口的自適應中值濾波算法。該方法具有根據3×3的×字形窗口中噪聲點個數自適應調整濾波窗口大小及根據矩陣的對稱性及基本的邏輯運算實現×字形窗口的特點。實驗結果表明,與傳統的方形窗口中值濾波算法相比,該方法在有效去除椒鹽噪聲和脈沖噪聲的同時,較好地保持了圖像細節,縮短了運行時間。
關鍵詞:自適應中值濾波; ×字形窗口; Matlab語言; 數字圖像處理
中圖分類號:TP391 文獻標識碼:A
文章編號:1004-373X(2010)10-0090-03
Algorithm of Adaptive Median Filtering Based on ×-shaped Window
WANG Yan-xia1, ZHANG You-hui1, KANG Zhen-ke1, ZHANG Jin-dong2
(1. College of Mathematics and Information Science, Hebei Normal University, Shijiazhuang 050016, China;
2. Institute of Communications Engineering, PLA Univ. of Sci. Tech., Nanjing 210007, China)
Abstract:Since the traditional median filtering methods may lose some image details while removing impulse noise and can not meet the demand of real-time image preprocessing, the common median filtering method in the Matlab toolbox is modified and a self-adaptive median filtering algorithm based on ×-shaped windows is proposed. This method has the following characteristics: the adaptive filtering window size is adaptively adjusted according to the number of noise points in the 3×3 X-shaped window, X-shaped window is achievedaccording to the symmetry of the matrix and the basic logic operations. The simulation results show that compared with the square-shaped windows, this method can maintain the image details while removing the salt and pepper noise and impulse noiseing, and can reduce the running time effectively.
Keywords:adaptive median filtering; ×-shaped window; Matlab language; digital image processing
0 引 言
由于種種原因,圖像在生成、傳輸、變換等過程中往往會受到各種噪聲的污染,從而導致圖像質量退化。噪聲信號的濾波是圖像處理的基本任務之一,主要有線性濾波和非線性濾波兩種方法。線性濾波方法一般具有低通特性,而圖像的邊緣信息對應于高頻信號,因此線性濾波方法往往導致圖像邊緣模糊,不能取得很好的復原效果[1]。中值濾波是一種使邊緣模糊較輕的非線性濾波方法,是由Tukey發明的一種非線性信號處理技術,早期用于一維信號處理,后來很快被用到二維數字的圖像平滑中。該算法不僅能夠去除或減少隨機噪聲和脈沖噪聲干擾,而且能夠很大程度地保留圖像的邊緣信息,近年來在圖像平滑和數據分析與處理等多個領域中得到廣泛應用[2]。盡管如此,由于它對窗口和數據點的高度依賴,使其在處理空間密度較大的沖激噪聲時,處理效果和效率受到了限制[3]。文獻[4]提出一種自適應中值濾波算法,通過擴大窗口來相對減少沖激噪聲空間密度,但它是基于方形窗口的,當窗口尺寸增大時,計算量將按平方增大,因此在速度方面還不夠理想。在數字圖像處理中,作為一種典型的非線性濾波方法,中值濾波應用得非常廣泛,因而對提高其算法效率是非常有意義的[5]。本文對Matlab工具箱中的中值濾波算法進行改進,提出一種基于×字形濾波窗口的自適應中值濾波算法,在有效去除噪聲的同時,較好地保持了圖像細節,縮短了運行時間。
1 中值濾波的基本原理及傳統算法
信號中值(medians)是按信號值大小順序排列的中間值。長為n的一維信號{Xn,n∈N}的中值用下式表示:
Yn=Med{X1,X2,…Xn;n∈N}(1)
相對二維圖像信號{Xij:i,j∈N},二維中值濾波器定義為:
Yij=Med{Xij}=Med{Xi+r,j+s:r,s∈A} (2)
式(1)、式(2)中:N表示自然數集;A為截取圖像數據的窗口尺寸;r為窗口水平尺寸;s為窗口垂直尺寸;Xij為被處理圖像平面上的一個像素點,坐標為 (i,j);Yij是以Xij為中心,窗口W所套中范圍內像素點灰度的中值,即中值處理的輸出值。窗口A可以采用不同的形式,通常有線段窗、方形窗、圓形窗、十字窗和圓環窗等。文獻[6]對中值濾波的多種形態及其發展有詳細的介紹。
中值濾波就是選擇一定形式的窗口,使其在圖像的各點上移動,用窗內像素灰度值的中值代替窗中心點處的像素灰度值[7]。它對于消除孤立點和線段的干擾十分有用,能減弱或消除傅里葉空間的高頻分量,但也影響低頻分量。高頻分量往往是圖像中區域邊緣灰度值急劇變化的部分,該濾波可將這些分量消除,從而使圖像得到平滑的效果。對于一些細節較多的復雜圖像,還可以多次使用不同的中值濾波。傳統中值濾波算法的具體實現過程如下[8]:
(1) 選擇一個(2n+1)×(2n+1)的窗口(通常為3×3或5×5),并用該窗口沿圖像數據進行行或列方向的移位滑動;
(2) 每次移動后,對窗內的諸像素灰度值進行排序;
(3) 用排序所得中值替代窗口中心位置的原始像素灰度值。
圖1是傳統中值濾波算法的框圖。其中,M, N分別表示濾波圖像的行數和列數。
圖1 中值濾波程序流程圖
2 自適應中值濾波的基本原理及改進算法
中值濾波是當前應用最廣泛的濾波方法之一,然而,中值濾波的去噪效果和處理速度依賴于濾波窗口的大小及參與中值計算的像素點數目[9]。當脈沖噪聲概率小于0.2時,中值濾波是很有效的方法,當脈沖噪聲概率超過0.2時,則使用自適應中值濾波方法[3]。
×字形窗口的自適應中值濾波算法是對中值濾波的一種改進。相對于中值濾波而言,它能夠處理空間密度更大的沖激噪聲,并且在平滑非沖激噪聲時,還可保存更多的圖像細節;效率方面也較一般的自適應中值濾波有所改善。常見窗口及本文提出窗口如圖2所示。
圖2 常見窗口
基本原理如下[3]:
首先,采用3×3的×字形窗口進行計算,計算圖像的中值濾波值Zmed、最大值濾波值Zmax和最小值濾波值Zmin,并判斷噪聲敏感度,即:如果Zmed不在Zmax和Zmin之間就自動增加×字形窗口的大小,然后重復以上的過程;對于Zmed在Zmax和Zmin之間的點先用原像素值與最大濾波值和最小濾波值進行判斷,如果在其間,原值不做修改,反之就用Zmed取代原值。這一過程有如下的作用:
(1) 使得未受脈沖噪聲污染的點不用修改,很好地保護了圖像的點、線等細節及邊界信息;
(2) 當檢測到的噪聲很強時,自動增大窗口,提高了去噪能力;
(3) 當檢測到的噪聲不是很強時,就不用增加窗口的大小,既體現出自適應性,又減少了時間開銷,提高了速度。
其中,×字形窗口的實現方法如下:
(1) 先得到一個對角矩陣A;
(2) 將對角矩陣A從左向右翻轉,得到一個矩陣B;
(3) 將矩陣A與矩陣B取或運算,得到×字形矩陣C。
3 基于×字形窗口自適應中值濾波算法的Matlab實現
中值濾波是數字圖像處理中一個很重要的部分,Matlab工具箱中有該函數,用到中值濾波算法時可直接調用。因此,用Matlab編程具有簡單、方便、快捷等優點。另外,還可以對其內部函數進行改進。本文的算法就是通過另外編程修改中值濾波有關的內部函數實現的。
下面就是自適應中值濾波算法的實現流程,添加新的庫函數adpmedianXzi對圖像處理工具箱進行擴展,以實現數字圖像自適應中值濾波(部分偽代碼)。
function f=adpmedianXzi(g,Smax)
%首先進行×字形窗口的極小值濾波和極大值濾波
zmin=ordfilt2(g,1,eye(k)|fliplr(eye(k)) ,′symmetric′);
zmax=ordfilt2(g,2*k-1,eye(k)|fliplr(eye(k)),′symmetric′);
%然后進行中值濾波
zmed=medfilt2(g,[k,k],′symmetric′);
%判斷Zmed是否為一脈沖
processUsingLeveB=(zmed>zmin)(zmax>zmed)~alreadyProcessed;
%判斷Zxy是否為一脈沖
zB=(g>zmin)(zmax>g);
outputZxy=processUsingLeveBzB;
outputZmed=processUsingLeveB~zB;
%若Zmed為一脈沖,輸出一個不變的像素值Zxy來代替鄰域中值作為輸出
f(outputZxy)=g(outputZxy);
%若Zmed不是一脈沖,輸出中值濾波的值作為輸出
f(outputZmed)=zmed(outputZmed);
4 實驗結果及其分析
在實驗中,選擇了大小為256×256像素、灰度為256級的Lena圖像。實驗環境為IBM R52,Matlab7.0軟件。實驗結果如圖3、圖4所示。
圖3 原始圖像、噪聲圖像和濾波后圖像
圖4 方形窗口與×形窗口運行效率對比
圖3(b)顯示了被“椒鹽”噪聲污染了的圖像,該噪聲的概率為Pa=Pb= 0.25。這里噪聲水平非常高,能夠模糊圖像的大部分細節。作為比較的基礎,圖像首先用7×7的中值濾波器進行濾波,消除大部分可見的脈沖噪聲痕跡(見圖3(b))。雖然噪聲被有效消除了,但是濾波器在圖像上也引起了明顯的細節損失。圖3(d)顯示了使用Smax=7的方形窗口自適應中值濾波器的效果,噪聲消除水平同中值濾波器相似。圖3(e)為基于×型窗口的自適應中值濾波效果。自適應濾波器保持了點的尖銳性和細節。可見,改進是很明顯的,而且通過對比方形窗口與×字形窗口發現,×字形窗口的運行效率也提高了不少。
5 結 語
通過對Matlab圖像處理工具箱中算法的改進,實現了一種快速自適應中值濾波算法。在對圖像濾波前,首先判斷是否為脈沖,然后采取變化×字形窗口大小來對噪聲進行濾波,這樣既有效消除了噪聲,也很好地保持了圖像細節。實驗結果表明,基于×字形的濾波方法比一般自適應中值濾波效率有了一定程度的提高。算法原理簡單、穩定、實用。若進一步研究,可針對不同噪聲采取更加智能的處理措施,如CWMFANFIS(自適應模糊神經中值濾波系統)[10],用以達到更好的處理效果。
參考文獻
[1]董付國,原達,王金鵬.中值濾波快速算法的進一步思考[J].計算機工程與應用,2007,43(26):48-64.
[2]郭煒.多級非線性加權平均中值濾波改進算法[J].現代電子技術,2006,29(19):159-161.
[3]ABDULLAH T, INAN G. Impulse noise reduction in medical images with the use of switch mode fuzzy adaptive median filter[J]. Digital Signal Processing, 2007, 17:711-723.
[4]袁西霞,岳建華,趙賢任.Matlab在中值濾波改進算法中的應用[J].廣東工業大學學報,2007,24(1):33-35.
[5]曹治華,宋斌恒.多種形狀窗口下的中值濾波算法[J].計算機應用研究,2006,23(3):86-88.
[6]劉麗梅,孫玉榮,李麗.中值濾波技術發展研究[J].云南師范大學學報,2004,24(1):23-27.
[7]隋雪莉,梅園.基于中值濾波的指紋增強算法[J].現代電子技術,2009,32(10):107-109.
[8]張明艷,吳莉,謝玉鵬.一種圖像快速中值濾波算法[J].吉林省教育學院學報,2007,23(1):91-92.
[9]吳玉蓮.圖像處理的中值濾波方法及其應用[D].西安:西安電子科技大學,2006.
[10]ME Yüksel. A median/ANFIS filter for efficient restoration of digital images corrupted by impulse noise[J]. Int. Electron. Commun., 2006, 60: 628-637.