任勇峰,武昊男,儲(chǔ)成群,焦新泉
?
基于FPGA的二維FFT圖像邊緣增強(qiáng)設(shè)計(jì)
任勇峰,武昊男,儲(chǔ)成群,焦新泉
(中北大學(xué)電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051)
在處理圖像類信息時(shí),圖像細(xì)節(jié)往往能傳達(dá)更多信息,是人們較為關(guān)注部分。針對(duì)在光照不理想的條件下,傳感器采集到的圖像對(duì)比度低、細(xì)節(jié)難以分辨的問(wèn)題,提出一種基于現(xiàn)場(chǎng)可編程門陣列(FPGA)的二維快速傅立葉變換的圖像邊緣提取及增強(qiáng)方法。通過(guò)模塊化設(shè)計(jì),完成4路并行512×512點(diǎn)快速傳里葉變換(FFT)運(yùn)算處理器設(shè)計(jì),并通過(guò)FFT模塊復(fù)用減少FPGA內(nèi)資源消耗,同時(shí)實(shí)現(xiàn)圖像頻譜的高通濾波算法及傅立葉逆變換算法。經(jīng)過(guò)仿真與實(shí)驗(yàn),確定該方法有效可靠,實(shí)時(shí)性強(qiáng),可以滿足工業(yè)上圖像處理的需求。
現(xiàn)場(chǎng)可編程門陣列;快速傳里葉變換;邊緣增強(qiáng);頻域;濾波
圖像增強(qiáng)是數(shù)字圖像處理的重要組成部分,其目的是增強(qiáng)圖像對(duì)比度,從而優(yōu)化視覺(jué)效果。人眼對(duì)灰度變化的敏感度不是線性的,就8 bit灰度圖片而言,人眼只對(duì)灰度值位于[48,206]區(qū)間的變化較為敏感[1]。為提高灰度圖像的人眼視覺(jué)效果,人們提出許多相應(yīng)算法。傳統(tǒng)的提高灰度圖像的對(duì)比度和可視效果的算法有許多,大致可分為空域類和頻域類。空域類包括Sobel、灰度變換、Canny等[2];頻域類則包括小波變換、短時(shí)傅立葉變換、快速傅立葉變換等[3]。
通常情況下圖像的特征在空域難以描述,但在頻域卻十分明顯[4],且就提高圖像對(duì)比度而言,時(shí)頻分析與頻域分析并無(wú)太大區(qū)別,因此選擇快速傳里葉變換(fast Fourier transform,F(xiàn)FT)算法作為本設(shè)計(jì)的核心算法。通常圖像的邊緣及細(xì)節(jié)部分由灰度值相差較大的部分構(gòu)成,在頻域中表現(xiàn)為高頻部 分[5]。因此用傅立葉變換的方法對(duì)圖像進(jìn)行邊緣加強(qiáng)時(shí),只需要提取圖像頻譜高頻部分并加強(qiáng)即可。
所有的圖像邊緣增強(qiáng)算法有一個(gè)共同點(diǎn)——運(yùn)算量巨大,通常處理時(shí)間較長(zhǎng),使用CPU進(jìn)行運(yùn)算耗時(shí)少則幾百毫秒,多則幾十秒,難以滿足實(shí)時(shí)性的要求,而現(xiàn)場(chǎng)可編程門陣列(field-programmable gate array,F(xiàn)PGA)具有實(shí)時(shí)性強(qiáng),數(shù)據(jù)吞吐量大的特點(diǎn),非常適合處理圖像類數(shù)據(jù)[6-7],并且由于其并行運(yùn)算的特點(diǎn),可以成倍地提高FFT的運(yùn)算速 度[8-9]。因此,選擇FPGA作為本設(shè)計(jì)的硬件平臺(tái),通過(guò)模塊化設(shè)計(jì),完成4路2D-FFT處理器的設(shè)計(jì)。
對(duì)離散信號(hào)() (0≤≤–1),其傅立葉變換為
從式(1)可以看到,()求傅立葉變換的過(guò)程即是對(duì)一組數(shù)據(jù)求積再求和的過(guò)程。FPGA中有大量的加法器資源,可以方便地實(shí)現(xiàn)求和過(guò)程。但是乘法運(yùn)算卻會(huì)消耗大量的布線和時(shí)鐘資源。因此要通過(guò)FPGA實(shí)現(xiàn)高效的傅立葉變換,必須減少其中的乘法運(yùn)算。
蝶形運(yùn)算的提出解決了上述的問(wèn)題。蝶形運(yùn)算可以將點(diǎn)傅立葉變換轉(zhuǎn)化為2個(gè)/2點(diǎn)的傅立葉變換,變換結(jié)果再求積與和的形式。如圖1所示,將1個(gè)長(zhǎng)序列分解為2個(gè)短序列的FFT運(yùn)算被稱為Radix-2 FFT。
對(duì)于=2點(diǎn)序列,進(jìn)行傅立葉變換需要進(jìn)行2次乘法與加法,如果進(jìn)行次蝶形運(yùn)算后,就可以將傅立葉變換轉(zhuǎn)化為log2次求加法和乘法運(yùn)算,極大減少了運(yùn)算量。運(yùn)算過(guò)程中任何一個(gè)節(jié)點(diǎn)的數(shù)值,僅與其前一級(jí)的2個(gè)節(jié)點(diǎn)有關(guān),而與其他節(jié)點(diǎn)無(wú)關(guān)。因此點(diǎn)傅立葉變換過(guò)程僅需個(gè)寄存器,用來(lái)存儲(chǔ)當(dāng)前節(jié)點(diǎn)的數(shù)據(jù),當(dāng)下一個(gè)節(jié)點(diǎn)數(shù)據(jù)計(jì)算完畢后,覆蓋寄存器即可。
圖1 N點(diǎn)蝶形運(yùn)算
IFFT是FFT的逆變換,即
對(duì)比FFT的定義式,只有旋轉(zhuǎn)因子不同,并且多了一個(gè)系數(shù)。Radix-2 FFT序列長(zhǎng)度是2的整數(shù)次冪,在FPGA里通過(guò)右移寄存器操作可以簡(jiǎn)單實(shí)現(xiàn)。因此,在FFT的基礎(chǔ)上實(shí)現(xiàn)IFFT,只需要將逆變換的旋轉(zhuǎn)因子更新進(jìn)ROM中,再運(yùn)算出結(jié)果后,將結(jié)果右移log2位即可。
分辨率×的圖像,可以用一個(gè)×的矩陣(,)表示,再經(jīng)過(guò)二維FFT運(yùn)算提取圖像頻譜。二維FFT可以看成2組一維FFT的組合,即
式(3)可以理解為先對(duì)像素矩陣(,)的每一行進(jìn)行點(diǎn)FFT運(yùn)算,運(yùn)算次后得到(,),再對(duì)每一列進(jìn)行點(diǎn)FFT運(yùn)算,運(yùn)算次最后得到(,)。二維FFT運(yùn)算滿足可分性,即先進(jìn)行行變換與先進(jìn)行列變換對(duì)FFT運(yùn)算結(jié)果沒(méi)有影響。
選擇Xilinx XC6SLX150-3FGG676I FPGA作為主控芯片。一幀512×512分辨率的256階灰度圖像數(shù)據(jù)量為256 KB,圖像緩存及運(yùn)算中間數(shù)據(jù)緩存使用DDR2 SDRAM芯片MT47H256M8。該芯片內(nèi)部分為8個(gè)Bank,每個(gè)Bank的容量為 256 Mbit,數(shù)據(jù)位為8位,地址位為15位。行列地址總線復(fù)用,行地址15位,列地址10位通過(guò)RAS和CAS信號(hào)激活行地址和列地址。部分電路如圖2所示。
圖2 整體硬件電路
本設(shè)計(jì)使用模塊化設(shè)計(jì)方案,針對(duì)512×512分辨率的256階灰度圖像進(jìn)行處理。圖像的灰度由深到淺用十六進(jìn)制可表示為00~FF。圖像傳感器采集回一幀數(shù)據(jù),由FPGA先存入SDRAM中,再讀回FPGA進(jìn)行處理,處理完畢后,直接通過(guò)VGA接口顯示,流程如圖3所示。
圖3 流程圖
通常圖像經(jīng)過(guò)傅立葉變換后,頻譜的零點(diǎn)集中在頻譜圖的四角,不利于后續(xù)的濾波處理。為了將頻譜原點(diǎn)移至圖像中心,可在運(yùn)算前對(duì)圖像數(shù)據(jù)按式(4)進(jìn)行預(yù)處理。得到一組新的圖像數(shù)據(jù)(,),即
該方法在FPGA中只需一個(gè)加法器即可實(shí)現(xiàn)。步驟如下:
(1) 讀取一個(gè)8 bit圖像數(shù)據(jù)(,)。
(2) 利用加法器計(jì)算+。
(3) 將加法器輸出結(jié)果的最低位作為該8 bit數(shù)據(jù)的符號(hào)位。
FFT運(yùn)算完成后,對(duì)頻譜進(jìn)行濾波,使用濾波函數(shù)(,)乘以頻譜,得到濾波后的頻譜。
式(5)中為點(diǎn)(,)到頻譜中心點(diǎn)的距離的平方。濾波函數(shù)邏輯電路如圖4所示。
圖4 濾波函數(shù)邏輯電路
FFT運(yùn)算單元主要控制信號(hào)及標(biāo)志信號(hào)有Start、Busy、DV、及Xn_Index、Xk_Index。Start信號(hào)表示一行或一列圖像數(shù)據(jù)開(kāi)始輸入;Busy表示FFT模塊正在運(yùn)算;DV表示開(kāi)始輸出有效數(shù)據(jù);Xn_Index、Xk_Index信號(hào)是輸入輸出數(shù)據(jù)的計(jì)數(shù),時(shí)序如圖5所示。
圖5 時(shí)序圖
512點(diǎn)Radix-2 FFT模塊需要進(jìn)行9級(jí)的蝶形運(yùn)算,用到256個(gè)旋轉(zhuǎn)因子。由于旋轉(zhuǎn)因子在數(shù)據(jù)運(yùn)算過(guò)程中可造成數(shù)據(jù)位增加并且出現(xiàn)小數(shù),因此需對(duì)每級(jí)蝶形運(yùn)算結(jié)果進(jìn)行修正,提取有效數(shù)據(jù)的整數(shù)部分。為防止數(shù)據(jù)溢出,每級(jí)蝶形運(yùn)算完成后將運(yùn)算結(jié)果乘以縮減因子,縮減因子設(shè)置以數(shù)據(jù)不溢出為標(biāo)準(zhǔn)。旋轉(zhuǎn)因子的比特?cái)?shù)是決定快速傅立葉變換精度的重要因素,但是過(guò)高的比特?cái)?shù)同樣會(huì)造成運(yùn)算量的增加,從而減慢運(yùn)算速度,應(yīng)當(dāng)考慮精度和速度折中選擇,本設(shè)計(jì)使用16 bit旋轉(zhuǎn)因子。采用查找表的方式將其存儲(chǔ)在FPGA片內(nèi)ROM中,系統(tǒng)上電時(shí)自動(dòng)進(jìn)行初始化。單通道FFT模塊原理如圖6所示。
圖6 單通道FFT
4通道FFT由4個(gè)單通道FFT并行組成,4通道同步執(zhí)行512點(diǎn)FFT運(yùn)算,輸入數(shù)據(jù)為64位,其中每路16位,8位實(shí)部、8位虛部,對(duì)圖像原始數(shù)據(jù)來(lái)說(shuō),虛部對(duì)應(yīng)數(shù)值為00。
當(dāng)IFFT變換時(shí),將IFFT的旋轉(zhuǎn)因子加載入旋轉(zhuǎn)因子ROM中。頻譜數(shù)據(jù)乘以高通濾波函數(shù)后輸入FFT模塊,實(shí)現(xiàn)FFT模塊的IFFT運(yùn)算功能。極大節(jié)約了FPGA片內(nèi)資源。在IFFT運(yùn)算完成后,取結(jié)果的實(shí)部,進(jìn)行后處理,處理方法與前處理相同,即可得到由頻譜恢復(fù)后的圖像。
在HDL設(shè)計(jì)中生成8個(gè)寬度為8 bit,深度為512的BRAM作為待運(yùn)算數(shù)據(jù)的緩存。8個(gè)BRAM分為2組,一組緩存待運(yùn)算數(shù)據(jù)實(shí)部,一組緩存待運(yùn)算數(shù)據(jù)虛部,8個(gè)BRAM由同一個(gè)使能信號(hào)控制,從而保證4路數(shù)據(jù)同步傳輸。并且由于數(shù)據(jù)緩存時(shí)間遠(yuǎn)小于FFT運(yùn)算時(shí)間,每次BRAM中的數(shù)據(jù)輸入FFT模塊后立即從DDR2中讀取下一行(列)的數(shù)據(jù),用以節(jié)約時(shí)鐘開(kāi)銷。
設(shè)計(jì)中FFT行與列變換處理單元復(fù)用,系統(tǒng)工作時(shí)先進(jìn)行4路行變換,將計(jì)算結(jié)果(,)回傳至DDR2中。128次行變換執(zhí)行完畢后,通過(guò)控制DDR2讀數(shù)地址,讀取(,)列數(shù)據(jù)緩存入BRAM中,重復(fù)4次后,將4組列數(shù)據(jù)同步輸入FFT運(yùn)算單元進(jìn)行運(yùn)算。每次FFT運(yùn)算完成后,將4路結(jié)果經(jīng)由一個(gè)2 KB的FIFO緩存至DDR2中,覆蓋對(duì)應(yīng)中間變量(,),運(yùn)算128次后得到二維FFT變換最終結(jié)果(,)。
總體邏輯設(shè)計(jì)如圖7所示。
圖7 總體邏輯設(shè)計(jì)
為驗(yàn)證本設(shè)計(jì)的正確性,利用ISE對(duì)4路FFT運(yùn)算單元進(jìn)行仿真。仿真中通過(guò)輸入自加數(shù),在控制信號(hào)配合下,輸出變換后的結(jié)果。在Matlab上做相同的FFT運(yùn)算,以確定FFT運(yùn)算單元的縮減因子。最后通過(guò)實(shí)驗(yàn),實(shí)現(xiàn)一幀圖像的頻譜提取、濾波及反變換。
使用Matlab進(jìn)行傅立葉變換,輸入數(shù)據(jù)為0~127,重復(fù)4次共512個(gè)數(shù)據(jù)得到部分結(jié)果如圖8所示。
圖8 Matlab進(jìn)行FFT運(yùn)算部分結(jié)果
FPGA平臺(tái)的仿真結(jié)果如圖9所示,Matlab與FPGA的結(jié)果對(duì)比見(jiàn)表1。
圖9 FFT運(yùn)算單元部分運(yùn)算結(jié)果
表1 部分運(yùn)算結(jié)果
從表1可以看到FFT運(yùn)算單元與Matlab的運(yùn)算結(jié)果略有不同,這是因?yàn)镕FT運(yùn)算單元截?cái)嗔诉\(yùn)算過(guò)程中出現(xiàn)的小數(shù)。
通過(guò)Matlab的探查計(jì)時(shí)功能可以看到,進(jìn)行一幀512×512像素圖像FFT運(yùn)算的時(shí)間約為2.019 s;而基于FPGA的4路并行FFT運(yùn)算單元進(jìn)行一次512點(diǎn)FFT運(yùn)算需要3 505個(gè)時(shí)鐘周期,工作頻率經(jīng)過(guò)PLL鎖相環(huán)后倍頻在150 MHz,進(jìn)行一次FFT所需時(shí)間約為23.367 μs。進(jìn)行一次相同運(yùn)算只需要約7.013 ms遠(yuǎn)遠(yuǎn)快于Matlab的運(yùn)算速度,實(shí)時(shí)性得到很大提高。運(yùn)算時(shí)間對(duì)比見(jiàn)表2。
表2 運(yùn)算時(shí)間
實(shí)驗(yàn)設(shè)計(jì)如下:利用FPGA平臺(tái)對(duì)一幀指紋圖像進(jìn)行截止頻率為20的數(shù)字高通濾波,輸出頻譜及其對(duì)應(yīng)的圖像。
將原始頻譜進(jìn)行高通濾波后,得到頻譜高頻部分,如圖10(b)所示。再經(jīng)過(guò)IFFT運(yùn)算后,得到圖像紋理特征,如圖11(b)所示。
將圖10(b)的頻譜數(shù)據(jù)左移4位后,得到增強(qiáng)頻譜,如圖10(c)所示,反變換后得到邊緣增強(qiáng)后的圖像,如圖11(c)所示。對(duì)比圖11(a)和圖11(c),可以看到處理過(guò)后的圖像指紋清晰可辨,對(duì)比度明顯提高。
圖10 頻譜對(duì)比
本文在FPGA基礎(chǔ)上從底層實(shí)現(xiàn)了一種二維FFT處理器,并應(yīng)用在圖像邊緣增強(qiáng)領(lǐng)域,動(dòng)態(tài)提高圖像對(duì)比度,實(shí)現(xiàn)圖像的頻譜提取、濾波及由頻譜提取圖像的過(guò)程。結(jié)果顯示該方法實(shí)時(shí)性高、穩(wěn)定可靠,而且處理過(guò)的圖像更加符合人眼的視覺(jué)特性,可以滿足對(duì)圖像處理實(shí)時(shí)性要求較高場(chǎng)合的應(yīng)用需求。
[1] 康牧. 圖像處理中幾個(gè)關(guān)鍵算法的研究[D]. 西安: 西安電子科技大學(xué), 2009.
[2] 吳詩(shī)婳, 吳一全, 周建江. 基于NSST和改進(jìn)數(shù)學(xué)形態(tài)學(xué)的遙感圖像目標(biāo)邊緣提取[J]. 圖學(xué)學(xué)報(bào), 2017, 38(4): 523-530.
[3] 劉麗, 匡綱要. 圖像紋理特征提取方法綜述[J]. 中國(guó)圖象圖形學(xué)報(bào), 2009, 14(4): 622-635.
[4] 張勇. 傅里葉變換在數(shù)字圖像處理中的應(yīng)用[J]. 廊坊師范學(xué)院學(xué)報(bào): 自然科學(xué)版, 2015, 15(3): 25-27.
[5] 周浦城, 周遠(yuǎn), 韓裕生. 視頻圖像去雨技術(shù)研究進(jìn)展[J]. 圖學(xué)學(xué)報(bào), 2017, 38(5): 629-646.
[6] 楊軍, 于艷艷, 陳成, 等. 基于FPGA的二維FFT處理器的研究與設(shè)計(jì)[J]. 云南大學(xué)學(xué)報(bào): 自然科學(xué)版, 2013, 35(6): 750-755.
[7] 張麗君. 大點(diǎn)數(shù)FFT的二維算法FPGA并行實(shí)現(xiàn)[J]. 無(wú)線電通信技術(shù), 2013, 39(3): 86-88.
[8] 劉冀川. 實(shí)數(shù)二維FFT及其改進(jìn)算法的FPGA實(shí)現(xiàn)[J]. 無(wú)線電通信技術(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
國(guó)家自然科學(xué)基金項(xiàng)目(61727804)
任勇峰(1968-),男,山西中陽(yáng)人,教授,博士,博士生導(dǎo)師。主要研究方向?yàn)闇y(cè)試計(jì)量技術(shù)、電路與系統(tǒng)。E-mail:renyongfeng@nuc.edun.cn
焦新泉(1968-),男,江蘇泰州人,副教授,博士,碩士生導(dǎo)師。主要研究方向?yàn)楦咚贁?shù)據(jù)采集存儲(chǔ)。E-mail:jiaoxinquan@nuc.edu.cn