文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.190235
中文引用格式: 李菁菁,劉云飛. 圖像去模糊系統(tǒng)頻域優(yōu)化設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2019,45(7):107-111,116.
英文引用格式: Li Jingjing,Liu Yunfei. An optimum design of frequency domain processing for image deblurring system[J]. Application of Electronic Technique,2019,45(7):107-111,116.
0 引言
通常,圖像處理算法按照作用域可分為時(shí)域和頻域兩大類[1]。在實(shí)際應(yīng)用中,大多數(shù)圖像采用時(shí)域處理算法,但處理模糊圖像時(shí),考慮到時(shí)域中去卷積難度較大,對模糊核的估計(jì)處理精度較低,故采用頻域處理算法,即先對模糊圖像頻域轉(zhuǎn)換,再在頻域中處理。其中,F(xiàn)FT(快速傅里葉變換)是數(shù)字信號分析和處理過程中最常用的重要變換之一,在頻域中的很多運(yùn)算都可以轉(zhuǎn)換為FFT的基本運(yùn)算[2]。
隨著集成電路工藝不斷進(jìn)步,FPGA器件也在不斷發(fā)展,其可配置、功耗低、易于實(shí)現(xiàn)流水和并行結(jié)構(gòu)的特點(diǎn),提高了圖像處理速度,滿足現(xiàn)代信號處理的高速度、高可靠性的要求[3]。Altera公司的DE1-SoC開發(fā)板是一個(gè)基于可編程技術(shù)、高度集成的硬件平臺,具有較高實(shí)時(shí)性。它采用內(nèi)嵌雙核Cortex-A9硬核處理器SoC FPGA芯片,可在硬件和軟件之間實(shí)現(xiàn)調(diào)度,滿足了圖像處理設(shè)計(jì)中功耗、性能及成本等要求。開發(fā)板的硬核處理系統(tǒng)(HPS)包括ARM處理器、SD卡、USB、存儲器等接口,硬件系統(tǒng)FPGA采用Altera公司的Cyclone V芯片,集成了視頻音頻、以太網(wǎng)等外設(shè)。兩大硬件系統(tǒng)既可獨(dú)立運(yùn)行,也可通過高速AXI內(nèi)部總線實(shí)現(xiàn)HPS和FPGA的數(shù)據(jù)訪問、數(shù)據(jù)傳輸和寄存器控制。
本文設(shè)計(jì)了一種基于FPGA和HPS硬核處理器相結(jié)合的片上系統(tǒng),結(jié)合圖像去模糊算法,采用輸入數(shù)據(jù)預(yù)處理、兩塊RAM交替存儲數(shù)據(jù)、溢出截位、流水線結(jié)構(gòu)等方式實(shí)現(xiàn)圖像去模糊系統(tǒng)中的頻域處理優(yōu)化設(shè)計(jì)。與之前其他同類系統(tǒng)中頻域處理算法相比,圖像頻域轉(zhuǎn)換精確度高、硬件資源消耗減少,并且運(yùn)行速度快。
1 系統(tǒng)的總體設(shè)計(jì)
1.1 硬件系統(tǒng)設(shè)計(jì)
本系統(tǒng)以DE1-SoC為開發(fā)平臺,包含HPS和FPGA兩部分,其中HPS搭載Linux操作系統(tǒng),借助攝像頭驅(qū)動(dòng)V4L2,負(fù)責(zé)去模糊算法執(zhí)行、外設(shè)控制及利用Qt界面實(shí)現(xiàn)人機(jī)交互。FPGA完成圖像處理模塊配置,實(shí)現(xiàn)圖像頻域轉(zhuǎn)換(Bayer-to-RGB、RGB-to-Gray、頻域轉(zhuǎn)換)以及圖像顯示子系統(tǒng),實(shí)時(shí)更新HPS中Qt界面輸出的顯示內(nèi)容。系統(tǒng)的總體框圖如圖1所示。
為研究圖像去模糊功能,預(yù)先采集一幅模糊圖像。首先將USB攝像頭固定在可滑動(dòng)三腳架上,將DE1-SoC開發(fā)板與相機(jī)、顯示器、鍵盤、鼠標(biāo)等外部設(shè)備連接,對三腳架設(shè)置一定的角度并調(diào)整好攝像頭方向,快速滑動(dòng)相機(jī),同時(shí)用鼠標(biāo)觸發(fā)捕獲按鈕,捕獲圖像。將采集到的圖像數(shù)據(jù)進(jìn)行RGB格式轉(zhuǎn)換,并將數(shù)據(jù)送到SDRAM存儲模塊對圖像數(shù)據(jù)信息進(jìn)行緩存,防止系統(tǒng)內(nèi)部時(shí)鐘頻率不同,造成采樣和顯示不一致[4]。接著,幀讀取器讀取SDRAM中緩存的數(shù)據(jù),通過VGA控制模塊將捕捉到的拍攝畫面在顯示器上顯示;同時(shí)將數(shù)據(jù)傳輸?shù)絉GB2Gray格式轉(zhuǎn)換模塊,完成灰度圖像的轉(zhuǎn)換。然后傳送到頻域轉(zhuǎn)換模塊,對圖像進(jìn)行頻域轉(zhuǎn)換。最后,應(yīng)用經(jīng)典去模糊算法進(jìn)行圖像去模糊,并利用VIP控制器通過Lightweight HPS-to-FPGA總線訪問FPGA內(nèi)部IP核,控制硬件各模塊工作。本系統(tǒng)只采用一個(gè)幀讀取器,通過配置它的寄存器來切換顯示內(nèi)容,簡化了控制邏輯,節(jié)省了FPGA硬件資源。
1.2 基于Qt圖像用戶界面設(shè)計(jì)
Qt是一個(gè)跨平臺的C++圖形用戶界面的應(yīng)用程序框架[5],具有可移植性強(qiáng)、運(yùn)算速度快、方便性等特點(diǎn)。它通過信號(signal)和插槽(slot)的方法,使對象之間在相互未知情況下進(jìn)行合作,從而實(shí)現(xiàn)真正的構(gòu)建編程[5]。并且,Qt支持UNIX系統(tǒng)、Linux系統(tǒng)、Windows等多種平臺。
本系統(tǒng)軟件部分在Linux 16.04環(huán)境下編譯,以Qt框架為基礎(chǔ),設(shè)計(jì)了一個(gè)集模糊圖像采集、顯示、修復(fù)以及人機(jī)交互界面的嵌入式軟件。在Qt的圖像用戶界面設(shè)置了5個(gè)功能按鈕,分別是打開攝像頭(Open Camera)、關(guān)閉攝像頭(Close Camera)、圖像捕獲(Image Capture)、圖像修復(fù)(Recovery)、退出界面(Exit)。三個(gè)顯示的窗口分別是視頻顯示(左上方)、捕獲圖像顯示(右上方)、模糊圖像修復(fù)結(jié)果顯示(左下方)。搭建實(shí)驗(yàn)平臺如圖2(a)所示:將USB攝像頭固定在可滑動(dòng)三腳架上,DE1-SoC開發(fā)板與相機(jī)、顯示器、鍵盤、鼠標(biāo)等外部設(shè)備相連接,DE1-SoC開發(fā)板VGA端口與顯示屏相連接,對三腳架設(shè)置一定的角度并且調(diào)整好攝像頭方向,快速滑動(dòng)相機(jī),同時(shí)用鼠標(biāo)觸發(fā)捕獲按鈕,捕獲模糊圖像,如圖2(b)所示,點(diǎn)擊圖像修復(fù)按鈕,執(zhí)行圖像去模糊算法,進(jìn)行修復(fù)處理,最終結(jié)果如圖2(c)所示。
2 FPGA核心模塊設(shè)計(jì)
在FPGA中進(jìn)行硬件核心模塊設(shè)計(jì),實(shí)現(xiàn)模糊圖像的頻域轉(zhuǎn)換。主要核心模塊由圖像灰度變換模塊、一維FFT模塊、二維FFT模塊等組成。
2.1 圖像灰度變換模塊
將采集的彩色圖像進(jìn)行頻域轉(zhuǎn)換時(shí),需要單獨(dú)計(jì)算每個(gè)顏色通道,計(jì)算量大且復(fù)雜,因而需將彩色圖像轉(zhuǎn)換到灰度圖像,以減少數(shù)據(jù)量,同時(shí)也不會損壞其圖像信息[6]。為此先將彩色圖像數(shù)據(jù)分為R、G、B三個(gè)顏色通道,分別存儲在存儲器中。為使灰度圖像處理有更好的視覺效果,根據(jù)心理學(xué)特征進(jìn)行如式(1)所示的灰度圖像轉(zhuǎn)換(Luminance法),并設(shè)計(jì)灰度圖像轉(zhuǎn)換模塊?;叶茸儞Q后完成后,將灰度圖像數(shù)據(jù)存儲在SDRAM中。
2.2 一維FFT模塊設(shè)計(jì)
FFT算法是數(shù)字圖像處理中最重要的核心算法之一,是影響圖像去模糊處理系統(tǒng)整體效率的關(guān)鍵[7]。本文采用按時(shí)域抽取的基-2 DIT算法,將初始數(shù)據(jù)分為前一半和后一半分別存儲到存儲器中,通過時(shí)序控制分別從RAM1、RAM2中采用抽取奇數(shù)點(diǎn)、偶數(shù)點(diǎn)方法進(jìn)行每一級運(yùn)算。算法主要由輸入模塊、存儲模塊、蝶形運(yùn)算模塊、溢出檢測、截位等模塊組成??傮w框圖如圖3所示。
為實(shí)現(xiàn)一維FFT,先將輸入數(shù)據(jù)進(jìn)行位擴(kuò)展,以防運(yùn)算過程中出現(xiàn)溢出時(shí)及時(shí)處理。通過時(shí)序控制,將輸入數(shù)據(jù)按照倒位序的方式存儲到指定的RAM中。為保證資源的有效利用,設(shè)置兩個(gè)存儲單元,分別存儲一半數(shù)據(jù),既保證數(shù)據(jù)流水線輸入,又提高系統(tǒng)運(yùn)算效率,節(jié)省運(yùn)算時(shí)間。通過時(shí)序控制,調(diào)用RAM中存儲數(shù)據(jù)以及ROM的蝶形運(yùn)算因子,進(jìn)行蝶形運(yùn)算。根據(jù)旋轉(zhuǎn)因子特性,只需存儲前一半的旋轉(zhuǎn)因子,后一半通過地址偏移得到,節(jié)省了存儲空間。在每一級蝶形運(yùn)算結(jié)束后,需要進(jìn)行溢出檢測,判斷是否有溢出,若有溢出需要對溢出數(shù)據(jù)進(jìn)行截位處理。最后按順序進(jìn)行數(shù)據(jù)輸出,存儲到存儲單元中。
2.3 二維FFT模塊設(shè)計(jì)
對圖像進(jìn)行二維傅里葉變換時(shí),利用變換可分性采用降維方法處理,分別對行和列進(jìn)行一維傅里葉變換。其原理為首先對行進(jìn)行一維傅里葉變換,然后對行變換后的矩陣進(jìn)行轉(zhuǎn)置(變成列方向),將矩陣轉(zhuǎn)置后再次進(jìn)行一維傅里葉變換[8]。二維傅里葉變換降維處理沒有計(jì)算順序要求,先行后列或者先列后行的處理順序不會影響數(shù)據(jù)處理結(jié)果[9]。
本文二維FFT處理模塊如圖4所示。采用FIFO作為數(shù)據(jù)緩沖池,將輸入圖像數(shù)據(jù)先經(jīng)過FIFO進(jìn)行緩存,以防FFT處理速度和圖像輸入速率不匹配[10]。從FIFO中按行讀出數(shù)據(jù),進(jìn)行行方向的一維傅里葉變換,將行變換的結(jié)果存儲到RAM存儲器中。從RAM中按列讀出數(shù)據(jù),即在RAM中完成矩陣的轉(zhuǎn)置處理,再進(jìn)行一維傅里葉變換,變換的結(jié)果再次存入RAM存儲器,再依次存入FIFO中,輸出數(shù)據(jù),此即為圖像二維傅里葉變換后的結(jié)果。由于行FFT和列FFT處理結(jié)構(gòu)完全一樣,因而只需在處理過程中對數(shù)據(jù)進(jìn)行轉(zhuǎn)置以及存儲就行。
2.4 頻域轉(zhuǎn)換模塊測試
本設(shè)計(jì)使用DE1-SoC開發(fā)板,在Quartus II 13.1開發(fā)平臺上使用Verilog HDL對各邏輯模塊進(jìn)行設(shè)計(jì)。完成模塊設(shè)計(jì)后,以DE1-SoC開發(fā)板的5CSEMA5F31C6N為目標(biāo)芯片,在Quartus II13.1上進(jìn)行綜合、布局、布線,在QuartusII環(huán)境下使用Programmer軟件,將一維FFT模塊下載到FPGA中。一維FFT模塊占用FPGA內(nèi)部主要邏輯資源如表1所示。由表1可知此設(shè)計(jì)資源占用較少。
為驗(yàn)證一維頻域轉(zhuǎn)換模塊的精度,輸入一個(gè)余弦波測試信號,如式(2)所示:
其中,信號幅值A(chǔ)=215-1,信號頻率fc=1 kHz,信號采樣頻率fs=16 kHz,采樣點(diǎn)數(shù)N=1 024。將測試信號產(chǎn)生的1 024點(diǎn)數(shù)據(jù)倒序輸入到一維FFT模塊,經(jīng)過10級蝶形運(yùn)算,按順序輸出其FFT結(jié)果。
采用QuartusII 13.1和ModelSim10.1a聯(lián)合仿真,編寫Testbench測試文件,對一維FFT模塊進(jìn)行仿真測試。由仿真結(jié)果可知,在輸入數(shù)據(jù)啟動(dòng)信號(master_sink_sop)和輸入數(shù)據(jù)有效信號(master_sink_dav)均有效的情況下,將初始數(shù)據(jù)輸入FFT模塊,通過時(shí)序控制模塊,進(jìn)行每一級的蝶形運(yùn)算。當(dāng)10級蝶形運(yùn)算結(jié)束后,系統(tǒng)輸出數(shù)據(jù)有效信號(master_source_dav)置高,輸出FFT處理后的結(jié)果。在ModelSim仿真時(shí)序圖如圖5所示。
將仿真生成的數(shù)據(jù)導(dǎo)出到OUT_I.txt、OUT_R.txt文本,再應(yīng)用 MATLAB繪圖得到基于FPGA的FFT算法處理結(jié)果,并與基于MATLAB的FFT計(jì)算結(jié)果相比較,如圖6(a)、圖6(b)所示。對比發(fā)現(xiàn)基于FPGA仿真結(jié)果與預(yù)期符合,待測頻率1 kHz在64點(diǎn)處,鏡像頻率15 kHz在960點(diǎn)處。該頻域處理模塊能夠有效地保存模糊圖像的有效信息。
3 HPS核心模塊設(shè)計(jì)
為實(shí)現(xiàn)模糊圖像清晰化,需在處理器HPS中設(shè)計(jì)圖像盲去模糊算法。圖像盲去模糊算法核心是確定點(diǎn)擴(kuò)散函數(shù)PSF,即模糊方向和模糊尺度[11]。因此,可根據(jù)圖像自身先驗(yàn)知識建立模型,獲得模糊圖像PSF后,采用經(jīng)典的圖像復(fù)原算法得到清晰圖像[12]。
3.1 運(yùn)動(dòng)模糊方向估計(jì)
運(yùn)動(dòng)模糊方向是指運(yùn)動(dòng)方向與水平方向的夾角。根據(jù)這一特性,對模糊圖像頻譜圖進(jìn)行 1°~180°的Radon變換,得到180列的變換矩陣R。由于該矩陣的任意列向量是在某一角度上沿一族直線的積分投影值,并且積分直線束與頻譜中的亮暗條紋平行,故得到的投影向量中存在最大值且為全局最大值[13]。因此,可通過Radon變換檢測出頻譜暗條紋與水平方向的夾角,估計(jì)出運(yùn)動(dòng)模糊方向。算法具體步驟如下:
(1)將M×N維模糊圖像(如圖7(a)所示)進(jìn)行灰度轉(zhuǎn)換,采用第2節(jié)的頻域轉(zhuǎn)換方法得到頻譜圖像(如圖7(b)所示);
(2)進(jìn)行邊緣檢測及二值化得到圖7(c);
(3)將二值化后頻譜圖進(jìn)行1°~180°的Radon變換,得到變換矩陣R及圖7(d);
(4)找到矩陣中最大值及其對應(yīng)的列數(shù)n;
(5)通過公式:tan(θ)=tan(n-90°)×M/N,計(jì)算得到運(yùn)動(dòng)模糊方向θ。
經(jīng)過計(jì)算得到模糊角度θ=45°(圖7(d)最亮處對應(yīng)的橫坐標(biāo)值),與真實(shí)值45°幾乎接近。
3.2 運(yùn)動(dòng)模糊尺度估計(jì)
利用頻譜圖像(圖7(b))及模糊角度θ,估計(jì)運(yùn)動(dòng)模糊尺度L。算法具體步驟如下:
(1)對模糊圖像(圖7(b))進(jìn)行θ角度旋轉(zhuǎn),得到圖8(a),再進(jìn)行濾波及二值化處理;
(2)通過中心點(diǎn)并沿垂直方向,畫出二值化后圖像強(qiáng)度分布圖;
(3)對強(qiáng)度分布圖進(jìn)行極值處理,得到極值處理圖(圖8(b)),并確定中心條紋間距2d,估算出模糊圖像的模糊長度L。
經(jīng)過計(jì)算得到模糊長度L=19.7,與真實(shí)值20接近。
4 系統(tǒng)分析
完成DE1-SoC開發(fā)系統(tǒng)的搭載,并與相機(jī)、顯示器、鍵盤、鼠標(biāo)等外部設(shè)備連接。然后將USB攝像頭固定在可滑動(dòng)三腳架上,對三腳架設(shè)置一定的角度并調(diào)整好攝像頭方向,快速滑動(dòng)相機(jī),同時(shí)用鼠標(biāo)觸發(fā)捕獲按鈕,捕獲模糊圖像如圖9(a)所示。將模糊圖像數(shù)據(jù)輸入到Bayer2RGB模塊,分R、G、B三通道存儲,進(jìn)行灰度轉(zhuǎn)換,再輸入到頻域轉(zhuǎn)換模塊,進(jìn)行頻譜變換。最后,采用圖像去模糊算法進(jìn)行圖像恢復(fù),得到恢復(fù)圖像如圖9(b)所示?;謴?fù)圖像細(xì)節(jié)清晰、穩(wěn)定。通過觀察可知,此系統(tǒng)能夠較好地實(shí)現(xiàn)攝像頭拍攝、抓拍捕獲、頻譜變換及恢復(fù)圖像等功能,并在終端完好地保存了原模糊圖像以及恢復(fù)后圖像。
5 結(jié)論
本文采用“軟硬結(jié)合”的設(shè)計(jì)方案,設(shè)計(jì)了一種集圖像采集、圖像處理和圖像傳輸為一體的去模糊系統(tǒng)。以DE1-SoC為開發(fā)平臺,在處理器HPS中搭載Linux操作系統(tǒng)和V4L2攝像頭驅(qū)動(dòng),通過Qt界面實(shí)現(xiàn)人機(jī)交互,進(jìn)行圖像采集、去模糊及顯示,在FPGA中配置Frame Reader,SDRAM、混合器等模塊,并且采用流水線的FFT算法,配置頻域轉(zhuǎn)換模塊,實(shí)現(xiàn)頻域轉(zhuǎn)換處理。該頻域轉(zhuǎn)換模塊相比于固有IP核及通用頻域轉(zhuǎn)換模塊,保證了運(yùn)算的精度,同時(shí)提高了處理速度,節(jié)省了存儲空間和硬件資源,在圖像處理上具有一定工程價(jià)值和現(xiàn)實(shí)意義。
參考文獻(xiàn)
[1] 于洪松.基于FPGA的實(shí)時(shí)圖像頻域處理[D].北京:中國科學(xué)院大學(xué),2014.
[2] 張麗君.大點(diǎn)數(shù)FFT的二維算法FPGA并行實(shí)現(xiàn)[J].無線電通信技術(shù),2013,39(3):86-88.
[3] 楊海鋼,孫嘉斌,王慰.FPGA器件設(shè)計(jì)技術(shù)發(fā)展綜述[J].電子與信息學(xué)報(bào),2010,32(3):714-727.
[4] 翁天陽,莊宇,于瑋,等.基于HPS和FPGA的圖像壓縮感知編解碼系統(tǒng)[J].電子技術(shù)應(yīng)用,2017,43(5):90-93.
[5] 嚴(yán)賢,韓秀玲.基于Qt的串口通信應(yīng)用研究與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2012,28(8):114-116.
[6] 解啟松.彩色圖像轉(zhuǎn)灰度圖像的方法研究[D].蘭州:蘭州大學(xué),2016.
[7] 袁泉,郭子祺,姚謙,等.基于并行處理的FFT快速算法[J].科學(xué)技術(shù)與工程,2008(16):4709-4714.
[8] 楊軍,于艷艷,陳成,等.基于FPGA的二維FFT處理器的研究與設(shè)計(jì)[J].云南大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,35(6):750-755.
[9] 溫博,張啟衡,張建林.高分辨圖像二維FFT正/反變換實(shí)時(shí)處理方法及硬件實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2011,28(11):4376-4379.
[10] 丁昊杰,劉敬彪,盛慶華.基于CMOS圖像傳感器的視頻采集系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012,35(14):178-181,188.
[11] 袁進(jìn),劉云飛.圖像去模糊系統(tǒng)的頻域處理改進(jìn)方法[J].電子技術(shù)應(yīng)用,2018,44(9):63-66.
[12] 程姝,趙志剛,呂慧顯,等.順序結(jié)構(gòu)的運(yùn)動(dòng)模糊圖像復(fù)原技術(shù)綜述[J].計(jì)算機(jī)應(yīng)用,2013,33(S1):161-165,185.
[13] 樂翔,程建,李民.一種改進(jìn)的基于Radon變換的運(yùn)動(dòng)模糊圖像參數(shù)估計(jì)方法[J].紅外與激光工程,2011,40(5):963-969.
作者信息:
李菁菁,劉云飛
(南京林業(yè)大學(xué) 信息科學(xué)技術(shù)學(xué)院,江蘇 南京210037)