武繼瑞 劉澤
摘 要: 中值濾波在圖像預(yù)處理階段有著重要的應(yīng)用,尤其是對于圖像中脈沖噪聲的濾除。傳統(tǒng)的中值濾波算法都是通過對原數(shù)據(jù)按照大小排序,然后才能取出中值。但隨著窗口尺寸的擴大,因數(shù)據(jù)增多而造成比較次數(shù)的激增,這成為制約大窗口中值濾波器實時性的一個瓶頸。針對這一問題,該文提出一種基于FPGA的25輸入的實時中值濾波器的設(shè)計方法。無需對原數(shù)據(jù)進行大小排序,而是根據(jù)各比特平面的信息,重新生成一個中值,特別適合于FPGA實現(xiàn)。設(shè)計專用的位處理單元,簡化了電路結(jié)構(gòu)。通過三級查找表的方式,解決“多數(shù)表決器”耗時長的問題。實驗結(jié)果表明,濾波器資源占用少,數(shù)據(jù)吞吐率高,延遲小,可滿足任何窗口形狀的濾波要求。
關(guān)鍵詞: 中值濾波; 數(shù)字濾波器; 圖像處理; FPGA
中圖分類號: TN713?34 文獻標識碼: A 文章編號: 1004?373X(2016)06?0117?03
Design of real?time big?window median filter based on FPGA
WU Jirui, LIU Ze
(Institute of Optics and Electronics, Chinese Academy of Sciences, Chengdu 610209, China)
Abstract: The median filtering has important application in image preprocessing stage, especially for filtering of impulse noise in image. The traditional median filtering algorithm is used to sort the original data according to its size to extract the median. The enlarged window size and increasing data cause the dramatical increase of comparison times, which becomes the bottleneck to restrict the real?time performance of big?window median filter. For this problem, a design method for the real?time median filter with 25 inputs based on FPGA is presented. It is unnecessary to sort the original data, but a new median is generated according to the information of each bit plane, which is particularly suitable for the filtering implementation based on FPGA. A special bit?processing unit was designed to simplify the circuit structure. The method of three?level lookup table can solve the time?consuming issue of “majority voter”. The experimental results show that the proposed filter has less sources occupation, high data throughput and short time delay, and can satisfy the filtering requirement of any window shapes.
Keywords: median filtering; digital filter; image processing; FPGA
中值濾波作為一種統(tǒng)計排序濾波在圖像增強中有著廣泛的應(yīng)用,尤其對于脈沖噪聲的濾除[1],它提供了一種優(yōu)秀的去噪能力,且相比于同尺寸的線性平滑濾波,其能夠帶來更小的圖像模糊。如今,對于3×3小窗口的中值濾波算法[2?3],已有眾多研究,技術(shù)比較成熟。然而對于大窗口的中值濾波,因數(shù)據(jù)增多,造成比較運算次數(shù)成幾何級數(shù)激增,這成為制約大窗口中值濾波實時性的一個瓶頸。為降低比較次數(shù),文獻[4?5]提出了基于均值加速和均值查找的濾波算法,然而計算均值本身就十分耗時,且從原始數(shù)據(jù)中取出中值需要幾個時鐘周期并不確定,不便于用硬件來實現(xiàn)。文獻[6]提出了一種不完全排序的算法,但對于5×5的濾波窗口,依然需要多達108次比較運算,20級延遲,才可計算出中值。文獻[7]提出了一種基于多級分組排序的濾波算法,把比較次數(shù)降低到了84次,只需要6級延遲即可取出中值,但這卻是以犧牲數(shù)據(jù)吞吐率為代價的,無法滿足更高速度的處理要求。有鑒于此,本文以FPGA為平臺,設(shè)計了一種基于比特平面的中值濾波器,對原數(shù)據(jù)并未進行大小排序,而是根據(jù)各比特平面的數(shù)據(jù)結(jié)構(gòu),重新生成了一個中值;該濾波器對窗口形狀無限制,對相鄰區(qū)域數(shù)據(jù)無依賴,吞吐率高,延遲小,可滿足高速、實時的濾波要求。
1 中值濾波原理
1.1 中值濾波基本原理
中值濾波的基本原理是對圖像中某一像素點周圍鄰域的像素按照灰度級大小排列,并選取中間值代替該點像素值,以達到濾除噪聲的效果。其濾波窗口根據(jù)具體需求可選擇方形、十字形等。對于邊緣像素點,濾波窗口可能覆蓋到圖像外側(cè)無效數(shù)據(jù)。對此,一般的處理方式是對無效數(shù)據(jù)填充數(shù)據(jù)0或?qū)吘墧?shù)據(jù)不進行濾波處理。
1.2 基于比特平面的中值濾波原理
本文以8位寬、5×5窗口的中值濾波器為例,說明基于比特平面的設(shè)計方法。對于任意8位寬的數(shù)據(jù),可表示為如下形式:
[27b7+26b6+25b5+24b4+23b3+22b2+21b1+20b0]
式中:[bi=0或1;i=0,1,2,…,7。]
于是可將25個輸入數(shù)據(jù)分別表示成如下行向量的形式:
[xTi=bi,7,bi,6,bi,5,bi,4,bi,3,bi,2,bi,1,bi,0]
式中:[i=1,2,…,25。]
記矩陣:
[A=xT1xT2 ?xT25=b1,7b1,6…b1,0b2,7b2,6…b2,0????b25,7b25,6…b25,0=y7,y6,…,y0]
設(shè)中值所對應(yīng)的行向量表達式為
[mT=λ7,λ6,λ5,λ4,λ3,λ2,λ1λ0]
記函數(shù)
[?(yj)=1,向量yj中1的個數(shù)比0多0,向量yj中0的個數(shù)比1多]
式中:[j=7,6,…,0。]
為了確定向量[mT]中各元素的值,可通過如下步驟計算:
(1) 若25個原輸入數(shù)據(jù)中,最高比特位1的個數(shù)比0多,則中值的最高比特位必然也為1,反之則為0,有:
[λ7=?(y7)]
(2) 假若[λ7=0],對于向量[xTi],若有[bi,7=1],則[xTi]所代表的數(shù)據(jù)必定大于中值,于是將[xTi]中所有元素全置1,而中值在原數(shù)據(jù)中的大小排序不會改變,以此來確保[λ6]生成的正確性;反之,對于[λ7=1],則將[xTi]中所有元素全置為0。即有:
[xTi=xTi,bi,j=λj1,1,1,1,1,1,1,1,bi,j≠λj,且bi,j=10,0,0,0,0,0,0,0,bi,j≠λj,且bi,j=0]
式中:[i=1,2,…,25;j=7,6,…,1。]
(3) 第(2)步更新完矩陣A后可再計算出[λ6]的值,即:
[λj=?(yj), j=6,5,…,0]
(4) 重復(fù)第(2)步和第(3)步,即可算出中值其他比特位的值。
2 基于比特平面的中值濾波的硬件設(shè)計
2.1 頂層電路結(jié)構(gòu)設(shè)計
為簡化電路結(jié)構(gòu),提高數(shù)據(jù)吞吐率,本文設(shè)計了一個bit_filter單元用來處理一個特定的比特平面。對于8位寬的像素數(shù)據(jù),只需將8個bit_filter單元級聯(lián)起來即可,其中每個bit_filter單元產(chǎn)生中值的一個比特位。為了便于說明,圖1給出了j=5時,bit_filter單元的電路框圖。
圖1 位處理單元框圖
圖1中median_data為產(chǎn)生的中值,有:
median_data_o[7] = median_data_i[7] = [λ7],
median_data_o[6] = median_data_i[6] = [λ6],
median_data_o[5] = [λ5]
對于25個輸入數(shù)據(jù)data1~data25來說,此時最高位和次最高位已不再需要,故輸入端只用了低6位,輸出端只輸出了低5位供下級處理,以此來降低FPGA的資源消耗。其他各層面的bit_filter單元與此類似。
對于8位寬的數(shù)據(jù),若每個時鐘處理一個比特層面,則需要8個時鐘的延遲方可算出中值。為降低延遲,也可以每個時鐘處理2個或4個比特層面,此時只需要4級或2級延遲即可算出中值,但數(shù)據(jù)吞吐率也會隨之降低。
2.2 多數(shù)表決器的快速實現(xiàn)
在bit_filter單元中,[?(yj)]函數(shù)是限制整個系統(tǒng)速度的瓶頸。為解決這一問題,本文采用了三級查找表的方式來快速實現(xiàn)[?(yj)]函數(shù),其頂層電路框圖如圖2 所示。
圖2 多數(shù)表決器電路框圖
首先將[yj]中的25個數(shù)據(jù)分為4組,每組7個,第4組補3個0。其中add7bit單元的作用是統(tǒng)計每組輸入中1的個數(shù),通過調(diào)用三個128深度的ROM來實現(xiàn),每個ROM由兩個6輸入的查找表(LUT6)構(gòu)成,用來輸出一個比特位,將3個ROM的輸出拼接起來即為sum_o(2:0)。vec3addvec3單元的作用是將兩個3位寬的數(shù)據(jù)相加,其實現(xiàn)方式與add7bit類似。第三級采用一個256深度的ROM,將第二級算出的兩個和作為地址,即可直接查找出[?(yj)]的值。經(jīng)測試,在Xilinx 5vlx110tff1136?1芯片上,用該方式實現(xiàn)[?(yj)]函數(shù)共需消耗36個LUT6,計算時間僅需1.654 ns。
3 總體性能比較分析
在FPGA的設(shè)計中,如果單純強調(diào)數(shù)據(jù)吞吐率是沒有意義的,因為總可以通過插入多級寄存器,消耗更多資源來提高工作頻率。根據(jù)前面所述的方法,本文在Xilinx 5vlx110tff1136?1 芯片上設(shè)計實現(xiàn)25輸入的中值濾波器。同時,按照文獻[7]的設(shè)計方法,在同款芯片上也實現(xiàn)了5×5窗口的中值濾波器。數(shù)據(jù)位寬為8,設(shè)計環(huán)境為ISE,綜合工具為XST。表1列出兩種設(shè)計方法在插入不同級寄存器時的性能和資源消耗情況。
表1 兩種中值濾波器性能比較
表1中Algorithm_bit 為本文設(shè)計方法,Algorithm_7 為文獻[7]的設(shè)計方法。表格中第4行為文獻[7]的設(shè)計方法所能達到的最高頻率,但此時需要22級的延遲。而本文的設(shè)計方法只需要8級的延遲就可使數(shù)據(jù)吞吐率達到308 MHz,同時資源消耗比文獻[7]減少了大約40%。而對比前3行的數(shù)據(jù)可以發(fā)現(xiàn),本文的設(shè)計方法在各方面均優(yōu)于文獻[7]。且文獻[7]的濾波器僅適用于方形窗口,而本文設(shè)計的濾波器對窗口形狀無任何限制。
4 結(jié) 語
本文在FPGA上設(shè)計一種基于比特平面的大窗口實時中值濾波器。根據(jù)原數(shù)據(jù)各比特層面的信息重新生成一個中值,而未對原數(shù)據(jù)進行大小排序,減少了資源消耗。為了解決多數(shù)表決器耗時長的問題,本文提出基于三級查找表的快速實現(xiàn)方式,大大提高了數(shù)據(jù)吞吐率。測試結(jié)果表明,采用本文方法設(shè)計的濾波器,資源消耗少,時延小,數(shù)據(jù)吞吐率高,可滿足高速實時濾波的需求。
參考文獻
[1] 岡薩雷斯,伍茲.數(shù)字圖像處理[M].3版.阮秋琦,譯.北京:電子工業(yè)出版社,2011:96?97.
[2] 付昱強.基于FPGA的圖像處理算法的研究與硬件設(shè)計[D].南昌:南昌大學(xué),2006:16?18.
[3] 沈?qū)W利,王肅國.基于FPGA的改進型中值濾波算法研究[J].微電子學(xué)與計算機,2014,31(1):21?24.
[4] 張麗,陳志強,高文煥,等.均值加速的快速中值濾波算法[J].清華大學(xué)學(xué)報(自然科學(xué)版),2004,44(9):1157?1159.
[5] 鮑華,樊瑜波,饒長輝,等.基于均值查找的快速中值濾波算法[J].四川大學(xué)學(xué)報(工程科學(xué)版),2011,43(2):76?79.
[6] 蔣濤,李自勤.基于FPGA的實時圖像中值濾波算法及實現(xiàn)[J].微計算機信息,2012,28(10):196?197.
[7] 羅海波,史澤林,惠穎,等.基于多級分組排序網(wǎng)絡(luò)的實時大窗口二維中值濾波器設(shè)計[J].紅外與激光工程,2008,37(5):935?939.