齊鳳蓮, 李 旭
(沈陽建筑大學 機械工程學院, 遼寧 沈陽 110168)
在數字圖像處理過程中, 不可避免的會引入一些噪聲,尤其是干擾噪聲和椒鹽噪聲,噪聲的存在會嚴重影響到圖像處理的結果, 尤其是在邊緣檢測算法處理的過程中。 中值濾波算法是一種基于排序統計理論的非線性平滑計數算法,它能夠有效地平滑噪聲,對椒鹽噪聲有較好的濾除作用,且能夠保護圖像的邊緣信息,所以被廣泛的應用于數字圖像處理的邊緣提取中。
FPGA 即現場可編程門陣列, 它是在PAL、GAL、CPLD 等可編程器件的基礎上進一步發展的產物。 它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編輯器件門電路數有限的缺點。
由于數字圖像處理過程一般要求有較高的實時性和快速性, 所以用FPGA 來實現中值濾波算法再適合不過。采用流水線結構和并行性的特點, 能最大限度的提升中值濾波算法的運行速度, 滿足了當前數字圖像處理領域中的越來越高的實時性和快速性的要求。
中值濾波算法的基本原理是把數字圖像或數字序列中的一點的值用于該鄰域內所有點的中值來代替, 其數學表達式如式(1)所示。

其中f(x,y)是目標圖像的像素點,g(x,y)為濾波后圖像的像素點,為待處理的圖像模板。 在實際應用中,較為常用的實現方法是利用模板3×3、5×5 或其他規格的模板對像素進行處理,本文選取3×3 的模板矩陣,用鄰近的像素點組成3×3 的模板, 對模板中所有的像素點對比排出大小, 并且求取中值, 最后把原像素的值用剛剛求取的中值來代替。 如圖1 所示是該算法的實現流程。

圖1 中值濾波算法模板流程圖
(1)對模板窗口內的每行像素按照降序排序,排序后能得到每行其中的最大值、中間值和最小值。
(2)把每行中排序出來的的最小值進行比較,取其中的最大值。
(3)把每行中排序出來的最大值相進行比較,取其中的最小值。
(4)把每行的中間值相比較,再取一次中間值。
(5)把前面得到的三個值再做一次排序,獲得的中值即該窗口的中值,比較得出中值后,用其代替濾波模板窗口中間位置的值,即此點處的濾波完成。 滑動模板,對數字圖像中的每一個像素點進行以上操作。
對于椒鹽噪聲來說, 最有效的濾除方法就是中值濾波,而且不會造成信號邊緣模糊,這種方法比線性濾波方法更有優勢。 中值濾波的算法容易理解, 易于用硬件實現,應用簡單,所以在實際種應用較多,其既能保留圖像邊緣的效果,又能有效的抑制噪聲的影響。但是由于中值濾波影響了圖像的基本信息, 所以對于高斯白噪聲的抑制效果并不理想,其更適合減小椒鹽噪聲。中值濾波算法在Matlab 平臺下實現的的效果圖如圖2 所示。
中值濾波算法在FPGA 上的實現過程主要分為三個部分:濾波器窗口的生成模塊、行列計數器模塊和濾波算法模塊。 濾波器窗口生成模塊主要是將存儲在內存中的數字圖像像素數據按行取出, 并且生成實現算法所需的3×3 窗口。 行列計數器模塊主要用于計算整幅圖像的行列值,可以控制濾波算法何時開始且何時停止。濾波算法模塊主要對每個像素點進行中值濾波算法處理。
圖像的預處理算法大多數都是針對鄰域內的像素點操作的, 本文以3×3 的窗口為模板, 利用3 個位寬為24bit 的FIFO 和9 個寄存器操作, 對數據的行列進行存儲和計算,設計的濾波窗口生成流程如圖3 所示。

圖3 濾波窗口生成力流程圖
每個FIFO 的深度為圖像每行的行數, 即一個FIFO單元存儲一個像素數據,9 個寄存器分別存儲FIFO 中讀出的像素數據,生成濾波窗口,等待計算最終濾波值。
對二維圖像進行鄰域操作時,隨著窗口的滑動,中心像素將運動到圖像的邊緣,但是邊緣點不存在鄰域,故此時濾波窗口輸出的鄰域數據是無效的,沒有實際意義。這個時候就需要行列計數器計算出什么時刻的數據是沒有意義的,將沒有意義的數據進行特殊處理,其處理辦法是將其濾波模板窗口缺失的數據補齊, 其值由該行最后一個有效數據決定。這樣雖然犧牲了一部分精度,但是很好的保存了圖像邊界的信息。
對于3×3 窗口的中值濾波, 采用圖1 所示的圖解輸出中值,輸入數據為圖3 所示的生成窗口的數據。第一季比較電路由三個三輸入比較器組成, 每個比較器的輸出數據依序排列。 將三組比較結果中最小的三個數放在一起,中間的三個數放在一起,最大的三個數放在一起,參與第二次比較。第二級比較電路的原理與第一級類似,輸出輸入數據的最大值最小值,將其舍去。第三次比較的方法類似于前兩次,以此類推,最終將得到最終要計算的數據中值,即中值算法完成。
本文設計的圖像濾波模塊采用了Xilinx 公司的xc7a100t 作為主控芯片, 該系列芯片具有速度高、 資源足、應用成熟等特點,同時具備多個DSP 模塊和PLL 模塊,完全滿足本文設計要求。
圖4 是中值濾波算法的Matlab 仿真圖, 從波形可以看出,經過時鐘上升沿的穩定采樣后,在數據到來的低六個時鐘周期輸出了最終的中值結果。 這種流水線操作和并行的計算方法,極大的提高了算法的處理速度,非常時候實時性要求高的圖像處理領域。

圖4 中值濾波算法仿真圖
將事先準備好的添加了椒鹽噪聲的圖片分別用Matlab 和本文實現的中值濾波算法進行處理,處理后的結果如圖5 所示。不難看出, 中值濾波算法對椒鹽噪聲具有良好的濾除作用特別是在濾除噪聲的同時, 能夠保護圖像信號的邊緣,使之不被模糊。通過實驗對比, 本文實現的中值濾波算法要比Matlab 實現的中值濾波算法效果更佳明顯, 對加鹽噪聲的抑制和濾除作用要優于Matlab 處理后的結果。

圖5 算法處理結果對比圖
數字圖像處理包括很多種算法,例如噪聲處理、邊緣檢測和運動木匾檢測與識別等。而為了有效的去除噪聲,應根據噪聲的不同種類來選擇不同的去噪算法。 本文提出的基于FPGA 實現的中值濾波算法適用于被椒鹽噪聲污染的圖像的濾波。 本文首先分析了中值濾波算法的原理與實現過程, 接著將軟件算法轉換為適合于FPGA 實現的方法來實行, 然后對設計好的FPGA 程序進行軟件仿真,驗證了其正確性,最后通過實驗驗證與結果對比,證實了本文所實現算法的可行性。 本文所提出的方法可以應用于其他的圖像算法如邊緣檢測等, 在高處理速度和高實時性的前提下,具有很高的應用價值。