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