李勇 袁林



摘 要:以Altera的QuartusⅡ為開發平臺,在FPGA芯片中設計實現3×3窗口中值濾波器,結合選定的中值濾波算法,主要針對在進入比較單元前的數據讀取部分進行優化設計,提出了構建雙極隨機存儲器BRAM實現數據讀取和構建D觸發器實現數據串入并出兩種數據讀取設計。
關鍵詞:FPGA;中值濾波;數據讀取;BRAM;D觸發器
中圖分類號:TN919 文獻標識碼:A
Abstract:Based on the FPGA- platform for application software design and implementation QuartusⅡ made the 3×3 window median filter.The design combined with selected median filtering algorithm, mainly for the data read section before entering the compare unit to optimize the design,proposed to explain the two kinds of data read design which build a bipolar random BRAM memory data read and build data string into the D flip-flop.
Keywords:FPGA;median filtering;data read;BRAM;D flip-flop
1 引言(Introduction)
非線性對自然界的描述更接近于實物的本原,因而其處理效果更加準確[1]。中值濾波是一種非線性濾波,中值濾波器在應用于去除脈沖噪聲方面具有獨特的優勢,中值濾波算法也在向運算次數更少、運算時間更短、更高效的目標邁進。FPGA也正因為它的高集成,高性能,高靈活性,低功耗和低價格被廣泛應用在科技產品的開發上。本文基于Cyclone EP1C6Q240C8的FPGA硬件平臺,應用Altera公司的Quartus II開發軟件來對濾波器設計實現,主要結合改進的中值濾波算法研究在比較單元處理之前圖像數據讀取的微觀設計。
2 中值濾波器的中值濾波算法(The median filtering algorithm of median filter)
傳統中值濾波算法的實現是對窗口內像素點值進行全排序,排序的過程是對像素作比較和交換的過程,比較次數是影響排序速度的重要原因[2]。例如對包含m(奇數)個像素數的窗口數列需要經過m(m-1)/2次比較,而第(m+1)/2比較的得值即為中值,整個過程的時間復雜度是O(m2)。假若處理一副352×288的灰度圖像,采用3×3方形窗口得出一個中值需比較36次,這對于將要處理的101376個像素值來講從運算量和處理時間方面都將是很大的負擔。
改進的中值濾波算法有三步:第一步,對3×3窗口每行采取由小到大比較排列,因每行進行三次比較,共需比較九次,記錄出每行的小、中、大值;第二步,再對各列采取縱向由小到大比較排列,也需比較九次得出行最小值中的最大值,行中間值中的中值,和行最大值中的最小值;第三步,對前一步得出的三個值比較得出的中間值就是整個窗口數列的中值。
如表1所示結果,實驗在windows環境下(intel i5-3470 4G內存)采用Borland C++ Builder6.0編程驗證常規中值濾波算法和改進的中值濾波算法,改進中值濾波算法在處理速度上較常規中值濾波算法具有較大優勢。本文中值濾波器根據實時性要求等綜合考慮采取改進的中值濾波算法,有利于精簡比較次數,減少處理時間和資源消耗。
3 基于FPGA的中值濾波器的設計綜述(Summary of median filter design based on FPGA)
首先編制中值濾波器的HDL或原理圖輸入,并使用行為級仿真及時糾錯;其次,綜合分析成本、處理速度、實現效果和功耗等因素生成數字邏輯連接;再次,進行邏輯布線,進一步使用Modelsim進行仿真修正,若仍無法修改的則可返回上一步再次綜合,反復修正直至得出較滿意的布局布線;然后,時序分析,為各器件分配適合的時序,采用時序仿真,并反復校正已達到逼近時序的理想設置,確保時序分配不沖突;最后,以PS或JTAG方式把bit文件載入FPGA芯片。中值濾波器的工作分為三大塊,第一部分為讀取數據,讀入數據到3×3滑動窗口中,再將數據分別放入寄存器中,這部分涉及到BRAM、D觸發器、計數器和SRAM等邏輯部件;第二部分為比較單元,主要有行比較、列比較和對角線比較,它主要涉及三點比較器、觸發器等;第三部分為記錄中值并輸出。
4 中值濾波器在FPGA實現中的數據讀取設計 (The design of median filter data read in FPGA implementations)
4.1 構建雙極隨機存儲器BRAM實現數據讀取
因濾波器使用3×3窗口,所以在EP1C6Q240C8板上擴展構建32×25344的大BRAM一塊(將在VGA顯示器上呈現一幀352×288像素大小的圖像)和8×352的小BRAM三塊。從大BRAM到小BRAM每次僅讀出1個數據,待所有數據都讀完會消耗大量時序,因此為實現高效利用,將數據在小BRAM中寄于蓄勢待發的狀態,即第一行BRAM1、第二行BRAM2的數據全部讀入,同時第三行BRAM3的前兩個數據輸入的狀態。只要BRAM3的第三個數據一到位,立刻使3×3窗口“充滿”,使寄存器的九個數據同時送入數據比較單元。類推下去,當BRAM3的第4個數據讀入時,此時已“充滿”的窗口等同于向右側滑動了一個數據單位。以此類推,BRAM3讀滿以后再次從BRAM1開始讀入數據,用新的數據覆蓋舊數據,BRAM1的前兩個數據輸入后即進入準備狀態。當BRAM1的第三個數據一到位,立刻使3×3窗口“充滿”,使寄存器的九個數據同時送入數據比較單元。三個小BRAM送左往右同一位置數據縱向合為一個數據組送入對應順序的三個寄存器中,為了使控制器清楚工作的三個寄存器的位置,可以設置計數器進行0、1、2的循環將九個寄存器的三組進行對應。如此反復,周而復始。
4.2 構建D觸發器實現數據從SRAM的串入并出
SRAM具有處理時間快、工作效率高等特點,在與FPGA配設時存取了待處理的圖像數據。FPGA因一個時鐘周期僅讀取一個數據,采用串入并出不失為一副良策。如圖3所示,設計了12個D觸發器與一個三進制計數器,計數器可以0—2計數,當記錄讀取了三個值后D觸發器工作,相當于移位寄存器第一列推入第二列,層層遞推,以致第二、三、四列D觸發器形成的3×3窗口的九個數據輸出,進入比較單元。另當有新的一列三個數據輸入后,相當于窗口靠右滑動了一個單位。這種數據串行輸入、并行輸出有助于縮短數據的處理時間,特別能夠滿足實時圖像的處理的需要。
5 結論(Conclusion)
基于FPGA實現對中值濾波器的設計開發需要考慮算法、軟硬件資源條件等復雜因素,結合工程實踐情況在對比較單元前的數據讀取部分,因地制宜提出了構建雙極隨機存儲器BRAM實現數據讀取和構建D觸發器實現數據串入并出兩種數據讀取設計,數據讀取的質量和速度都較為理想。本設計較為實用,適宜相互學習、交流和研究。
參考文獻(References)
[1] 程卓.基于采樣的非線性濾波方法綜述[J].軟件工程師,2010(6):45-47.
[2] 李新春,趙璐.基于中值濾波算法濾波器的FPGA實現[J].計算機系統應用,2011,20(9):82-83.
[3] Suil K P,Mahapatra K K.A lossless image compress techniqueusing simple arithmetic operations and its FPGA implementation[C].ICIT 2006 IEEE International conference,America,2006:2211-2216.
作者簡介:
李 勇(1982-),男,碩士,講師,技師.研究領域:電子與通信工程.
袁 林(1978-),女,碩士,講師,技師.研究領域:計算機應用.