華中光電技術研究所——武漢光電國家實驗室 朱祥路 丁 捷
?
基于FPGA實現的圖像中值濾波算法
華中光電技術研究所——武漢光電國家實驗室朱祥路丁捷
【摘要】中值濾波是數字圖像處理中一種常用的濾波技術,對噪聲有良好的處理效果。利用FPGA并行處理架構的特點,詳細介紹了一種在FPGA上實現對紅外圖像進行中值濾波處理的方案。實驗結果表明,該濾波方案運用在紅外成像系統中能有效抑制圖像噪聲,改善圖像質量。
【關鍵詞】中值濾波;圖像處理;FPGA
圖像濾波是數字圖像處理的一個基本內容,在盡量保留圖像細節特征的條件下對目標圖像的噪聲進行抑制,是圖像預處理中不可缺少的操作,其處理效果的好壞將直接影響到后續圖像處理和分析的有效性和可靠性。
任何一幀由探測器輸出,只是經過模數轉換后的原始紅外圖像都不可避免的包含噪聲。噪聲產生原因是十分復雜的,有器件內部的原因,例如紅外探測器中感光單元的顆粒噪聲、A/D模塊的量化噪聲、信號讀出電路的附加噪聲等;同時也存在外部原因,紅外背景輻射的光子起伏、信號傳輸信道收到的外部干擾等。這些噪聲一定程度上降低了圖像質量,嚴重時可能導致關鍵信息丟失,給后續的圖像分析增加了較大麻煩[1]。
為了減少和消除這些噪聲,圖像濾波必不可少。中值濾波是常用濾波技術中的一種,是一種非線性的空間濾波器,它的響應基于圖像掩模包圍的圖像區域中像素的排序,然后用統計排序結果決定的值代替中心像素的值,具有運算簡單、速度快、除噪效果好等優點[2-3]。
中值濾波是針對圖像中每個像素的鄰域,取出鄰域內所有像素點的灰度值并將這些灰度值排序,取出中間值作為鄰域中心像素點的新灰度值[4]。
定義一個點的鄰域是利用正方形或矩形的子圖像。如圖1所示,(x,y)點的鄰域即是圖像中以(x,y)點為中心3×3尺寸的正方形子圖像,這個子圖像稱之為濾波器或掩模。掩模的長與寬并不固定,對于m×n的掩模,m與n都應是奇數,且有意義的最小掩模尺寸為3×3。以3×3掩模為例,在原圖像中逐點移動掩模,在每一個(x,y)點處都可得到掩模下對應的原圖像像素,即(x-1,y-1),(x-1,y),(x-1,y+1),(x,y-1),(x,y),(x,y+1),(x+1,y-1),(x+1,y),(x+1,y+1)。將這些點按照其灰度值的大小進行排序,取中間的值作為中值濾波后點(x,y)的灰度值。

圖1 圖像中(x,y)點3x3掩模
中值濾波器去除的是那些相對于鄰域像素更亮或更暗的孤立像素點,對于較大的像素集影響較小。因此在紅外圖像處理中,中值濾波器能很好的去除噪聲,對圖像中目標或背景這些區域較大的像素集影響則非常小。
紅外圖像的預處理包含了非均勻性校正、濾波與壞元處理,本系統中都由FPGA完成。FPGA模塊是整個系統的核心部分,需要完成對紅外探測器經過A/D轉換后輸出圖像的采集、圖像非均勻性校正、圖像濾波、壞元處理、DSP控制、外部SRAM乒乓操作、字符疊加、十字絲顯示等功能。中值濾波算法的實現主要由3×3掩模功能與中值排序功能模塊完成,圖像數據經過非均勻性校正后進入濾波模塊,先通過3×3掩模功能單元在FPGA同一刻時鐘下輸出掩模下的所有數據,然后數據經過中值排序單元完成排序,最后輸出掩模中的中值。
3.13×3掩模模塊
在本設計中,輸入圖像的像素時鐘同時也作為FPGA的主頻時鐘。當圖像數據輸入中值濾波模塊,在每個時鐘下掩模模塊都會輸出以此刻輸入像素點(x,y)為中心3×3范圍內的9個值。隨著圖像輸入,(x,y)點會逐點遍歷圖像的每個點。
視頻的圖像數據來源為某國產線陣制冷紅外探測器,其輸出形式是將14位的圖像數據一列一列順序輸出。3×3尺寸的掩模至少需要圖像相鄰的3列數據才能進行運算,因此在FPGA中對視頻圖像數據進行實時處理時,需要建立一個圖像的存儲緩沖機制,為提取圖像中值運算及時準確的提供圖像數據。
FPGA內部提供了fifo與ram兩種存儲單元,本文采用的是用fifo來對圖像每列數據進行緩存。由于要從相鄰的3列數據中每列讀取相鄰的3個數,而且需要保證掩模模塊輸出的數據對齊,因此使用3個fifo儲存列數據,3組寄存器存儲每列相鄰的數。

圖2 3×3掩模模塊框圖
如圖2所示,將fifo進行串接,圖像的每列數據依次進入fifo1、fifo2、fifo3,且一個fifo只存儲一列圖像。當新的一列數據開始進入到fifo1時,從fifo1中讀出數據到fifo2,fifo2中的原數據則讀入到fifo3。fifo1存儲完一列新數據時,fifo2中則保存了圖像上一列數據,fifo3中存儲了上上列數據,這樣以保證3個fifo中剛好存有圖像相鄰的3列數據。在更新fifo的同時,數據寫入到寄存器中。從每個fifo中出來的列數據都依次被讀入3個寄存器,用來存儲一列數據中相鄰的3個像素值,這9個寄存器中的數據即對應圖像3×3鄰域中的像素值。在某時鐘時刻下各個寄存器中的值與3×3掩模對應的關系如圖3所示。

圖3 掩模與寄存器對應關系圖
data22即為3×3掩模中心點的灰度值,當該點是圖像邊緣的像素時,9個寄存器中的數據會有無效值的存在,故無法滿足計算中值的條件。在這種特殊情況下,中值濾波的結果直接輸出原圖像本身的灰度值。
3.2中值排序
一般常用的排序算法有插入排序、希爾排序、選擇排序、堆排序、冒泡排序等,通常這些算法在上位機上運行時,時間復雜度較高,運算量較大,很難滿足圖像實時處理的要求。在FPGA中可利用流水線操作與并行處理的優勢,將3×3掩模中每列每行的數據先單獨排序,然后得出中間值,排序過程如圖4所示:

圖4 中值排序流程
將3×3掩模模塊輸出的9個數據各列先進行排序,然后各行再排序,再對對角線上5、4、6三個數據排序,最后中心位置上的值5即為中間值。
在FPGA中實現算法時,各列或各行中3個值可以先比較其中兩個值的大小,比較結果中的較小的值再與第三個值比較,第二輪比較結果中的較小值即為單行或單列中的最小值,第二輪中的較大值與第一輪比較中的較大值再進行第三輪比較,結果的最大值即為3個數中的最大值,較小值即是中間值。如圖5所示。

圖5 三個數排序流程
上述操作進行了3次比較,在FPGA中用3個clk即可完成排序。將此排序模塊作為求中值排序的基本單元,總共需要進行3輪排序。如圖6,第一輪進行列數據排序,三列數據分別進行排序,可以得到3組較大值、中間值、較小值。第二輪進行行數據排序,行排序其實就是用上一輪得到的較大值作為一組數據排序,中間值作為一組數據排序,較小值作為一組數據排序。第三輪則用第二輪中較大值排序得出的最小值、中間值排序得出的中間值與較小值排序得出的較大值,三個值進行比較排序,得出的結果及為整個中值排序所求的值。

圖6 中值排序模塊框圖
在本設計中,FPGA選用的是Altera公司型號為EP3C120F780I7N的工業級FPGA。在開發環境Quartus下使用Verilog HDL語言完成設計,并對其功能與時序進行了驗證、仿真。使用Camlink采集卡采集經過FPGA處理后的紅外視頻圖像,并在PC機上進行實時播放顯示。分別對未經過中值濾波處理與經過中值濾波處理之后的視頻截圖,截取局部圖像進行對比,如圖7所示。

圖7 濾波前(左)后(右)對比圖像
從以上圖像對比可以看出,未經中值濾波處理的圖像由于探測器或前端線路干擾噪聲的緣故導致圖像上會偶爾出現閃爍的奇異點,而經過中值濾波處理后的圖像則不存在此種現象,濾波去除噪聲的效果良好。
另外,3×3掩模模塊因為需要預先暫存第一列圖像數據,會導致數據處理延時增加。在本系統中,圖像數據的列同步信號周期為20μs,FPGA主頻時鐘為54.4MHz,可知理想狀況下,對實時采集的圖像進行中值濾波處理時,會造成不到21μs的延時(3×3掩模模塊延時約20μs,中值排序模塊延時約0.17μs),人眼基本感覺不到。所以該濾波方案在不會大量增加圖像處理延時的基礎上,極大改進了圖像的質量,提升了紅外成像系統的性能。
圖像濾波是紅外圖像處理中的重要組成部分,本文詳細介紹了中值濾波的算法原理,并從工程應用角度出發,將算法在FPGA中進行了實現,并對其實現的方式進行了詳細的說明。實驗結果表明,采用中值濾波的方式能有效去除紅外圖像中的奇異點,提升圖像質量,并且實現方式簡單,運算速度快,資源消耗低。
參考文獻
[1]胡耀祖.紅外圖像預處理算法研究[D].武漢:武漢理工大學,2008.
[2]李飛飛,劉偉寧,王艷華.改進的中值濾波算法及FPGA快速實現[J].計算機工程,2009,35(14):175-177.
[3]章毓晉.圖像工程[M].第三版.北京:清華大學,2013: 65-69.
[4][美]Rafael C.G,Richard E.W.Digital Image Processing[m],第二版.阮秋琦譯注.北京:電子工業出版社,2009:91-98.