文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.173727
中文引用格式: 董夢莎,張尤賽,王亞軍. 基于ZYNQ的Retinex實(shí)時(shí)圖像去霧[J].電子技術(shù)應(yīng)用,2018,44(4):52-55.
英文引用格式: Dong Mengsha,Zhang Yousai,Wang Yajun. Retinex algorithm for real-time image defogging based on ZYNQ[J]. Application of Electronic Technique,2018,44(4):52-55.
0 引言
由于霧霾天氣會(huì)造成戶外視覺系統(tǒng)所獲取的圖像質(zhì)量嚴(yán)重退化,不僅模糊不清、對(duì)比度降低,而且還會(huì)出現(xiàn)嚴(yán)重的色彩偏移和失真,從而影響戶外視覺系統(tǒng)的穩(wěn)定性和準(zhǔn)確性[1-2]。因此,對(duì)霧霾天氣引起的降質(zhì)圖像進(jìn)行有效、快速的去霧處理顯得極為重要。
常見的去霧方法有兩類:基于圖像復(fù)原的去霧方法和基于圖像增強(qiáng)的去霧方法[3]。前者是從圖像退化的原因出發(fā),建立去霧圖像的物理模型,根據(jù)該模型來恢復(fù)出清晰的去霧圖像。該類方法去霧效果良好,但算法復(fù)雜度較大,不便于在硬件平臺(tái)上實(shí)現(xiàn)?;趫D像增強(qiáng)的去霧方法不考慮圖像霧化的原因和機(jī)理,而是有選擇性地增強(qiáng)需要的細(xì)節(jié)信息。屬于此類的去霧方法常用的是Retinex算法[4]。Retinex算法能較好地保留圖像的邊緣等細(xì)節(jié)信息,處理后的圖像具有亮度適中、對(duì)比度高等優(yōu)點(diǎn)?,F(xiàn)有去霧算法多數(shù)在PC上實(shí)現(xiàn),其移植性和靈活性等均限制了在戶外視頻系統(tǒng)中的應(yīng)用。
ZYNQ是一種Xilinx體系的全可編程片上系統(tǒng)(All Programmable System on Chip),集成了雙核ARM Cortex-A9和FPGA,擁有大量邏輯單元、數(shù)字信號(hào)處理器(Digital Signal Processor,DSP)等資源,能夠滿足戶外視頻系統(tǒng)的實(shí)時(shí)處理、小型化、可嵌入、可移植和低功耗等性能要求。
據(jù)此,本文提出一種基于ZYNQ的Retinex實(shí)時(shí)圖像去霧方法,利用ZYNQ的ARM+FPGA軟硬件協(xié)同的方式來提高戶外視頻系統(tǒng)的圖像去霧性能。為了降低算法復(fù)雜度以及顏色保真,該方法在HSV顏色空間對(duì)亮度分量V進(jìn)行Retinex去霧處理,對(duì)飽和度S做線性拉伸來擴(kuò)展動(dòng)態(tài)范圍,保持色調(diào)H不變以避免顏色失真。在實(shí)現(xiàn)架構(gòu)上,由ARM完成一些簡單計(jì)算,如Retinex算法中的對(duì)數(shù)、減法運(yùn)算以及線性拉伸、顏色空間轉(zhuǎn)換等,而將高斯核函數(shù)與圖像的二維卷積這種復(fù)雜耗時(shí)的計(jì)算交由FPGA采用并行算法來提高實(shí)時(shí)處理速度,ARM與FPGA之間的數(shù)據(jù)交互則由片內(nèi)總線AXI4(Advanced eXtensible Interface 4)來承擔(dān)[5]。
1 傳統(tǒng)Retinex算法
Retinex理論認(rèn)為一幅圖像可分解為圖像入射分量和反射分量,即:
2 算法優(yōu)化
傳統(tǒng)Retinex算法中對(duì)圖像R、G、B 3個(gè)通道分別進(jìn)行處理,容易造成顏色失真,而且在硬件實(shí)現(xiàn)中計(jì)算量非常大,難以滿足系統(tǒng)的實(shí)時(shí)性要求。因此,本文采用基于HSV顏色空間的Retinex算法。將帶霧圖像由RGB顏色空間轉(zhuǎn)換到HSV顏色空間,得到相關(guān)性較小的色調(diào)H、飽和度S和亮度V,保持圖像的H分量不變,對(duì)飽和度分量S進(jìn)行線性拉伸,僅對(duì)V分量進(jìn)行單尺度Retinex算法處理,這樣既可以降低算法的計(jì)算量,又可以避免傳統(tǒng)Retinex算法容易造成顏色失真的缺陷。算法流程圖如圖1所示。
具體實(shí)施步驟如下:選取合適的σ值和模板大小,根據(jù)式(4)構(gòu)造高斯核函數(shù);將帶霧圖像從RGB顏色空間轉(zhuǎn)換到HSV顏色空間;根據(jù)Retinex算法,對(duì)亮度分量V取對(duì)數(shù)得到V1;將分量V代入式(3)與高斯核函數(shù)卷積,然后取對(duì)數(shù)得到環(huán)境光的照度估計(jì)值V2;V1分量和V2分量相減,得到經(jīng)去霧算法處理后的亮度分量V3;對(duì)飽和度分量S進(jìn)行拉伸得到S1;將色調(diào)分量H、拉伸后的飽和度分量S1以及經(jīng)Retinex算法處理后得到的亮度分量V3轉(zhuǎn)化到RGB色彩空間并輸出,完成圖像去霧過程。
3 硬件平臺(tái)實(shí)現(xiàn)
硬件平臺(tái)是基于Zynq-7010的開發(fā)板,采用ARM+ FPGA的方式完成圖像去霧系統(tǒng)的設(shè)計(jì)[6]。圖像去霧系統(tǒng)中,圖像數(shù)據(jù)作為數(shù)據(jù)輸入;對(duì)數(shù)模塊、顏色空間轉(zhuǎn)換模塊、減法器、線性拉伸S模塊以及顯示控制在ARM中完成;計(jì)算量大、占用時(shí)間長的卷積運(yùn)算放在FPGA中運(yùn)行。
3.1 圖像數(shù)據(jù)的規(guī)格化
為了提高計(jì)算速度,降低FPGA資源消耗,設(shè)計(jì)中使用定點(diǎn)數(shù)保存數(shù)據(jù)并進(jìn)行計(jì)算。實(shí)驗(yàn)表明,對(duì)于圖像數(shù)據(jù)HSV的值域[0,1],當(dāng)誤差小于4×10-3時(shí),不會(huì)出現(xiàn)明顯的圖像細(xì)節(jié)信息的丟失。因此用0.003 906規(guī)格化圖像數(shù)據(jù)的值域[0,1],即可采用如圖2所示的8 bit二進(jìn)制定點(diǎn)小數(shù)來表示圖像數(shù)據(jù),小數(shù)點(diǎn)固定在最高位左邊,表示范圍為[0,0.996],最小分辨率為(0.00000001)2≈0.003 906。
3.2 ARM部分算法實(shí)現(xiàn)
3.2.1 對(duì)數(shù)模塊
Retinex算法中需要對(duì)帶霧圖像I(x,y)和圖像的入射分量(環(huán)境光的照度)L(x,y)進(jìn)行對(duì)數(shù)運(yùn)算。在ZYNQ系統(tǒng)中為了降低量化誤差和提高運(yùn)算的實(shí)時(shí)性,這里采用以2為底的對(duì)數(shù)查找表方法來實(shí)現(xiàn)對(duì)數(shù)運(yùn)算。
由于圖像數(shù)據(jù)I(x,y)、L(x,y)已被規(guī)格化為圖2所示的8 bit二進(jìn)制定點(diǎn)小數(shù),因此其值域∈[0,0.996],最小分辨率為0.003 906,共有256個(gè)數(shù)據(jù)值。其中0的對(duì)數(shù)值是-∞,無法對(duì)其直接量化,故將[0,0.995]分為{0}∪[0.003 9,0.995]兩個(gè)部分。[0.003 9,0.995]對(duì)應(yīng)的對(duì)數(shù)域∈[-8,-0.007],在誤差小于4×10-3時(shí),對(duì)數(shù)值可采用1 bit符號(hào)位+7 bit整數(shù)位+8 bit小數(shù)位共16 bit的有符號(hào)二進(jìn)制定點(diǎn)數(shù)表示;log20用16 bit有符號(hào)二進(jìn)制定點(diǎn)數(shù)能表示的最大負(fù)數(shù)-128來近似。最后將量化之后的256個(gè)16 bit的對(duì)數(shù)值存于查找表LUT[ ]中。
用X統(tǒng)一表示圖像數(shù)據(jù)I(x,y)、L(x,y)已被規(guī)格化的8 bit二進(jìn)制定點(diǎn)小數(shù),用Y表示對(duì)數(shù)運(yùn)算結(jié)果的16 bit有符號(hào)二進(jìn)制定點(diǎn)數(shù),則上述對(duì)數(shù)查找表方法可以表示為:
式中函數(shù)int( )表示二進(jìn)制數(shù)取整。
3.2.2 線性拉伸S
在去霧過程中,伴隨著圖像亮度V的增強(qiáng),飽和度S會(huì)相對(duì)有所降低。因此為了保持圖像顏色原有的鮮艷程度,還需要增強(qiáng)圖像的飽和度S。這里采用三段線性拉伸的方式對(duì)飽和度S進(jìn)行拉伸處理。
3.3 FPGA部分算法實(shí)現(xiàn)
3.3.1 高斯核函數(shù)的規(guī)格化
實(shí)驗(yàn)仿真表明,當(dāng)σ=40,濾波模板為101×101時(shí),Retinex算法的去霧效果較好。此時(shí),高斯核函數(shù)的值域?yàn)閇2.085×10-5,9.947×10-5],數(shù)值較小,如果直接量化,數(shù)據(jù)位數(shù)較寬,而且會(huì)增大資源消耗。由于卷積運(yùn)算是線性運(yùn)算,因此可以先將高斯核函數(shù)擴(kuò)大表示,然后再將卷積的結(jié)果縮小相同的倍數(shù),而不會(huì)影響最終計(jì)算結(jié)果。這里將高斯核函數(shù)擴(kuò)大27倍,擴(kuò)大之后的高斯濾波函數(shù)的值域?yàn)閇0.002 7,0.012 7],誤差小于2.56×10-4,去霧圖像沒有明顯的細(xì)節(jié)信息丟失。然后用2.44×10-4規(guī)格化擴(kuò)大27倍的高斯核函數(shù)的值域[0.002 7,0.012 7],即用1 bit符號(hào)位+3 bit整數(shù)位+12 bit小數(shù)位共計(jì)16 bit二進(jìn)制定點(diǎn)小數(shù)來表示,如圖3所示,值域?yàn)閇-8,7],最小分辨率為(0.000000000001)2≈2.44×10-4,能夠滿足精度要求。最后將量化成定點(diǎn)數(shù)的高斯核函數(shù)的值以行的形式存儲(chǔ)為初始化文件,直接以ROM的形式固化到FPGA的塊隨機(jī)存取存儲(chǔ)器(Block RAM,BRAM)中。
3.3.2 卷積模塊
卷積運(yùn)算是由大量的矩陣乘法和加法運(yùn)算組成的,由于其算法是并行結(jié)構(gòu),設(shè)計(jì)中將卷積運(yùn)算放在芯片的FPGA中完成,算法整體框架結(jié)構(gòu)如圖4所示。
ARM通過AXI4總線將圖片數(shù)據(jù)和控制信息分別發(fā)送給FPGA的控制寄存器CTRL_reg和圖像數(shù)據(jù)寄存器Row_reg,并通過AXI4讀取控制寄存器的當(dāng)前狀態(tài)和卷積寄存器Result_reg中的結(jié)果。
卷積運(yùn)算頂層模塊由高斯核函數(shù)ROM塊Coe_ROM、圖像塊RAM Img_RAM和計(jì)算模塊CALC_Module 3部分組成,卷積使用的高斯核函數(shù)存儲(chǔ)在FPGA的BRAM中,以ROM的形式進(jìn)行讀取,圖像塊RAM大小與濾波核大小相同,主控程序分別從Coe_ROM和Img_RAM中讀取高斯核函數(shù)和像素?cái)?shù)據(jù)送入計(jì)算模塊進(jìn)行計(jì)算,并將計(jì)算的結(jié)果送入結(jié)果寄存器Result_reg。
由于高斯濾波核是90°旋轉(zhuǎn)對(duì)稱的,而且高斯核函數(shù)在程序中不發(fā)生改變,為了節(jié)省存儲(chǔ)空間和減少邏輯控制的復(fù)雜度,在程序中只存儲(chǔ)高斯核函數(shù)的上半部分,組成高斯核函數(shù)結(jié)構(gòu)如圖5所示。
為了提高計(jì)算速度,圖像數(shù)據(jù)RAM塊使用移位寄存的方式保存,圖像RAM塊采用從上到下、從左到右的方式滑動(dòng),在每一列的頂端重新準(zhǔn)備卷積的數(shù)據(jù),然后卷積塊向下滑動(dòng),每計(jì)算一個(gè)點(diǎn),向下滑動(dòng)一行,圖像塊RAM的移位寄存器結(jié)構(gòu)如圖6所示。
4 實(shí)驗(yàn)結(jié)果與分析
實(shí)驗(yàn)中,硬件平臺(tái)使用基于Zynq-7010的黑金開發(fā)板ALINX7010, FPGA時(shí)鐘為250 MHz,編程使用Xilinx公司提供Vivado 2016.3,并使用自帶仿真軟件進(jìn)行仿真。
4.1 實(shí)驗(yàn)結(jié)果
為了驗(yàn)證所提出的方法的性能,實(shí)驗(yàn)中將所提出的方法與在PC(Core i5 6600K,4.1 GHz主頻,16 GB內(nèi)存,MATLAB 2013a)實(shí)現(xiàn)的Retinex算法進(jìn)行了性能比較。兩種實(shí)現(xiàn)方法均選取σ=40,高斯模板大小為101×101。
FPGA資源占用指標(biāo)包括:LUT、查找表RAM(LUTRAM)、BRAM、DSP等。表1給出了ZYNQ硬件部分FPGA 4種資源占用表。
實(shí)驗(yàn)中采用峰值信噪比、信息熵、運(yùn)行時(shí)間作為評(píng)估圖像去霧效果的3個(gè)客觀技術(shù)指標(biāo)。峰值信噪比是用于描述信號(hào)最大可能功率和影響它的破壞性噪聲功率的比值。信息熵是衡量圖像所含信息量、圖像細(xì)節(jié)的豐富程度的技術(shù)指標(biāo),熵值越大圖像所含信息量越大,圖像細(xì)節(jié)越豐富[7]。
圖7給出了3組圖像去霧實(shí)驗(yàn)的效果對(duì)比圖,表2則為上述3組實(shí)驗(yàn)示例在PC實(shí)現(xiàn)的Retinex算法和所提出的方法的峰值信噪比、信息熵、運(yùn)行時(shí)間3個(gè)性能指標(biāo)的對(duì)比。
4.2 結(jié)果分析
從表1可以看出,LUT占用FPGA資源76.31%,LUTRAM、BRAM、DSP占用FPGA資源均在50%左右,表明整個(gè)系統(tǒng)消耗Zynq-7010資源較少,即所需要的硬件成本較低,能滿足實(shí)際工程的需求。
從圖7的A、B、C 3組圖像可以看出,經(jīng)PC實(shí)現(xiàn)的Retinex算法和本文提出的圖像去霧方法均有明顯的去霧效果。
從表2可以看出,經(jīng)兩種算法處理后的峰值信噪比均達(dá)到了50 dB以上,能夠有效濾除圖像中的霧霾引起的噪聲,改善圖像的清晰度。處理后的圖像的信息熵比帶霧圖像均有所提高,說明經(jīng)過去霧處理后的圖像細(xì)節(jié)信息得到了增強(qiáng)。本文提出的方法相比于PC上傳統(tǒng)的Retinex去霧算法,在峰值信噪比、信息熵等指標(biāo)上達(dá)到了同等水平,而運(yùn)算速度則提高了28倍以上,達(dá)到了每秒25幀以上的實(shí)時(shí)處理速度。實(shí)驗(yàn)結(jié)果表明,在ZYNQ平臺(tái)上實(shí)現(xiàn)圖像去霧,在保證去霧效果良好的情況下,具有運(yùn)算速度快、可移植性高、功耗低等優(yōu)點(diǎn),可以滿足戶外視頻系統(tǒng)的實(shí)用要求。
參考文獻(xiàn)
[1] Zhang Jingjun,Ding Yifan,Yang Yi,et al.Real-time defog model based on visible and near-infrared information[C].IEEE International Conference on Multimedia & Expo Workshops.IEEE Computer Society,2016:1-6.
[2] WANG Y K,F(xiàn)AN C T.Single image defogging by multiscale depth fusion[J].IEEE Transactions on Image Processing,2014,23(11):4826-4837.
[3] 高全明,孫俊喜,劉廣文,等.基于FPGA的交通視頻快速去霧系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2017,43(6):71-74.
[4] 曹永妹,張尤賽.圖像去霧的小波域Retinex算法[J].江蘇科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,28(1):50-55,62.
[5] 張艷輝,郭洺宇,何賓.Vivado HLS嵌入式實(shí)時(shí)圖像處理系統(tǒng)的構(gòu)建與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(9):115-117.
[6] 梁新宇.基于ZYNQ的行人檢測系統(tǒng)軟硬件協(xié)同實(shí)現(xiàn)[D].大連:大連海事大學(xué),2016.
[7] Guo Fan,Cai Zixing.Objective assessment method for the clearness effect of image defogging algorithm[J].Acta Automatica Sinica,2012,38(9):1410.
作者信息:
董夢莎,張尤賽,王亞軍
(江蘇科技大學(xué) 電子與信息學(xué)院,江蘇 鎮(zhèn)江212003)