0 引 言
隨著現代科學技術的發展,圖像處理技術取得了巨大進步,在軟硬件方面都取得了很多突破性成果。近些年來,圖像處理技術被廣泛應用在各個領域,其中也包括艦船等交通領域。由于這些應用領域對其精度和識別的速度都有一定要求,所以,高速圖像處理技術得到了快速發展。隨著 FPGA 相關技術的快速發展,其在高速圖像處理領域中的應用也逐漸增多。FPGA 技術不僅可以提高圖像處理的速度,同時也降低了功耗,給圖像處理系統設計實現提供了更有效的方法[1].
1 中值濾波算法
中值濾波算法是 FPGA 圖像處理方法中應用較為廣泛的一種。中值濾波算法可以在濾除圖像數據噪聲的同時,較好地保護圖像的邊緣信息,方便圖像的分析與處理。該計算是一種非線性圖像處理方法,主要工作原理是通過把像素灰度按等級排列和計算,選取中間值作為輸出??捎孟率奖硎荆篻(x,y) = Meadian{ f(x - i,y - i) } ,i,j ∈ [0,N].
其中 f(x,y) 和 g(x,y) 分別為輸入、輸出的像素數據灰度值。中值濾波算法主要包括冒泡排序法和一般快速并行中值濾波算法。冒泡法的基本原理是對區域內的像素按灰度值按從小到大的順序依次進行排序,將得到的中間值作為最終輸出。但通過對冒泡法進行分析可以發現,對于 3 ×3 的像素區域,每執行完1 次運算,需要進行 36 次比較,而且相鄰兩點的計算過程中,會對其中的 6 個像素點進行 15 次重復的比較。這種重復計算不利于圖像的實時處理。一般快速中值濾波算法引入了圖像并行處理技術,先對選定區域內的像素進行分別排序,然后按照一定規則進行比較,最終得到中值,這樣減小了算法的重復計算,一定程度提高了運算效率。
通過深入分析,可以算出一般快速中值濾波算法處理 3 × 3 像素區域時,僅需要 19 次比較計算,與冒泡排序法的計算次數相比減少了一半,節省許多時間,提高了圖像處理的速度[2].
2 改進快速中值濾波算法
基于一般快速中值濾波方法,通過降低對相區域像素的重復比較次數,充分利用比較結果的思想,本文提出一種改進的快速中值濾波算法,即基于拓展像素處理區域。該算法主要優點在于能對圖像數據進行多點的批量處理,一次對多組像素點進行排序。
通過選擇一個 3 ×4 像素區域來改算法的實現過程。先選擇一個 3 ×4 的像素區域,如表 1 所示。
首先對像素區域進行編號,然后利用冒泡法進行排序,得到最小值、中間值和最大值,分別用A_MIN、A_MID 和 A_MAX 進行表示; 然后對 B 和 C這兩列所得到的結果再進行交叉比較,可以得到MIN_OF_MIX 和 MAX_OF_MIN,即最大值相比取較小值,最小值相比取較大值,同時也對中間值進行比較得到 MAX_OF_MID 和 MIN_OF_MID; 最后把 A列和 D 列像素經過上面 2 次處理得到的結果再進行交叉比較,最終得到前 3 列的最小值里面的最大值MAX_ OF _ MIN1,最大值里面的最小值 MIN _ OF _MIX1.和中間值 MID_OF_MID1.同理,對后 3 列進行相同的操作,得到 MAX_OF_MIN2,MID_OF_MID2和 MIN_OF_MAX2.
通過以上步驟求出的像素點,根據分析可以確定最后所需要的中值像素點只可能在 MAX_OF_MIN1,MID_OF_MID1 和 MIN_OF_MAX1 中,所以最后對這 3 個像素點進行灰度值排序,得到最后確定的中值輸出 MEDIAN1,即為前 3 列最后得到的中值輸出。同理,對后 3 列也通過這種比較方法,得到后 3 列的中值輸出 MEDIAN2.
再改進中值濾波算法中的最后 2 個步驟,只需要對圖像數據進行冒泡排序,最后得到所需要中值的像素點 MEDIAN1 和 MEDIAN2,作為之前像素點 B2,C2 兩個像素位置經濾波后得到的像素數據。
圖 1 為本算法實現過程。
經過計算分析可知,改進快速中值濾波算法減少了重復排序操作,降低了比較次數。在 3 ×4 像素區域的排序過程中,改進快速中值濾波算法的比較次數為 29 次,比之前普通算法的 38 次減少了近30% .由此可看出,改進的快速中值濾具有較快的圖像處理速度[3].
本文新提出的算法主要優勢在于像素區域的選擇上,與現有圖像處理算法不同,本算法在 1 個周期執行完畢后可以對 2 個像素點進行濾波計算,而之前的算法只能對 1 個像素點進行濾波,這就使之前的窗口滑動速度由 1 個像素點提高到 2 個像素點,在每個周期的計算次數上降低了 50% 左右,從而可以極大地提高圖像處理速度。
3 算法硬件實現和仿真
3. 1 濾波算法總體模塊設計
通過設計 2 個不同的模塊生成模板和實現算法模塊,來進行中值濾波算法在 FPGA 中的處理。在生成模板模塊中,其主要功能是把所有等待處理的像素和相鄰區域中的所有像素按照模板的形狀進行去除,然后將處理后的數據傳送給算法模塊進行處理; 算法實現模塊在接收到由生產模板模塊處理過的數據后,對像素數據進行排序運算,然后求出中間值,作為所求像素點的最終中值濾波輸出。
在生成模板模塊中,需要用到 FIFO 存儲器,FIFO 存儲器可以通過采用 “先進先出” 的方式對需要保存的圖像數據進行暫時性的存放。FIFO 存儲器在數字信號處理系統中的應用非常廣泛,可以作為傳輸數據的延遲線或者作為數據的緩沖儲存器等[4].
在FPGA 芯片進行圖像處理的過程中,一個 FIFO儲存器用來存儲1 行的像素數據,這樣使模板的設計更加簡單,也為之后的算法實現模塊提供方便。由于要滿足不同圖像處理要求,需要對圖像數據進行實時處理,所以在系統工作時,FIFO 的所有 RAM 一直都在不斷刷新讀取循環中,提高了圖像處理速度。并且可以通過QUARTUSII 提供的模塊來對 FIFO 進行設計。在本設計中,是通過LPM 紅單元來對FIFO 模塊進行設定。
3. 2 生成模板模塊
圖像數據在 FPGA 中視通過一行一行掃描,然后將數據進行串行輸出,其中每傳輸 1 個數據僅需要 1個時鐘周期,然后將串行的圖像數據通過算法模塊處理生成并行像素數據,所設計的 3 ×4 模板就是將串行數據轉換為并行數據,數據在處理后,將得到的結果把原始像素數據的中間位置像素代替,然后傳送給下一模塊。最后通過不斷的換行,完成整個完整幅圖像的像素數據陣列的處理。為了將 3 ×3 陣列的所有像素并行輸出,本文在 FIFO 存儲器的設計中采用了2 個 linebuffer.每個 FIFO 的地址寬度就是選取的像素區域的寬度,這樣可以保存整行像素數據。
行緩沖模塊可先對 3 行像素數據進行處理,然后并行讀取處理 3 行數據; 像素緩沖器用來將模板中串行的數據轉換成并行數據輸出。圖 2 為生成模板模塊的設計框圖。
生成模板模塊的工作流程為: 先把第 1 行像素數據傳送進來,并將數據寫入 linebuffer1 中; 然后在第 2 行像素數據傳送進來時,先將 linebuffer1 里面的存儲的第 1 行數據傳送到 linebuffer2 中,再把剛傳送進來的像素數據存入 linebuffer1 中。以此類推,最后將所有的像素數據并行輸出給算法模塊,實現生成模板的功能[5].
3. 3 中值濾波算法實現模塊
本設計方案通過使用寄存器和比較器來實現改進的快速中值濾波算法。通過對比較排序過程的分析,對算法模塊進行時序分段,對在一個時序段的比較器進行時鐘同步。并將硬件結構設計成儲存器-比較器-儲存器的模式,這樣設計的好處在于在改進快速中值濾波算法的執行過程中不會出現斷點,也不會出現冗余的等待時間,從而更高效地實現流水處理功能。圖 3 為此算法的硬件結構。
其中 COM1 模塊為比較模塊,可以對 3 個輸入像素處理后再將排序號的 3 個像素輸出到 COM2 模塊,而 COM2 模塊將接受到的數據進行處理后,通過 2 個比較器,將像素數據進行比較和排序,最終輸出 1 個最大值或最小值,至此即完成了算法模塊的設計。
3. 4 中值濾波算法 FPGA 仿真
前述已經完成模板模塊和算法模塊的設計。根據之前設計時所定義的輸入接口與輸出接口,通過將相同的接口信號對應起來,然后通過 QUARTUS環境下的 VERILOG HDL 中的實例化指令將其實現,就可以把所有模塊進行有效連接,完成改進快速中值濾波模塊設計。
下面通過 QUIARTUS 軟件里面的 Simulator 對設計好的算法模塊進行仿真,來驗證其正確性。圖 4 為最終輸出的仿真波形。從最終輸出結果可以發現,經過算法模塊的處理,最終得到的濾波中值可以完整地輸出,驗證了本算法的正確性。
3. 5 仿真分析
經過對算法和 FPGA 硬件實現的仿真分析,本節將在Matlab 仿真環境下對算法進行可行性驗證。通過使用冒泡算法、一般快速濾波算法和改進快速濾波算法3 種算法對灰度圖像進行降噪濾波處理,對濾波效果進行對比分析,對處理的效果進行評價。
為充分驗證 3 種方法在艦船圖像處理上的效果,以 1 幅圖片為例進行處理和驗證。通過對灰度圖像疊加噪聲,然后將冒泡法、一般快速濾波法和改進快速濾波法分別對圖像進行處理,再對比 3 種算法處理后的圖像,如圖 5 所示。經過對比圖像可明顯看出,本文提出的改進快速中值濾波算法可以達到相同的圖像處理效果。為了能夠定量判定新算法最終圖像處理效果的好壞,采用對處理后的圖像的信噪比進行對比,通過對疊加不同噪聲的圖片進行分析,分別對原圖和處理后的圖片的峰值信噪比進行對比分析。
對比結果如表 2 所示。通過表 2 可以發現,3種算法的峰值信噪比的差距很小,這些參數可以證明本文提出的新算法的濾波效果可以達到對艦船圖像處理的要求,而且改進快速中值濾波算法在選取像素區域的偶數列中所處理的像素數據更多。
4 結 語
本文分析了傳統的 FPGA 圖像處理算法,對不同的中值濾波算法進行了對比和分析。重新提出改進的中值濾波算法,并經過 QUARTUS 軟件仿真和MATLAB 數據分析,證明了提出的改進快速中值濾波算法不僅在圖像處理速度上優于冒泡法和一般快速中值濾波法,而且在處理效果上也比前 2 種算法更好,可以方便的應用于拍攝圖像質量不高的艦船圖像處理領域。
參考文獻:
[1] 劉昊。 高速圖像處理平臺的設計與實現[D]. 武漢: 武漢大學,2008.
[2] 萬海軍,何東健,徐尚中。 基于 FPGA 的圖像中值濾波算法硬件實現[J]. 微計算機信息,2008,24(7) : 280 -282.