基本原理
圖像受獲取和存儲、處理及各種幹擾的影響,顯示時畫面上會出現噪聲。為了減少噪聲帶來的負面影響,儘可能地還原乾淨真實的畫面,就需要用到降噪濾波器對圖像數據進行處理。
圖像的噪聲有多種類型。如加性噪聲、乘性噪聲、椒鹽噪聲、高斯噪聲等。常見的降噪方法有在空間域進行的,也有將圖像數據經過傅立葉等變換以後轉到頻域中進行的。其中頻域裡的濾波需要涉及複雜的域轉換運算,相對而言硬體實現起來會耗費更多的資源和時間。在空間域進行的方法有均值或加權後均值濾波、中值或加權中值濾波、最小均方差值濾波和均值或中值的多次迭代等。
實踐證明,這些方法雖有一定的降噪效果,但都有其局限性。比如加權均值在細節損失上非常明顯;而中值僅對脈衝幹擾有效,對高斯噪聲卻無能為力。
事實上,圖像噪聲總是和有效數據交織在一起,若處理不當,就會使邊界輪廓、線條等變得模糊不清,反而降低了圖像質量。此外,由於各類噪聲往往不是單一存在而是同時並存,所以單純採用一種濾波器,往往達不到滿意的效果。
本文所述算法,就是針對這一問題,提出了一種新型的可同時濾除多種噪聲的數字圖像濾波器方法,其濾波效果優於單純的某一種濾波器,同時計算量也不太複雜,硬體上較易實現。
算法描述
本文所採用的濾波算法包括以下主要步驟。
● 在某鄰域窗口內選擇多個鄰域像素fi,(i=1,2,…,n);
● 噪聲檢測:累計中心像素與鄰域內其他像素之間的差值中大於T1的個數N,T1是一個與圖像的細節程度有關的閥值;當 0NT2時,表示中心像素為信號點,否則為噪聲點。T2是與噪聲汙染程度相關的閾值;
● 計算與所選像素對應的像素數據的加權平均值,這裡用「g1」表示;
● 計算所選像素對應的多窗口(包括十字形窗、X形窗和矩形窗等三種窗口類型)像素數據排序比較後的中間值,這裡用「g2」表示;
● 按照式(1)計算出濾波的最後輸出值,用來調整中心像素的像素數據。
(1)
上式中,g(x,y)表示濾波器的輸出像素值;a和b分別是針對不同噪聲類型選擇的線性和非線性濾波比例係數,其取值與N的大小相關。
實驗結果
為了比較本文方法和原有方法的降噪效果,我們以Lena圖為例,對其同時添加了均值為0.003,差值為0.004的高斯噪聲以及強度為0.01的脈衝噪聲,然後分別用加權均值濾波、加權中值濾波和本文提出的方法對噪聲圖進行濾波處理,效果如圖1所示。
圖1(a)Lena原圖
圖1(b)同時加入高斯和椒鹽噪聲的Lena圖
圖1(c) 加權均值濾波後
圖1(d)加權中值濾波後
圖1(e)本文的方法濾波後
同時,可採用計算信噪比的方法對各種方法作出量化的比較。式(2)為信噪比的計算公式。
(2)
其中,M、N是圖像的長度和寬度,g是濾波以後的數據,s是原圖數據,f是附加了噪聲的圖像數據。計算得出的信噪比R若為負值,則說明噪聲被抑制,且R的值越小,說明濾波效果越好。表1顯示出了各種方法的信噪比結果。
可以看到,本文所述方法能集合均值濾波對高斯噪聲有效和中值濾波對脈衝噪聲有效的優點,同時又避免了在濾波的同時使細節模糊的情況發生。所以,實驗證明本文所述方法是切實有效的。
硬體實現
圖2是硬體系統框圖。大量試驗表明,人眼對亮度信號的敏感度超過對色度的敏感。專門針對亮度信號進行降噪濾波,符合人眼的觀看模式。所以,RGB信號流首先經過YUV色空間轉換進行亮色分離。RAM塊完成n-1行的亮、色數據存儲,它可實現一進n出的鄰域窗口數據流,輸出給後面的噪聲判斷和濾波處理模塊,最後再還原成RGB輸出給顯示終端。
圖2 硬體系統框圖
關鍵器件選型時要綜合考慮系統工作頻率、模塊總規模、調用IP庫、晶片成本、可擴展性和可升級性、廠商支持等多個方面的因素。由於此平臺僅用於晶片開發階段中的模塊驗證階段,所以不必選擇性能最優而價格昂貴的系列。結合本設計的實際情況,選擇了Xilinx的Spartan 3E系列XC3S500E (PQ208封裝),該晶片內含20個RAM塊,滿足系統需14個RAM用於存儲兩行實時像素數據及對應控制信號的需求;10476個邏輯單元,4656個Slice,而本系統通過Synplify綜合後的規模為3158個Slice,約佔70%的內部資源,留有一定餘量。圖3是濾波主模塊流程圖。
圖3 濾波主模塊流程圖
電路設計中的注意事項
根據視頻電子標準協會(VESA)的規定,對於視頻標清及高清信號的像素時鐘,至少需要達到135MHz左右的頻率。為了滿足這一頻率要求,需要運用到流水管線設計方法,綜合考慮面積和速度兩方面的因素進行設計。
設計的難點有二:一是如何搭建一個實時的像素矩陣數據流,一次同時輸出nn的矩陣數據;二是如何採用流水管線的方式在延時若干拍後實時地輸出濾波處理後的像素數據。
對於第一個問題,可以調用Xilinx提供的RAM內核,運用Coregen工具在器件內部規劃出一個n行或n-1行的存儲空間,在第n行的第n個數據到達以後,就可以同時輸出nn個矩陣數據到後面的處理模塊。輸出一個矩陣後,新的數據又進入存儲空間,使數據得到刷新。以33矩陣為例,其存儲模塊的功能仿真波形見圖4所示,可以看到在延遲一行加一個像素時鐘後,模塊就開始按時鐘輸出y11到y33共九個鄰域內數據。
圖4 存儲模塊的功能仿真波形
第二個問題的解決可充分利用能夠有效提高電路運行速度的流水線方法。首先將濾波處理過程分為若干步驟,每一步驟對應一些狀態標誌寄存器或中間寄存器,由此搭建一個有著若干節拍的流水結構,最後在總的延遲拍數後實現實時的(即按圖像像素時鐘頻率來輸出)濾波數據輸出流。不論是33的還是77的矩陣鄰域,或者更大些的鄰域,從輸入矩陣數據到輸出此矩陣的中間值,都是只需最多8拍即可完成。從而有效提高電路工作頻率,本系統經過靜態時序分析後的結果為135MHz,滿足高清信號處理所需的像素時鐘頻率。