(青島大學 自動化與電氣工程學院,青島 266071)
在當今社會,實時視頻傳輸在我們日常生活、工程、軍事、醫療等各個方面都有著極其廣泛的應用。我們看到的圖像在其生成、傳輸、和處理的過程中,會不可避免地存在椒鹽噪聲的干擾[1]。椒鹽噪聲是在圖像從傳感器到傳輸信道,再到圖像解碼處理這一過程中產生的像椒鹽一樣的黑白噪聲點。它的存在惡化了圖像的質量,影響了人們對圖像的觀察與研究。嚴重被噪聲污染的圖片會淹沒圖片本身的特征,使圖像失去原本保存的意義。因此,圖像去噪是圖像處理中的一個必不可缺的步驟[2]。
在去除椒鹽噪聲中,人們首選的方法就是經典中值濾波[3]。1971年,J.W.Tukey提出了中值濾波(median filtering)的概念。中值濾波擁有極好的脈沖噪聲抑制能力,在抑制噪聲的同時還能注意保護圖像邊緣信息且易于實現,這使得中值濾波在在圖像處理領域中廣受歡迎。然而它的缺點就是計算速度不夠快,容易丟失圖像中一些尖銳的細節,比如折線、拐角等。關于如何更好地去噪,國內外大量學者進行了研究,如R.K.Brownrigg提出的一種加權中值濾波器,Nieminen提出的一種多水平中值濾波器等,然而如何將中值濾波應用到實時傳輸中還很少有方案。 本文通過建立一種雙排序中值濾波算法,不僅能使計算速度更快,同時通過設立閾值能較好地保護圖像細節,達到圖像實時傳輸的目的。
經典中值濾波器的窗口有很多種,如方形窗、十字窗、圓形窗等,不同的窗口可以對不同圖像的內容和要求進行處理[4]。其中,對于圖像存在尖銳頂角的物體,十字窗窗口處理的效果比較好;而對于外輪廓線比較長的圖像,方形窗和圓形窗能達到更好效果地濾波[5]。本文研究的目標是生活中較普遍、應用較廣泛的圖像,因此本文選擇方形窗來處理中值濾波算法。假設一幅灰度圖像的部分數據如圖所示,中值濾波的濾波方式如圖1所示。

圖1 經典中值濾波原理
中值濾波的方式是將方形窗中的灰度數據由小到大的順序進行排列[6],在3×3方形窗中,中值為排序后9個灰度值中最中間的灰度值[7]。數據9為灰度值極端不同的椒鹽噪聲,在中值濾波進行大小排序的過程中,椒鹽噪聲這種極端數據會被集中到左端或者右端,不會作為中間值被選中,通過這種方式就可以將椒鹽噪聲消除。
中值濾波的方形窗分為3×3、5×5和7×7等,對于處理一幅256×256的灰度圖像,選擇過大的窗口會導致圖像模糊,同時也會占用更多的硬件資源占用更多的時間。本文選用的是3×3方形窗對圖像進行處理。
經典中值濾波算法在硬件實現中比較耗費時間,不利于進行實時傳輸[8],因此,本文提出一種通過改進方形窗中像素灰度值的方法,即雙排序中值濾波,來使中值濾波能夠更快地完成。相對于傳統中值濾波算法,雙排序中值濾波的計算時間大大減少,所占用FPGA的資源也較少,它對圖像的處理速度更快更便于進行圖像的實時傳輸。
2.1.1 算法原理
在3×3方形窗中,雙排序中值濾波先對方形窗中的9個像素灰度值Xi,j進行行排序。即將3×3方形窗的每一行進行從小到大的順序排列得到X'i,j(X'i,j+1≥X'i,j),再對X'i,j的每一列進行由小到大的排序得到X'i,j(X'i,j+1≥X'i,j),其中,i,j∈{1,2,3}。再對X''i,j的對角線取中值輸出,即M'=Med(X''1,3,X''2,2,X''3,1)。雙排序中值濾波的實現過程如圖2所示。

圖2 雙排序中值濾波算法
2.1.2 算法分析
雙排序中值濾波在邏輯上較難理解,下面證明雙排序中值濾波的正確性,如圖3所示。

圖3 算法分析
如圖,R1~R9為模板中9個不相等的像素灰度值,首先對這個9個像素進行從小到大的行排序,易得Min(i)<Med(i)<Max(i),其中i∈{1,2,3}。在進行列排序后,易得x1<x2<x3,x∈{r,s,t},r(i)<s(i)<t(i),i∈{1,2,3}。在雙排序后,可知t3=Max(max1,max2,max3},r1Min{min1,min2,min3}。即經過雙排序后,t3為9個像素中的最大值,而r1為9個像素的最小值。對于s1來說,s1<s2<s3,s1<t1,s2<t2,s3<t3,s1至少小于s2,s3,t1,t2,t3五個像素灰度值,由對稱性來看,s3也至少大于五個像素的灰度值,因此,s1和s3也一定不是中值。r2<s2<t2,r2<r3,s2<s3,t2<t3。因此r2至少小于s2,t2,r3,s3,t3五個像素灰度值,同理t2也至少大于五個像素的灰度值,因此,r2和t2也一定不是中值。當9個灰度值按從小到大的順序排列時,r1排在第一位,s1和r2在第二位到第四位之間,s3和t2在第六位到第八位之間,t3排在第九位。在剩下的t1,s2和r3中,其中一個值在第二位到第四位之間,一個值為中值,一個值在第六位到第八位之間,則med=Med{t1,s2,r3}。
由以上數學證明過程上來看,雙排序中值濾波是完全正確可行的。雙排序中值濾波并沒有像經典中值濾波將9個像素灰度值按順序排列,而是經過幾次簡單的數據比較運算快速地得到方形窗內的中值。中值濾波算法的硬件實現已經趨于成熟[9],雙排序中值濾波需要對比較器模塊進行相應的修改即可實現。
經典中值濾波的最大缺點就是噪聲被消除了,而圖像細節卻未能得到有效的保護[10]。在經典中值濾波中,圖像的非噪聲區域也需要進行一次濾波處理,這就可能導致原本數據的改變,從而導致圖像細節的丟失。如圖4所示。

圖4 中值濾波的缺點
圖像中原本的像素3經過中值濾波處理后變成了4,這就是中值濾波后所造成的細節損害。根據椒鹽噪聲的較為極端的灰度值特性,本文采取的方法是設立一個閾值鑒別噪聲點,在方形窗像素灰度值大于某一閾值或小于某一閾值時,即可定義為噪聲點從而進行中值濾波處理,否則將保持原點輸出。為最大化地保護圖像細節,在大量文獻進行的研究中,將灰度值為0的點和灰度值為255的點設置為噪聲,便可很好地保護圖像細節。該方法在硬件上也很容易實現,只需設定一個條件語句,當圖像像素灰度值符合噪聲點,則取雙排序中值濾波得到的中值代替原數據,否則將保持原值。這種方法并不需要占用過多時間,符合本文圖像實時傳輸的要求。
在經典中值濾波中,計算中值時需要將方形窗內的數據進行逐一比較排序,并以中間值來代替方形窗內的中心值。這需要進行大量的計算,占用更多的硬件資源。對于n個數據,將其進行排序共需要次)比較運算,對于3×3方形窗來說共需要36次運算[11]。可以看出,要對一幅256×256的灰度圖像進行經典中值濾波,所耗費的時間還是比較長的。
而在本文提出的雙排序中值濾波算法中,采取的時每3個像素灰度值一組的排序算法。進行一次行排序,每行需要進行3次運算,3行共需要9次運算。進行列排序時,同樣需要9次運算。最后在三個對角線數據中取中值,則需要3次運算。雙排序中值濾波每次方形窗運算共需21次,這比傳統中值濾波要節約將近40%左右的時間。
兩者相比,雙排序中值濾波比傳統中值濾波計算更簡單,用時更短,這不僅更利于圖像的實時傳輸,也占用了更少的硬件資源,便于用硬件進行實現。
目前,在數字圖像處理領域對圖片的評價尚未有嚴格統一的標準,通常對圖像的評判方法是采取主觀評價并輔以客觀評價參數[12]。本文采用的參數為歸一化均方誤差(NMSE)和峰值信噪比(PSNR)。NMSE是常見的衡量圖像質量的方法。其值越小,表示圖像細節更豐富,更接近原始圖像。PSNR與NMSE不同,PSNR的值越小,表示其圖像質量越好,其計算公式如下:

其中,g(x,y)是原始輸入圖像,f(x,y)為去噪后輸出圖像。M和N表示圖像的大小,本文M值和N值都為256。
在Matlab仿真中,經典中值濾波與本文算法的對比圖如圖5所示。
可以看出,相比于傳統中值濾波,該方法可以對大部分細節進行保護,比如頭發等細條更清晰,并且去噪效果也比傳統中值濾波更好。NMSE與PSNR數據對比如表1所示。

圖5 圖像對比
本文對經典中值濾波算法進行了相應的改進,提出了基于閾值的雙排序中值濾波算法,這不僅提高了算法計算中值的速度,同時也進一步地保護了圖像的細節。隨著人類的社會越來越趨于信息化,圖像的實時傳輸將會得到更廣闊的發展空間[13],本文算法可以在占用較少硬件資源的基礎上更方便地在FPGA、DSP、GPU等硬件上實現,這為如何使圖像進行更快更好地進行傳輸提供了新的思路。然而由于時間和條件的限制,本文只是驗證了該算法的正確性和實用性,如何設定閾值使圖像質量最優化,如何在硬件上進行相應的實現將在后續的學習過程中進行不斷地探究。

表1 數據對比