孫凱旻,王 亮,顧美康
(上海師范大學 信息與機電工程學院,上海 200234)
數字圖像處理領域中,非線性中值濾波器的應用非常廣泛.在進行圖像識別、視頻跟蹤等工作之前一般都會用中值濾波器進行圖像預處理,因為它能有效消除椒鹽噪聲,并不會使邊界區域模糊過大.中值濾波器一般是用通用計算機和軟件來實現的,然而由于傳統處理器串行結構的局限性,隨著視頻圖像分辨率的不斷提高,對濾波處理速度的要求也越來越高,因此這種方式已經越來越不能滿足實時性的要求.另外專用芯片設計周期長、成本高、而且靈活性差,因此也不適合用來專門進行圖像濾波工作.現場可編程門陣列(FPGA)以其可編程性和并行計算結構的特點,成為了實現濾波處理的理想工具[1].
利用FPGA進行數字圖像處理中值濾波的研究文獻較多.如文獻[2]提出一種快速排序法的新算法,用于濾波器的功能邏輯模塊.該算法為比特串行濾波算法(Bit serial median algorithm),并在此基礎上擴展并結合權重法和優先級次序法.如果對N個像素值進行處理,這種算法復雜度為O(N),與冒泡排序法(Bubble Sort)O(N)的復雜度相比,所占用的邏輯資源大大減少.然而在XC4010E-1 FPGA芯片實現后,處理速度相對較慢,圖像處理速度僅僅為25幀/s.文獻[3]實現了向量中值濾波器,并組成了圖像濾波系統.該系統使用Stratix EP1S40F780C5 FPGA芯片,處理速度達到80 MHz/像素,然而缺點是需要硬件設計結合軟核處理器,因此所占邏輯資源較多.
本文作者以進一步權衡邏輯資源和處理速度為目標,利用Altera EP2C70 FPGA硬件平臺設計了基于窗結構和巴切奇偶排序的中值濾波器并搭建了系統結構.文章第1章介紹了中值濾波器和巴切奇偶排序的概念;第2章闡述了濾波器硬件結構設計思路,具體而言即掃描模塊和濾波器功能模塊,前者完成對視頻信息的輸入工作,后者對視頻信號作排序處理工作,作者分別使用窗結構和巴切奇偶排序來完成2個模塊的搭建.之后給出濾波器在ModelSim上仿真波形圖驗證了結果,并針對濾波效果圖進行分析;第3章提出了可進一步改進結構的想法;第4章總結全文.
中值濾波器是一種基于統計排序的非線性濾波器.它的響應是濾波器掩膜所包圍的圖像區域中各個像素從小到大排序后的中間值.中值濾波器的使用非常普遍,這是因為對于一定類型的隨機噪聲,它的去噪聲能力非常優秀,比小尺寸的線性平滑濾波器的模糊程度明顯要低.中值濾波器對處理脈沖噪聲(椒鹽噪聲)非常有效,這種噪聲是黑白點疊加在圖像上而形成的[4-5].
假設一個數值集合的中值為£,則有一半元素的值小于或等于£,還有一半元素的值大于或等于£.中值濾波處理時,必須先設定掩膜,然后將掩膜內的像素按大小排序,確定出中值,并將中值賦予新像素點.
本文作者設計的是一個3中值濾波器,掩膜內共包括9個像素,可以用下式表示濾波:
£=middle{Zk|k=1,2,3,…,9}.
(1)
式(1)中:£表示新像素點的值,Zk表示掩膜內各個像素點的值,middle運算表示排序后取中值.
巴切排序網絡本質上是一個非線性排序算法,由一系列巴切比較器構成.巴切排序網絡理論有2個分支:巴切奇偶排序網絡(Batcher’s Odd-Even Sort Network)和巴切雙調排序歸并網絡(Batcher’s Bitonic Sort Network),本設計的濾波功能邏輯模塊使用前者.使用巴切奇偶排序能大大降低比較器的數量,從而減少邏輯資源的使用.
巴切奇偶排序網絡數學理論基于Knuth 0-1 原理,由巴切比較器構成.其8元排序網絡排序過程如圖1所示.
由圖1可以看出,8元巴切奇偶排序網絡排序過程是,先將8個元素分為2組,每組4個元素,對這2組進行并行4元巴切奇偶排序.然后對這兩個排序后的序列做歸并得到最終8元奇偶排序網絡.

圖1 8元巴切奇偶排序網絡排序過程
為在FPGA硬件上實現作者設計的中值濾波器,設計并搭建以下系統平臺:
視頻信號從CCD攝像頭通過AV輸入接口進入,此時信號還是模擬的,需要使用ADV7180芯片對其進行模數轉換.I2C_AV配置模塊對ADV7180芯片進行適當配置后能對模擬信號識別并解碼成8位4∶2∶2分量視頻數據.

圖2 基于FPGA的中值濾波器系統架構
隨后視頻圖像數據流進入SDRAM進行存儲.使用SDRAM作為緩存的主要目的在于整合奇偶場,這是因為NTSC制式是隔行掃描,每一場只包括奇數行或者是偶數行的視頻圖像數據.緩存后再從緩存器中提取完整的幀圖像,以供后續模塊處理使用.
經過分量轉換后,提取其中的Y灰度分量,送入中值濾波器進行處理.作者設計視頻圖像的采集、顯示等工作都是以27 MHz/像素的速度進行的,因此要求中值濾波器有同樣速率的處理能力,并盡量減少邏輯資源的使用.
另外視頻圖像經過模數轉換后分辨率為480,每秒需處理30幀圖像,因此每秒處理像素數為640×480×30=9.216×106,因此中值濾波器工作在27 MHz時鐘頻率上完全能滿足實時性的要求.

圖3 空域濾波器窗結構
數字電路設計空域濾波器主要有兩個方面模塊需要考慮:一個是圖像掃描模塊,另一個是濾波器功能邏輯模塊,本節介紹圖像掃描模塊的硬件結構.設計中掃描方式是從第1行第1列的第1個像素開始,由左到右讀入1行像素值后再讀取后面1行的像素值,直到整幅圖像所有像素值都讀入.
根據掃描方式,設計的掃描模塊的硬件結構為窗結構,包括9個寄存器,用來存儲9個相鄰區域的像素值.每個時鐘上升沿來臨時,9個寄存器更新存儲的像素值,提供給濾波器功能模塊完成計算.
在掃描過程中,需要考慮1個區域相鄰的9個像素.用空域濾波器掃描1行時,必須提取上2行對應列位置的像素值,因此需要使用緩存器存儲當前行像素值,以提供給下2行掃描時使用.

圖4 緩存器模塊
利用FPGA內部存儲資源,設計了具有FIFO數據結構的緩存器模塊用于存儲行像素值.該模塊按輸入順序依次存儲數據,讀數據時按先進先出的原則讀取.模塊引腳如圖4所示.
當輸入時鐘clk上升沿來時,若時鐘使能信號為高,并且寫使能信號為高時,就將輸入數據data_in存入緩存器;如果讀使能信號為高,便將數據從data_out讀出,在處理時讀入和讀出可以同時進行.設計的模塊還包括full與empty狀態信號,用來監控存儲器使用情況,然而設計1次存儲數據量不會超出存儲空間,因此無需引出這2個狀態信號引腳.
該模塊內部有2個地址計數寄存器,分別記錄讀地址與寫地址.每進行1次讀或寫,對應地址寄存器的值就加1,因此能實現先進先出的功能.當2個地址寄存器的值相等時,說明已讀完緩存器內全部數據,因此為空;當2個地址寄存器值的差為存儲器地址最大值,說明數據已存滿整個存儲器.
當讀或寫地址達到最大值,并要讀取或寫入下一個值時,地址計數器又回到0并重新開始計數.由于系統設計時已經使一次存儲的數據不會超過存儲空間,因此無需考慮寫入的新值會覆蓋有用的舊值的情況.
濾波器功能模塊借鑒奇偶排序進行邏輯設計,給出中值.本設計將需要排序的像素值先分為3組,每組3個元素先進行排序.完成之后再按照每組的min、median和max再分成3組,進行排序.接下來取min組的最大值、median組的中間值和max組的最小值進行排序,排序后的中間值即為所求的中值.具體操作步驟舉例如表1所示.

表1 濾波器功能模塊工作步驟
實驗平臺采用裝有Alter公司Cyclone II FPGA的DE2-70開發板,通過Quartus II并使用verilog語言進行硬件編程;編寫TestBench并用ModelSim仿真,得到如圖5的實驗波形圖結果.
由波形圖5可以看出filter_en使能信號為1時,濾波器開始工作,工作頻率即時鐘頻率為27 MHz.實驗中假設輸入數據流為1、2、3…,可以看到濾波器內部產生像素位置坐標值(pixel_X,pixel_Y),程序中可以設置需要處理的圖像的行數和列數變量.Buffer寫使能wren在開始讀第1個像素時就設置為高電平,將第1行像素存入,在第2行像素開始讀入時讀使能rden置位,讀出第1行的像素值,另一個Buffer工作也同理.從波形圖中可以看到窗內9個像素寄存器的值.data_out是將9個像素值進行排序后的中值,可以看到輸出的值確實是9個值的中值,工作正常.
另外通過Quartus II的Compilation Report可以看出濾波器只使用了741個邏輯資源.由濾波效果圖(圖7)可見,濾波器減少了視頻圖像的椒鹽噪聲.由于濾波器窗較小,部分噪聲肉眼很難分辨,然而對于后續其他數字圖像處理工作來說,微小顆粒噪聲的減少具有非常重要的意義.

圖5 ModelSim仿真結果

圖6 邏輯資源使用情況

圖7 濾波效果圖
本文作者首先介紹了相關理論背景,隨后在FPGA中設計并實現了中值濾波器.主要介紹了整個系統的架構,中值濾波器架構以及仿真實現和濾波效果圖.系統主要由輸入輸出控制模塊、FIFO、格式轉換相關模塊和中值濾波器模塊組成,中值濾波器由掃描模塊和功能邏輯模塊組成.實驗數據符合設計要求,達到了節約邏輯資源和加快處理速度的目的.
圖像濾波的器的硬件設計在占用資源和速度上想要得到進一步的改進,還需要在濾波器的掃描模塊結構和濾波器功能邏輯模塊所使用的算法上進行深入研究分析.如掃描結構上可以將窗加大成3結構,用2個功能邏輯模塊并行計算,加快處理速度.也可以將窗做成4結構進行垂直掃描,不但加快速度,對Buffer大小要求也得到降低;濾波器功能模塊的改進主要是對排序算法上的優化來實現,可以使用多個周期進行排序處理,以降低邏輯資源的使用.也可以使用排序寄存器的方法,即當新像素加入窗時,它與窗內每個像素值都進行比較,來決定并調整它在窗內的位置[6-8].
參考文獻:
[1] BAILEY D G.Design for embedded image processing on FPGAs[M].Singapore:Wiley-IEEE Press,2011.
[2] BENKRID K,CROOKES D,BENKRID A.Design and implementation of a novel algorithm for general purpose median filtering on FPGAs [C]∥International Symposium on Circuits and Systems,Phoenix Arizona:IEEE Press,2002.
[3] BOUDABOUS A,BEN A,KADIONIK P,et al.HW/SW FPGA implementation of vector median filter[C]∥Proceedings of the 2007 Ph.D Research in Microelectronics and Electronics Conference,Bordeaux:IEEE Press,2007.
[4] 吳玉蓮.圖像處理的中值濾波方法及其應用[D].西安:西安電子科技大學,2006.
[5] 宋洋.圖像處理的中值濾波算法優化與實現[D].北京:北京郵電大學,2001.
[6] 湯亞玲,秦鋒.高效快速排序算法研究[J].計算機工程,2011,37(6):77-78.
[7] 秦玉平,馬靖善.一種改進的計數排序算法[J].渤海大學學報,2010,31(2):174-176.
[8] 汪紅,田莎莎,丁林.基于FPGA的圖像中值濾波器設計[J].微型機與應用,2012,31(13):46-48.