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