任勇峰,武昊男,儲成群,焦新泉
?
基于FPGA的二維FFT圖像邊緣增強設(shè)計
任勇峰,武昊男,儲成群,焦新泉
(中北大學電子測試技術(shù)國家重點實驗室,山西 太原 030051)
在處理圖像類信息時,圖像細節(jié)往往能傳達更多信息,是人們較為關(guān)注部分。針對在光照不理想的條件下,傳感器采集到的圖像對比度低、細節(jié)難以分辨的問題,提出一種基于現(xiàn)場可編程門陣列(FPGA)的二維快速傅立葉變換的圖像邊緣提取及增強方法。通過模塊化設(shè)計,完成4路并行512×512點快速傳里葉變換(FFT)運算處理器設(shè)計,并通過FFT模塊復(fù)用減少FPGA內(nèi)資源消耗,同時實現(xiàn)圖像頻譜的高通濾波算法及傅立葉逆變換算法。經(jīng)過仿真與實驗,確定該方法有效可靠,實時性強,可以滿足工業(yè)上圖像處理的需求。
現(xiàn)場可編程門陣列;快速傳里葉變換;邊緣增強;頻域;濾波
圖像增強是數(shù)字圖像處理的重要組成部分,其目的是增強圖像對比度,從而優(yōu)化視覺效果。人眼對灰度變化的敏感度不是線性的,就8 bit灰度圖片而言,人眼只對灰度值位于[48,206]區(qū)間的變化較為敏感[1]。為提高灰度圖像的人眼視覺效果,人們提出許多相應(yīng)算法。傳統(tǒng)的提高灰度圖像的對比度和可視效果的算法有許多,大致可分為空域類和頻域類??沼蝾惏⊿obel、灰度變換、Canny等[2];頻域類則包括小波變換、短時傅立葉變換、快速傅立葉變換等[3]。
通常情況下圖像的特征在空域難以描述,但在頻域卻十分明顯[4],且就提高圖像對比度而言,時頻分析與頻域分析并無太大區(qū)別,因此選擇快速傳里葉變換(fast Fourier transform,F(xiàn)FT)算法作為本設(shè)計的核心算法。通常圖像的邊緣及細節(jié)部分由灰度值相差較大的部分構(gòu)成,在頻域中表現(xiàn)為高頻部 分[5]。因此用傅立葉變換的方法對圖像進行邊緣加強時,只需要提取圖像頻譜高頻部分并加強即可。
所有的圖像邊緣增強算法有一個共同點——運算量巨大,通常處理時間較長,使用CPU進行運算耗時少則幾百毫秒,多則幾十秒,難以滿足實時性的要求,而現(xiàn)場可編程門陣列(field-programmable gate array,F(xiàn)PGA)具有實時性強,數(shù)據(jù)吞吐量大的特點,非常適合處理圖像類數(shù)據(jù)[6-7],并且由于其并行運算的特點,可以成倍地提高FFT的運算速 度[8-9]。因此,選擇FPGA作為本設(shè)計的硬件平臺,通過模塊化設(shè)計,完成4路2D-FFT處理器的設(shè)計。
對離散信號() (0≤≤–1),其傅立葉變換為
從式(1)可以看到,()求傅立葉變換的過程即是對一組數(shù)據(jù)求積再求和的過程。FPGA中有大量的加法器資源,可以方便地實現(xiàn)求和過程。但是乘法運算卻會消耗大量的布線和時鐘資源。因此要通過FPGA實現(xiàn)高效的傅立葉變換,必須減少其中的乘法運算。
蝶形運算的提出解決了上述的問題。蝶形運算可以將點傅立葉變換轉(zhuǎn)化為2個/2點的傅立葉變換,變換結(jié)果再求積與和的形式。如圖1所示,將1個長序列分解為2個短序列的FFT運算被稱為Radix-2 FFT。
對于=2點序列,進行傅立葉變換需要進行2次乘法與加法,如果進行次蝶形運算后,就可以將傅立葉變換轉(zhuǎn)化為log2次求加法和乘法運算,極大減少了運算量。運算過程中任何一個節(jié)點的數(shù)值,僅與其前一級的2個節(jié)點有關(guān),而與其他節(jié)點無關(guān)。因此點傅立葉變換過程僅需個寄存器,用來存儲當前節(jié)點的數(shù)據(jù),當下一個節(jié)點數(shù)據(jù)計算完畢后,覆蓋寄存器即可。
圖1 N點蝶形運算
IFFT是FFT的逆變換,即
對比FFT的定義式,只有旋轉(zhuǎn)因子不同,并且多了一個系數(shù)。Radix-2 FFT序列長度是2的整數(shù)次冪,在FPGA里通過右移寄存器操作可以簡單實現(xiàn)。因此,在FFT的基礎(chǔ)上實現(xiàn)IFFT,只需要將逆變換的旋轉(zhuǎn)因子更新進ROM中,再運算出結(jié)果后,將結(jié)果右移log2位即可。
分辨率×的圖像,可以用一個×的矩陣(,)表示,再經(jīng)過二維FFT運算提取圖像頻譜。二維FFT可以看成2組一維FFT的組合,即
式(3)可以理解為先對像素矩陣(,)的每一行進行點FFT運算,運算次后得到(,),再對每一列進行點FFT運算,運算次最后得到(,)。二維FFT運算滿足可分性,即先進行行變換與先進行列變換對FFT運算結(jié)果沒有影響。
選擇Xilinx XC6SLX150-3FGG676I FPGA作為主控芯片。一幀512×512分辨率的256階灰度圖像數(shù)據(jù)量為256 KB,圖像緩存及運算中間數(shù)據(jù)緩存使用DDR2 SDRAM芯片MT47H256M8。該芯片內(nèi)部分為8個Bank,每個Bank的容量為 256 Mbit,數(shù)據(jù)位為8位,地址位為15位。行列地址總線復(fù)用,行地址15位,列地址10位通過RAS和CAS信號激活行地址和列地址。部分電路如圖2所示。
圖2 整體硬件電路
本設(shè)計使用模塊化設(shè)計方案,針對512×512分辨率的256階灰度圖像進行處理。圖像的灰度由深到淺用十六進制可表示為00~FF。圖像傳感器采集回一幀數(shù)據(jù),由FPGA先存入SDRAM中,再讀回FPGA進行處理,處理完畢后,直接通過VGA接口顯示,流程如圖3所示。
圖3 流程圖
通常圖像經(jīng)過傅立葉變換后,頻譜的零點集中在頻譜圖的四角,不利于后續(xù)的濾波處理。為了將頻譜原點移至圖像中心,可在運算前對圖像數(shù)據(jù)按式(4)進行預(yù)處理。得到一組新的圖像數(shù)據(jù)(,),即
該方法在FPGA中只需一個加法器即可實現(xiàn)。步驟如下:
(1) 讀取一個8 bit圖像數(shù)據(jù)(,)。
(2) 利用加法器計算+。
(3) 將加法器輸出結(jié)果的最低位作為該8 bit數(shù)據(jù)的符號位。
FFT運算完成后,對頻譜進行濾波,使用濾波函數(shù)(,)乘以頻譜,得到濾波后的頻譜。
式(5)中為點(,)到頻譜中心點的距離的平方。濾波函數(shù)邏輯電路如圖4所示。
圖4 濾波函數(shù)邏輯電路
FFT運算單元主要控制信號及標志信號有Start、Busy、DV、及Xn_Index、Xk_Index。Start信號表示一行或一列圖像數(shù)據(jù)開始輸入;Busy表示FFT模塊正在運算;DV表示開始輸出有效數(shù)據(jù);Xn_Index、Xk_Index信號是輸入輸出數(shù)據(jù)的計數(shù),時序如圖5所示。
圖5 時序圖
512點Radix-2 FFT模塊需要進行9級的蝶形運算,用到256個旋轉(zhuǎn)因子。由于旋轉(zhuǎn)因子在數(shù)據(jù)運算過程中可造成數(shù)據(jù)位增加并且出現(xiàn)小數(shù),因此需對每級蝶形運算結(jié)果進行修正,提取有效數(shù)據(jù)的整數(shù)部分。為防止數(shù)據(jù)溢出,每級蝶形運算完成后將運算結(jié)果乘以縮減因子,縮減因子設(shè)置以數(shù)據(jù)不溢出為標準。旋轉(zhuǎn)因子的比特數(shù)是決定快速傅立葉變換精度的重要因素,但是過高的比特數(shù)同樣會造成運算量的增加,從而減慢運算速度,應(yīng)當考慮精度和速度折中選擇,本設(shè)計使用16 bit旋轉(zhuǎn)因子。采用查找表的方式將其存儲在FPGA片內(nèi)ROM中,系統(tǒng)上電時自動進行初始化。單通道FFT模塊原理如圖6所示。
圖6 單通道FFT
4通道FFT由4個單通道FFT并行組成,4通道同步執(zhí)行512點FFT運算,輸入數(shù)據(jù)為64位,其中每路16位,8位實部、8位虛部,對圖像原始數(shù)據(jù)來說,虛部對應(yīng)數(shù)值為00。
當IFFT變換時,將IFFT的旋轉(zhuǎn)因子加載入旋轉(zhuǎn)因子ROM中。頻譜數(shù)據(jù)乘以高通濾波函數(shù)后輸入FFT模塊,實現(xiàn)FFT模塊的IFFT運算功能。極大節(jié)約了FPGA片內(nèi)資源。在IFFT運算完成后,取結(jié)果的實部,進行后處理,處理方法與前處理相同,即可得到由頻譜恢復(fù)后的圖像。
在HDL設(shè)計中生成8個寬度為8 bit,深度為512的BRAM作為待運算數(shù)據(jù)的緩存。8個BRAM分為2組,一組緩存待運算數(shù)據(jù)實部,一組緩存待運算數(shù)據(jù)虛部,8個BRAM由同一個使能信號控制,從而保證4路數(shù)據(jù)同步傳輸。并且由于數(shù)據(jù)緩存時間遠小于FFT運算時間,每次BRAM中的數(shù)據(jù)輸入FFT模塊后立即從DDR2中讀取下一行(列)的數(shù)據(jù),用以節(jié)約時鐘開銷。
設(shè)計中FFT行與列變換處理單元復(fù)用,系統(tǒng)工作時先進行4路行變換,將計算結(jié)果(,)回傳至DDR2中。128次行變換執(zhí)行完畢后,通過控制DDR2讀數(shù)地址,讀取(,)列數(shù)據(jù)緩存入BRAM中,重復(fù)4次后,將4組列數(shù)據(jù)同步輸入FFT運算單元進行運算。每次FFT運算完成后,將4路結(jié)果經(jīng)由一個2 KB的FIFO緩存至DDR2中,覆蓋對應(yīng)中間變量(,),運算128次后得到二維FFT變換最終結(jié)果(,)。
總體邏輯設(shè)計如圖7所示。
圖7 總體邏輯設(shè)計
為驗證本設(shè)計的正確性,利用ISE對4路FFT運算單元進行仿真。仿真中通過輸入自加數(shù),在控制信號配合下,輸出變換后的結(jié)果。在Matlab上做相同的FFT運算,以確定FFT運算單元的縮減因子。最后通過實驗,實現(xiàn)一幀圖像的頻譜提取、濾波及反變換。
使用Matlab進行傅立葉變換,輸入數(shù)據(jù)為0~127,重復(fù)4次共512個數(shù)據(jù)得到部分結(jié)果如圖8所示。
圖8 Matlab進行FFT運算部分結(jié)果
FPGA平臺的仿真結(jié)果如圖9所示,Matlab與FPGA的結(jié)果對比見表1。
圖9 FFT運算單元部分運算結(jié)果
表1 部分運算結(jié)果
從表1可以看到FFT運算單元與Matlab的運算結(jié)果略有不同,這是因為FFT運算單元截斷了運算過程中出現(xiàn)的小數(shù)。
通過Matlab的探查計時功能可以看到,進行一幀512×512像素圖像FFT運算的時間約為2.019 s;而基于FPGA的4路并行FFT運算單元進行一次512點FFT運算需要3 505個時鐘周期,工作頻率經(jīng)過PLL鎖相環(huán)后倍頻在150 MHz,進行一次FFT所需時間約為23.367 μs。進行一次相同運算只需要約7.013 ms遠遠快于Matlab的運算速度,實時性得到很大提高。運算時間對比見表2。
表2 運算時間
實驗設(shè)計如下:利用FPGA平臺對一幀指紋圖像進行截止頻率為20的數(shù)字高通濾波,輸出頻譜及其對應(yīng)的圖像。
將原始頻譜進行高通濾波后,得到頻譜高頻部分,如圖10(b)所示。再經(jīng)過IFFT運算后,得到圖像紋理特征,如圖11(b)所示。
將圖10(b)的頻譜數(shù)據(jù)左移4位后,得到增強頻譜,如圖10(c)所示,反變換后得到邊緣增強后的圖像,如圖11(c)所示。對比圖11(a)和圖11(c),可以看到處理過后的圖像指紋清晰可辨,對比度明顯提高。
圖10 頻譜對比
本文在FPGA基礎(chǔ)上從底層實現(xiàn)了一種二維FFT處理器,并應(yīng)用在圖像邊緣增強領(lǐng)域,動態(tài)提高圖像對比度,實現(xiàn)圖像的頻譜提取、濾波及由頻譜提取圖像的過程。結(jié)果顯示該方法實時性高、穩(wěn)定可靠,而且處理過的圖像更加符合人眼的視覺特性,可以滿足對圖像處理實時性要求較高場合的應(yīng)用需求。
[1] 康牧. 圖像處理中幾個關(guān)鍵算法的研究[D]. 西安: 西安電子科技大學, 2009.
[2] 吳詩婳, 吳一全, 周建江. 基于NSST和改進數(shù)學形態(tài)學的遙感圖像目標邊緣提取[J]. 圖學學報, 2017, 38(4): 523-530.
[3] 劉麗, 匡綱要. 圖像紋理特征提取方法綜述[J]. 中國圖象圖形學報, 2009, 14(4): 622-635.
[4] 張勇. 傅里葉變換在數(shù)字圖像處理中的應(yīng)用[J]. 廊坊師范學院學報: 自然科學版, 2015, 15(3): 25-27.
[5] 周浦城, 周遠, 韓裕生. 視頻圖像去雨技術(shù)研究進展[J]. 圖學學報, 2017, 38(5): 629-646.
[6] 楊軍, 于艷艷, 陳成, 等. 基于FPGA的二維FFT處理器的研究與設(shè)計[J]. 云南大學學報: 自然科學版, 2013, 35(6): 750-755.
[7] 張麗君. 大點數(shù)FFT的二維算法FPGA并行實現(xiàn)[J]. 無線電通信技術(shù), 2013, 39(3): 86-88.
[8] 劉冀川. 實數(shù)二維FFT及其改進算法的FPGA實現(xiàn)[J]. 無線電通信技術(shù), 2014, 40(3): 94-96.
[9] NGUYEN N H, KHAN S A, KIM C H, et al. A high-performance, resource-efficient, reconfigurable parallel-pipelined FFT processor for FPGA platforms [J]. Microprocessors and Microsystems, 2018, 60(7): 96-106.
2D-FFT Image Edge Enhancement Design Based on FPGA
REN Yong-feng, WU Hao-nan, CHU Cheng-qun, JIAO Xin-quan
(National Key Laboratory for Electronic Measurement Technology, North University of China, Taiyuan Shanxi 030051, China)
When processing the information like images, we find that image details can often convey more information, and that is why people are more concerned with images details. However, under the condition of unsatisfactory illumination, the images collected by sensors are usually with low contrast and difficult to distinguish the details. To solve the above problems, an image edge extraction and enhancement method based on field-programmable gate array (FPGA) is proposed. Four parallel 512×512-point fast Fourier transform (FFT) processors are designed by modular design, and the resource consumption in FPGA is reduced by multiplexing FFT modules. At the same time, high-pass filtering algorithm and inverse fourier transform algorithm of image spectrum are realized. The simulation and experiment show that the method is effective, reliable and real-time, and it can also meet the needs of industrial image processing.
field-programmable gate array (FPGA); fast Fourier transformation (FFT); edge enhancement; frequency domain; wave filtering
TP 791
10.11996/JG.j.2095-302X.2019010137
A
2095-302X(2019)01-0137-06
2018-06-05;
2018-09-12
國家自然科學基金項目(61727804)
任勇峰(1968-),男,山西中陽人,教授,博士,博士生導(dǎo)師。主要研究方向為測試計量技術(shù)、電路與系統(tǒng)。E-mail:renyongfeng@nuc.edun.cn
焦新泉(1968-),男,江蘇泰州人,副教授,博士,碩士生導(dǎo)師。主要研究方向為高速數(shù)據(jù)采集存儲。E-mail:jiaoxinquan@nuc.edu.cn