楊夢(mèng)雯,李寶明,陳付亮,王洪玉(.大連理工大學(xué)信息與通信工程學(xué)院,遼寧大連603;.航天恒星科技有限公司,北京00086)
基于DSP的圖像去霧算法優(yōu)化方法*
楊夢(mèng)雯1,李寶明2,陳付亮2,王洪玉1
(1.大連理工大學(xué)信息與通信工程學(xué)院,遼寧大連116023;2.航天恒星科技有限公司,北京100086)
帶彩色恢復(fù)的多尺度視網(wǎng)膜皮層(MSRCR)去霧算法是解決霧、霾等惡劣天氣下拍攝的圖像的對(duì)比度下降和圖像特征退化問題的一類算法,可以有效改善圖像的視覺效果,但由于算法復(fù)雜度較高,實(shí)時(shí)處理困難。通過時(shí)域到頻域的轉(zhuǎn)化和基于TM320DM642本身硬件特性對(duì)MSRCR去霧算法進(jìn)行了優(yōu)化,并通過模擬仿真,實(shí)現(xiàn)了1024×1024視頻的實(shí)時(shí)處理,得到令人滿意的視覺效果。
DM642;帶彩色恢復(fù)的多尺度視網(wǎng)膜皮層;去霧;優(yōu)化
在室外拍攝的圖像或者視頻會(huì)受到空氣中懸浮粒子(如霧、霾等)的影響而發(fā)生降質(zhì),不僅圖像顏色偏灰,而且圖像特征難以辨認(rèn),這是因?yàn)榇髿庵械拇罅繎腋×W訉?duì)光線產(chǎn)生散射,引起景物的反射光線衰減,使成像后圖像的對(duì)比度和顏色等特征發(fā)生了改變,很難進(jìn)行圖像的后期處理。圖像去霧處理可以有效地將這些不良改變降低或者消除得到清晰的圖像和視頻。
圖像去霧的方法主要兩大類:一是基于圖像增強(qiáng)的;二是基于物理模型的方法[1]。目前采用較多的有在Land E H[2]提出的視網(wǎng)膜皮層(retinex)理論基礎(chǔ)上,Jobson D J等人[3]提出單尺度的Retinx(single scale retinex,SSR)和Rahan等人[4]提出多尺度Retinex(multiple scale retinex,MSR),但是SSR無法同時(shí)做到保留細(xì)節(jié)和得到較好的顏色保真度,而MSR處理后圖像色彩有失真,因此,Jobson D J等人和 Rahman Z等人[5]提出了色彩恢復(fù)多尺度 Retinex (MSRCR)算法,MSRCR算法不僅可以有效地恢復(fù)出清晰圖像,而且有很好的顏色保持和細(xì)節(jié)突出能力。
本文介紹了DM642硬件平臺(tái)的特性,分析了MSRCR算法,再根據(jù)硬件平臺(tái)和算法本身特點(diǎn),在代碼調(diào)試器(code composer studio,CCS)上對(duì)此算法進(jìn)行了計(jì)算、數(shù)據(jù)傳輸?shù)雀鞣矫娴膬?yōu)化,最終后得出結(jié)論。
TMS320DM642是TI公司基于TMS320C6000DSP平臺(tái)的高性能定點(diǎn)數(shù)字信號(hào)處理器(DSP)芯片,具有高速并行處理內(nèi)核,主頻達(dá)到600 MHz,計(jì)算能力達(dá)4800 MPIS;由于采用高級(jí)甚長(zhǎng)指令字機(jī)構(gòu),在一個(gè)周期內(nèi)可以并行處理8條32位指令,片內(nèi)還集成了3個(gè)帶視頻的先進(jìn)先出的(FIFO)高速視頻口和一個(gè)多路音頻串行口(multichannel audio serial port,McASP)。
TMS320DM642內(nèi)部具有64通道的增強(qiáng)型直接內(nèi)存存取通道(EDMA),其最高數(shù)據(jù)存取頻率為133 MHz,可以與大容量、低成本的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SDRAM)芯片無縫連接,從而保證了中央處理器(CPU)和外部器件間的高速并行數(shù)據(jù)傳輸。
2.1SSR和MSR算法
美國(guó)物理學(xué)家Land E H[6]在1971年提出了基于色彩恒常性的Retinex理論:在Retinex模型中,圖像分為照度圖像和反射圖像兩部分。照度圖像對(duì)應(yīng)于圖像中的低頻部分,由光照形成,決定了圖像中像素的動(dòng)態(tài)范圍;反射圖像對(duì)應(yīng)于圖像的高頻部分,由圖像中場(chǎng)景的反射形成,反映了圖像的內(nèi)在屬性,包含細(xì)節(jié)信息。設(shè)I(x,y)為輸入的霧化圖像,即需要處理的圖像,R(x,y)為I(x,y)的反射圖像,即
式中L(x,y)為照度圖像,(x,y)為圖像坐標(biāo)。R(x,y)決定了輸入圖像的內(nèi)在屬性,能夠反映圖像的本來面目,因此,只要從式(1)獲得反射圖像就可以實(shí)現(xiàn)圖像增強(qiáng)。
為了降低Retinex算法計(jì)算量,對(duì)式(1)兩邊取對(duì)數(shù)[7]得到式(2)
式中L(x,y)可以通過對(duì)輸入圖像I(x,y)進(jìn)行濾波得到,進(jìn)而可以得到單尺度Retinex(SSR)的表達(dá)式
式中i=1,…,N;Ii(x,y)為輸入圖像的第i個(gè)顏色通道;N為輸入圖像I(x,y)的通道個(gè)數(shù);Ri(x,y)為Retinex算法增強(qiáng)后所得到的照度圖像的第i個(gè)顏色通道;*為卷積運(yùn)算;F(x,y)為高斯環(huán)繞函數(shù)。F(x,y)表達(dá)式為
通過改變?chǔ)业闹悼梢愿淖兙矸e核的作用范圍。在此基礎(chǔ)上,通過對(duì)不同尺度的SSR處理結(jié)果進(jìn)行加權(quán)平均,便可以得到多尺度Retinex算法(MSR),即
式中i=1,…,N,Wk為與Fk(x,y)對(duì)應(yīng)的權(quán)值,通過實(shí)驗(yàn)表明,選取大、中、小三個(gè)不同尺度時(shí)效果最好,本文中,權(quán)值相同均為1/3。
2.2MSRCR算法
設(shè)輸入的RGB彩色圖像的三個(gè)顏色通道的灰度圖像分別為IR(x,y),IG(x,y),IB(x,y),增強(qiáng)后的三個(gè)顏色通道的灰度圖像分別為RR(x,y),RG(x,y),RB(x,y),則兩者應(yīng)對(duì)應(yīng)如式(6)的比例關(guān)系
但實(shí)際上,經(jīng)過增強(qiáng)后的圖像的各個(gè)顏色通道的比例發(fā)生了變化,甚至可能出現(xiàn)失真。針對(duì)這一問題提出了帶顏色恢復(fù)的多尺度Retinex算法(MSRCR)[8]。該算法引入了色彩恢復(fù)因子Ci(x,y),即
式中i∈(R,G,B)。同樣,對(duì)Ci(x,y)進(jìn)行對(duì)數(shù)變換,得到
結(jié)合式(4)和式(6),則可以得到MSRCR的數(shù)學(xué)表達(dá)式如下
式中G和b分別為增益與偏移量,α為非線性強(qiáng)度的調(diào)節(jié)因子。
3.1算法優(yōu)化流程
軟件優(yōu)化流程包括三個(gè)階段:
1)編寫 C代碼,使用 CCS開發(fā)環(huán)境下的 Profile和Clock工具對(duì)代碼進(jìn)行剖析,分析各個(gè)模塊消耗的時(shí)鐘周期。
2)利用各種優(yōu)化方法如編譯器優(yōu)化、內(nèi)聯(lián)函數(shù)和軟件流水等進(jìn)行優(yōu)化代碼。如仍達(dá)不到效率要求,則進(jìn)入第三階段。
3)對(duì)特別耗時(shí)的階段進(jìn)行匯編和線性匯編的修改。
上述三個(gè)階段在某一階段滿足了期望性能,就不必進(jìn)入下一階段。
3.2程序級(jí)優(yōu)化
3.2.1浮點(diǎn)改定點(diǎn)運(yùn)算和查表法
源代碼中的數(shù)據(jù)大多用浮點(diǎn)數(shù)進(jìn)行處理,而DM642是定點(diǎn)DSP,對(duì)整形信號(hào)可以實(shí)現(xiàn)高速處理,但處理浮點(diǎn)數(shù)時(shí)性能會(huì)大大下降。因此,將代碼中數(shù)據(jù)均采用整形數(shù)據(jù),對(duì)需要用浮點(diǎn)表示的數(shù)據(jù)進(jìn)行定點(diǎn)化[9]。
算法中涉及的顏色恢復(fù)的對(duì)數(shù)運(yùn)算,以及三個(gè)尺度的高斯函數(shù)的頻域變換,由于運(yùn)算復(fù)雜并且計(jì)算量大,均保存成數(shù)組存儲(chǔ)在SDRAM中,大大節(jié)約了計(jì)算時(shí)間。
3.2.2調(diào)整算法結(jié)構(gòu)
由式(3)可以發(fā)現(xiàn),Retinex算法的核心運(yùn)算是輸入圖像與高斯核的卷積,但在空域執(zhí)行大尺度卷積操作是十分耗時(shí)的,因此,通過頻域的乘積取代空域的卷積運(yùn)算,即
式中F(u,ν)和G(u,ν)分別為f(x,y)和g(x,y)的頻域表達(dá)式,可以通過二維離散傅里葉變換(DFT)求得[9]。利用DFT的可分離性和快速傅氏變換(FFT)具有高計(jì)算效率的特點(diǎn),本文通過對(duì)輸入圖像的行先進(jìn)行一維FFT,然后再對(duì)變換后的結(jié)果進(jìn)行列一維FFT來完成二維DFT,優(yōu)化的dsplib中的FFT函數(shù)要求輸入的點(diǎn)數(shù)必須為2的整數(shù)次冪,因此,需要對(duì)圖像進(jìn)行Retinex處理前剪切成大小為1 024×1024,這樣,一維FFT的總點(diǎn)數(shù)是2 048點(diǎn)。具體流程如下:
1)設(shè)輸入圖像為二維矩陣,首先,對(duì)每一行進(jìn)行FFT,然后將圖像轉(zhuǎn)置,再對(duì)每行進(jìn)行FFT,將變換后得到的矩陣與高斯函數(shù)的頻域變換矩陣點(diǎn)乘。
2)將矩陣的每行進(jìn)行快速傅氏逆變換(IFFT),然后將矩陣轉(zhuǎn)置,再對(duì)每行進(jìn)行IFFT,就可以得到輸出圖像矩陣。
由于當(dāng)數(shù)據(jù)位于cache時(shí),處理器對(duì)數(shù)據(jù)存取的速度最快,而輸入圖像為2 048 kB,遠(yuǎn)遠(yuǎn)大于DSP的片上內(nèi)存,不能高效利用內(nèi)存的高速運(yùn)算特性,因此,首先對(duì)圖像進(jìn)行下采樣得到256×256的圖像,然后對(duì)采樣的圖像運(yùn)用MSRCR算法進(jìn)行去霧處理,再對(duì)處理后的圖像進(jìn)行插值,即得到了結(jié)果圖像。
3.3代碼優(yōu)化
3.3.1項(xiàng)目級(jí)的優(yōu)化
進(jìn)行項(xiàng)目級(jí)的優(yōu)化,主要是通過對(duì)編譯器進(jìn)行優(yōu)化實(shí)現(xiàn)的。編譯器優(yōu)化指的是使用C編譯器產(chǎn)生匯編代碼文件,過程中最大化使用C6000的核心功能性單元和CPU核心的流水線,通過編譯器自動(dòng)對(duì)代碼進(jìn)行優(yōu)化,可以顯著提升代碼的執(zhí)行效率。主要設(shè)定的編譯器優(yōu)化[10]選項(xiàng)如表1所示。
表1 編譯器優(yōu)化Tab 1 Optimation of compiler
3.3.2內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)可以直接映射為內(nèi)聯(lián)的C6000匯編指令,用下劃線“_”標(biāo)志,使用方法與普通函數(shù)一樣,但執(zhí)行效率近與匯編,可以大大提升代碼執(zhí)行效率[10]。本文用到的內(nèi)聯(lián)指令主要有_mpy(),_mpyhlu()等。
3.3.3去除存儲(chǔ)器的相關(guān)性
為了最大程度地提高代碼的執(zhí)行效率,C6000編譯器盡可能地并行執(zhí)行指令,編譯器必須確定指令之間的獨(dú)立性[11],通過下面的方法可以判斷指令間的獨(dú)立性:使用“restrict”關(guān)鍵字來聲明指針的唯一性;使用const關(guān)鍵字,能夠使編譯器判斷內(nèi)存操作之間的相關(guān)性,實(shí)現(xiàn)多重循環(huán)體之間的軟件流程。
3.3.4線性匯編
本文通過使用TI dsplib庫中的DSP_fft16x32和DSP_ ifft16x32線性匯編函數(shù)進(jìn)行每行的FFT和IFFT,大大提高了運(yùn)算速度。其中,兩個(gè)函數(shù)均調(diào)用了tw_fft16x32生成轉(zhuǎn)換過程中需要的系數(shù),因此,將tw_fft16x32生成的系數(shù)保存在數(shù)組里,從而減少了運(yùn)算,進(jìn)一步提高了運(yùn)算效率。
3.3.5其他優(yōu)化
除此之外,還有一些其他的優(yōu)化方法,將一些使用頻繁的函數(shù),使用宏來實(shí)現(xiàn);或是將一些使用頻繁的函數(shù)用inline聲明,作為內(nèi)聯(lián)函數(shù),可以提高代碼的整體運(yùn)行速度,減少函數(shù)的調(diào)用。將一些較小的函數(shù)在調(diào)用處展開,使用邏輯判斷代替if…else語句;使用移位操作代替乘除運(yùn)算,可以節(jié)約CPU時(shí)間[12]等。
本文通過在CCS仿真平臺(tái)進(jìn)行了1024×1024的單幅圖像的去霧處理,仿真實(shí)驗(yàn)表明,單幅圖像在主頻3.0 GHz 的PC上根據(jù)Profile測(cè)試1 024×1 024圖像處理部分需要的時(shí)間,優(yōu)化前為2936 ms,優(yōu)化后為57 ms。
通過仿真實(shí)驗(yàn)數(shù)據(jù)表明,優(yōu)化之后算法的運(yùn)算速度有了大幅提高。由于視頻圖像間的連續(xù)性,圖像差別較小,通過對(duì)連續(xù)讀入的圖像跳幀處理,模擬了1 024×1 024的視頻處理,測(cè)試得到處理一幀圖像的時(shí)間約為36 ms,理論上視頻處理可以滿足實(shí)時(shí)處理的要求。
本文通過對(duì)MSRCR算法的優(yōu)化,通過仿真實(shí)驗(yàn)?zāi)M了對(duì)1024×1024的視頻的處理,實(shí)驗(yàn)結(jié)果表明:該算法能夠達(dá)到25幀/s的處理速度。但由于圖像處理過程中存在縮放操作,清晰度有待提高,可以通過進(jìn)一步優(yōu)化或者圖像的后期處理進(jìn)行改善。
[1]Narasimhan S G,Nayar S K.Contrast restoration of weather degraded images[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2003,25(6):713-724.
[2]Land E H.Recent advances in retinex theory and some implications for cortical computations:Color vision and the natural image[C]∥Proceedings of the National Academy of Sciences,1983:5163-5169.
[3]Jobson D J,Rahman Z,Woodell G.Properties and performance of a center/surround retinex[J].IEEE Transactions on Image Processing,1997,6(3):451-462.
[4]Jobson D J,Rahman Z,Woodell G.A multiscale retinex for bridging the gap between color images and the human observation of scenes[J].IEEE Transactions on Image Processing,1997,6(7):965-976.
[5]Rahman Z,Jobson D J,Woodell G.Multi-scale retinex for color image enhancement[C]∥IEEE International Conference on Image Processing,1996:1003-1006.
[6]Land E H.The retinex theory of color vision[J].Scientific American,1977,237(6):108-128.
[7]黃義明.霧霾天氣下圖像增強(qiáng)算法的研究[D].大連:大連理工大學(xué),2013:37-40.
[8]趙全友,潘保昌,鄭勝林,等.種顏色保持的彩色圖像增強(qiáng)新算法[J].計(jì)算機(jī)應(yīng)用,2008,28(2):2-3.
[9]劉華.基于DM642的嵌入式霧天實(shí)時(shí)處理算法研究與實(shí)現(xiàn)[D].上海:上海交通大學(xué),2009:42-47.
[10]Texas Instruments.TMS320C6000 assembly language tools V6.1,literature number:SPRU187[EB/OL].[2000—01—20].http:∥www.ti.com.cn/cn/lit/ug/spru186q.
[11]Texas Instruments.TMS320C6000 optimizing C compiler tutorial,literature number:SPRU425A[EB/OL].[2002—08—25].http:∥www.ti.com.cn/lit/ug/spru425.
[12]田元,葉秀清.實(shí)時(shí)圖像處理系統(tǒng)中的DSP優(yōu)化編程[J].電子技術(shù),2000,27(10):43-46.
Optimization method of image defogging algorithm based on DSP*
YANG Meng-wen1,LI Bao-ming2,CHEN Fu-liang2,WANG Hong-yu1
(1.School of Information and Communication Engineering,Dalian University of Technology,Dalian 116023,China;2.Space Star Technology Co Ltd,Beijing 100086,China)
Multiple-scale retinex with color restoration(MSRCR)is a defogging algorithm which can solve problem of contrast decline of image and degradation of image feature caused by haze and fog,it can effectively improves visual effect of image,but cannot ensure real-time processing due to high complexity of algorithm.Optimization is carried out on MSRCR algorithm based on hardware characteristics of TM320DM642 and transformation of time domain to frequency domain,achieve real-time processing of video with size of 1024×1024 by simulation and obtain satisfied visual effect.
DM642;multiple-scale retinex color restoration(MSRCR);defogging;optimization
TP391.9
A
1000—9787(2016)06—0136—03
2015—10—22
教育部博士點(diǎn)基金資助項(xiàng)目(20120041110011)
楊夢(mèng)雯(1990-),女,河南新鄉(xiāng)人,碩士研究生,主要研究方向?yàn)閳D像增強(qiáng)處理。