摘 要:為了實現(xiàn)圖像的實時處理,常采用現(xiàn)場可編程門列陣FPGA對采集的數(shù)字圖像做預處理,在討論中值濾波算法原理的基礎上,利用VHDL硬件描述語言設計一個中值濾波模塊對輸入圖像進行去噪處理,仿真結果說明該算法滿足實時性要求,取得較好的仿真效果,并對中值濾波的改進算法進行了討論。
關鍵詞:現(xiàn)場可編程門列陣(FPGA);VHDL;圖像處理;中值濾波
中圖分類號:TP391文獻標識碼:B
文章編號:1004-373X(2008)22-099-03
Hardware Implementation of Median Filter Based on FPGA
LI Yangbo,ZHAO Buhui
(School of Electrical and Information Engineering,Jiangsu University,Zhenjiang,212013,China)
Abstract:To realize the real-time image processing,people often uses FPGA to do image preprocessing with collected digital image.On basis of discussing the principle of median filter algorithm,this paper uses VHDL language and designs a module of median filter to remove the impulse in input image and gains a real-time request and good result.At the end of the paper,it discusses the improved realization of the algorithm.
Keywords:FPGA;VHDL;image processing;median filter
圖像在生成,傳輸過程中常會受到各種噪聲源的干擾和影響,為了抑制噪聲,改善圖像質量,在對圖像進行分析前需要對圖像進行濾波、平滑等處理。底層圖像預處理算法的特點是數(shù)據(jù)量比較大,而運算結構相對較規(guī)律,用一般的軟件實現(xiàn)會比較慢。由于FPGA含有豐富的邏輯單元,很容易實現(xiàn)各種電路設計和完成較復雜的運算,對于不同的圖像處理要求,只需要用軟件修改FPGA內部的邏輯功能即可。故對于實時性要求較高的系統(tǒng),利用FPGA實現(xiàn)底層算法是理想選擇之一。本文即以中值濾波算法為例,介紹基于FPGA的圖像處理算法的硬件實現(xiàn)。
1 中值濾波原理
中值濾波器是在1971年由J.w.Jukey首先提出并應用于一維信號處理技術(時間序列分析)中,后來被二維圖像信號處理技術所引用。 中值濾波是一種能有效地抑制圖像噪聲而提高信噪比的非線性濾波技術。它是把鄰域中的像素按灰度級進行排序,然后選擇該組的中間值作為輸出像素值。用公式表示為:
g(x,y)=median{f(x-i,y-j)}(i,j)∈S
上式中g(x,y),f(x,y)為像素的灰度值;S為模板窗口。對于不同的圖像內容和不同的應用要求,往往采用不同的模板窗口,其中常用的有3×3模板和5×5模板。采用3×3模板擁有耗時短,資源省的優(yōu)點,而采用5×5模板能獲得更好的處理效果。本設計通過en1使能端口可在3×3模板和5×5模板之間切換,來滿足設計的不同需求。
與最小均方濾波器以及其他線性濾波器相比,中值濾波器對濾除脈沖干擾及圖像掃描噪聲很有效,同時又能夠保護目標圖像邊緣,而且在實際運算過程中并不需要圖像的統(tǒng)計特性,這也帶來不少方便。
2 實現(xiàn)方案
本設計以Altera公司的Quartus Ⅱ軟件為開發(fā)平臺,處理圖像為8位的灰度圖像,為了節(jié)省仿真時間,本設計假定圖像每行的像素個數(shù)為20。其總體設計方案如圖1所示。
圖1 總體設計方案
由圖1可知,整個系統(tǒng)可分為2大模塊:
3×3(5×5)模板生成模塊和圖像數(shù)據(jù)比較模塊。3×3(5×5)模板生成模塊處理圖像的某個像素和其鄰域像素,經過中值濾波算法排序后,得出其中值像素來取代原3×3(5×5)窗口中間位置的像素值。之后3×3(5×5)模板生成模塊將不斷右移或換行,直到將一幅灰度圖像的數(shù)據(jù)陣列中的所有像素全部處理完。圖1中 D(7..0)為灰度圖像數(shù)據(jù)輸入端,DOUT(7..0)為圖像數(shù)據(jù)輸出端,ENO為輸出數(shù)據(jù)有效標志,整個系統(tǒng)有統(tǒng)一的時鐘信號clk和復位信號rst。下面分別介紹各模塊功能和設計方法。
(1) 3×3(5×5)模板生成模塊。
該模塊原理框圖如圖2所示。
圖2 3×3(5×5)模板電路原理圖
圖2中r代表移位寄存器;FIFO代表先進先出存儲器,它是一種特殊功能的存儲器,數(shù)據(jù)以達到FIFO輸入端口的先后順序依次存儲在存儲器中,并以相同的順序從FIFO的輸出端送出,所以FIFO不需要讀/寫地址線。圖像數(shù)據(jù)以時鐘節(jié)拍從數(shù)據(jù)輸入端依次串行輸入,F(xiàn)IFO用來存儲1行的數(shù)據(jù),以便使w11,w12,… ,w55正好是3×3(5×5)模板所對應的圖像數(shù)據(jù),當模塊使能端en1為1時,該模塊是5×5模板窗口,當en1為0時,r14,r15,r23,r24,r33,r34,F(xiàn)IFO C及其以后的各觸發(fā)器和存儲器均為直接通路狀態(tài),此時該模塊為3×3模板窗口。本設計中設定FIFO深度為20 ,寬度為8位。當設定FIFO存儲器寫滿時,才允許讀操作。這樣當數(shù)據(jù)流不斷從數(shù)據(jù)輸入端輸入時,3×3(5×5)模板對應的圖像數(shù)據(jù)不斷跟著變化,這就可以對一幀圖像的所有像素都進行3×3(5×5)模板處理。
(2) 數(shù)據(jù)比較模塊。數(shù)據(jù)比較模塊的基本原理是對3×3(5×5)模板中的圖像灰度值進行排序,然后將中值輸出,本設計采用了軟件設計中冒泡排序法的設計思想,它是最基本的排序算法,原理非常簡單,只是一個2層循環(huán),每次將最大或最小的數(shù)放到數(shù)組最后。其3×3模板排序部分代碼如下,其中en1使能端為0,m用來控制每次循環(huán)中比較的次數(shù),n控制循環(huán)次數(shù)。
architecture comp1 of comp1 is
type mask is array(24 downto 0) of std_logic_vector(7 downto 0);
signal t: std_logic_vector(7 downto 0);
signal m,n:integer;
begin
process
variable a:mask;
variable T:std_logic_vector(7 downto 0);
begin
wait until rising_edge(clk);
if en1=′0′ then
a(0):=(conv_std_logic_vector(w11,8));
a(1):=(conv_std_logic_vector(w12,8));
a(2):=(conv_std_logic_vector(w13,8));
a(3):=(conv_std_logic_vector(w21,8));
a(4):=(conv_std_logic_vector(w22,8));
a(5):=(conv_std_logic_vector(w23,8));
a(6):=(conv_std_logic_vector(w31,8));
a(7):=(conv_std_logic_vector(w32,8));
a(8):=(conv_std_logic_vector(w33,8));
if en=′1′ then
for n in 1 to 8 loop
for m in 8 downto n loop
if (a(m) < a(m-1)) then
T:= a(m);
a(m):=a(m-1);
a(m-1):=T;
end if;
end loop;
end loop;
median<=(conv_integer(a(4)));
eno<=′1′;
else median<=0;
eno<=′0′;
end if;
else …
3 仿真結果
本設計中3×3中值濾波模塊在Quartus Ⅱ上的仿真結果如圖4所示。設定圖像每行像素為20 ,初始化后需先掃描2行像素,經過43個時鐘周期后可以獲得圖像的中值濾波結果輸出。eno使能端置為1 ,從而允許下一級模塊讀取結果。若采用5×5中值濾波模塊,則在97個時鐘周期后得到中值濾波的結果輸出。
圖3 中值濾波模塊仿真結果
4 改進的中值濾波算法
中值濾波算法核心是排序,排序算法的優(yōu)劣直接決定了求取中間值的效率,從而決定濾波器的整體性能。基于硬件的排序算法設計可以充分地利用硬件平臺的并行性特點,從而達到加快處理速度目的。下面分析3×3窗口圖像數(shù)據(jù)的數(shù)學模型,說明中間值的求取過程,并與原始的冒泡排序法相比較。對于3×3 窗口圖像數(shù)據(jù),首先分別對窗口中的每一行計算最大值、中值、最小值,這樣一共可以得到9個數(shù)值,分別包括3個最大值、3個中值、3個最小值;
第一行的最大值:Max1=max[w11,w12,w13];第一行的中值:Med1=med[w11,w12,w13];第一行的最小值:Min1=min[w11,w12,w13];
依此類推:Max2=max[w21,w22,w23];Med2=medw21,w22,w23];Min2=min[w21,w22,w23];Max3=max[w31,w32,w33];Med3=med[w31,w32,w33];Min3=min[w31,w32,w33];式中,max表示取最大值,med表示取中值,min表示取最小值。
不難判斷,在9個數(shù)值中,3個最大值中的最大值和3個最小值中的最小值一定是9個像素中的最大值和最小值;3個中值中的最大值至少大于5個像素,即本行中的最小值、其他2行的中值及最小值;而3個中值中的最小值至少小于5個像素,即本行中的最大值、其他2行的中值及最小值。最后,比較3個最大值中的最小值Min_of_Max,3個中值中的中值Med_of_Med,3個最小值中的最大值Max_of_Min,得到的中間值即為濾波的最后結果 Med_of_nine。與用冒泡排序法設計的模塊相比,中值濾波模塊在Quartus Ⅱ下的仿真中算法占用資源如表1所示。
表1 改進前后濾波器性能比較
名稱3×3模塊,冒泡排序法3×3模塊,改進算法
Total logic elements921/33 216(3%)610/33 216(2%)
Total registers138228
Total pins20/475(4%)20/475(4%)
Total memory bits320/483 840(<1%)320/483 840(<1%)
延時(時鐘周期)4347
5 結 語
本設計成功地實現(xiàn)了中值濾波算法的仿真,只要改動參數(shù)值便可實現(xiàn)對不同灰度級、不同尺寸的圖像進行處理。對于不同的處理要求,也可通過選擇端在3×3模板窗口和5×5模板窗口之間選擇,而且在本設計中的3×3(5×5)模板生成模塊可復用于邊緣檢測、數(shù)學形態(tài)學處理等用到掩模的處理算法中,對于在FPGA上開發(fā)圖像處理的其他算法具有很好的借鑒作用。
參考文獻
[1]朱明,魯劍鋒.基于DSP+FPGA結構圖像處理系統(tǒng)設計與實現(xiàn)[J].計算機測量與控制,2004,12(9):866-869.
[2]陳家新,黎蔚,倪福榮,等.FPGA在圖像處理中的應用[J].洛陽工學院學報,2001,22(1):51-53.
[3]賈云得.機器視覺[M].北京:科學出版社,2000.
[4]延明.FPGA在數(shù)字圖像處理中的應用.電子技術,2005(1):74-76.
[5]Altera Corporation,Quartus Ⅱ Version 6.0 Handbook.http://www.Altera.com.
[6]GavinV L.Bates,Saeid Nooshabadi.FPGA Implementation of a Median Filter.IEEE Tencon-Speech and Image Technologies for Computing and Telecommunications,1997:437-440.
[7]Castleman K R.數(shù)字圖像處理[M].北京:電子工業(yè)出版社,1998.
[8]蘇光大.圖像并行處理技術[M].北京:清華大學出版社,2002.
[9]徐勝榮,張健.實時中值濾波硬件實現(xiàn)的研究[J].電子測量與儀器學報,1993:45-51.
[10]吳繼華,王誠.Altera FPGA/CPLD設計(基礎篇).北京:人民郵電出版社,2005.
[11]吳繼華,王誠.Altera FPGA/CPLD設計(高級篇).北京:人民郵電出版社,2005.
作者簡介
李洋波 男,1983年出生,碩士研究生。主要研究方向為基于FPGA的圖像處理算法的硬件實現(xiàn)。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文