李輝,解維浩,劉壽生,蓋穎穎
(山東省科學(xué)院海洋儀器儀表研究所,山東 青島 266001)
?
基于GPU的多尺度Retinex圖像增強(qiáng)算法實(shí)現(xiàn)
李輝,解維浩,劉壽生,蓋穎穎
(山東省科學(xué)院海洋儀器儀表研究所,山東 青島 266001)
為提高多尺度Retinex算法的實(shí)時(shí)性,本文提出了基于GPU的多尺度Retinex圖像增強(qiáng)算法,通過對(duì)算法進(jìn)行數(shù)據(jù)分析和并行性挖掘,將高斯濾波、卷積和對(duì)數(shù)差分等計(jì)算量非常耗時(shí)的模塊放到GPU中,利用大規(guī)模并行線程處理來提高效率。在GeForce GTX 480和CUDA 5.5中進(jìn)行實(shí)驗(yàn),結(jié)果表明該算法能顯著提高計(jì)算速度,且隨著圖像分辨率的增加,最大加速比達(dá)160倍。
圖像增強(qiáng);多尺度Retinex;GPU;CUDA;并行計(jì)算
圖像增強(qiáng)是指通過一定的技術(shù)有選擇地突出圖像中感興趣的特征,抑制或掩蓋某些不需要的特征,從而增強(qiáng)圖像中的有用信息,改善圖像的視覺效果。圖像增強(qiáng)的方法主要有兩大類:頻率域法和空間域法,常見的增強(qiáng)技術(shù)主要有直方圖均衡化、小波變換以及同態(tài)濾波等[1-3]。由于這些方法在應(yīng)用中的局限性,使得增強(qiáng)效果有限。直方圖均衡化會(huì)合并灰度值出現(xiàn)概率較小的像素,導(dǎo)致圖像細(xì)節(jié)丟失而使局部模糊;小波變換缺乏平移不變性,會(huì)產(chǎn)生Gibbs失真效果,且對(duì)于亮度不足或非均勻的圖像處理效果一般;同態(tài)濾波缺乏自適應(yīng)性,并且前提是假設(shè)光照均勻,對(duì)于存在暗區(qū)和高光區(qū)的夜間圖像處理效果差。
多尺度Retinex算法同時(shí)保持圖像的高保真度和對(duì)圖像的動(dòng)態(tài)范圍進(jìn)行壓縮,增強(qiáng)效果好。該算法采用卷積進(jìn)行大量運(yùn)算來實(shí)現(xiàn)動(dòng)態(tài)范圍壓縮和顏色/亮度再現(xiàn),但由于算法的卷積、對(duì)數(shù)差分等操作計(jì)算數(shù)據(jù)量大、處理時(shí)間長(zhǎng),很難在對(duì)實(shí)時(shí)性要求較高的視頻實(shí)時(shí)處理等場(chǎng)合中應(yīng)用。因此,必須有效減少該算法的處理時(shí)間,以滿足更多實(shí)時(shí)性應(yīng)用場(chǎng)景的需求。
近年來,圖形處理器(graphics processing unit,GPU)被應(yīng)用于大規(guī)模計(jì)算,其多線程以及多核心處理器特別適用于數(shù)據(jù)的并行化計(jì)算[4]。CUDA(compute unified device architecture)架構(gòu)使用SIMT(single-instruction-thread, multi-thread)模型,是一個(gè)可以用來實(shí)現(xiàn)細(xì)粒度的并行性的軟件平臺(tái),利用CUDA編寫的程序靈活而高效。本文提出了一種基于GPU CUDA的多尺度Retinex算法,該算法利用大規(guī)模并行線程和GPU的異構(gòu)存儲(chǔ)器層次結(jié)構(gòu)來提高算法的執(zhí)行效率。
Retinex算法的產(chǎn)生與發(fā)展是基于Land[5]提出的顏色恒常知覺的計(jì)算理論,其構(gòu)成是retina(視網(wǎng)膜)和cortex(皮層)。Retinex是消除環(huán)境光干擾的一種有效方法,并且已經(jīng)被用來作為一個(gè)預(yù)處理步驟應(yīng)用在許多圖像和視頻應(yīng)用中,如視頻壓縮、高動(dòng)態(tài)范圍成像以及人臉識(shí)別等。Retinex是一種非線性機(jī)制,可以通過模擬人類顏色感知來實(shí)現(xiàn)顏色的恒常性,可以適應(yīng)不同的光線條件并提高感知的圖像的視覺質(zhì)量。Land首次提出了一個(gè)人類視覺感知的亮度和顏色模型,Retinex模型[6]是以照度反射成像模型為基礎(chǔ)的,相比反射光,照射光的變化更為平滑,因此可以使用低通濾波對(duì)輸入圖像進(jìn)行模糊運(yùn)算來估計(jì);反射光的計(jì)算則通過輸入圖像與平滑圖像的相除來進(jìn)行。
Retinex理論[7]的基本思想是通過去除或降低亮度圖像的影響,保留物體的反射圖像特征。根據(jù)Land提出的Retinex模型,將一幅圖像定義為L(zhǎng)(x,y):
(1)
式中,E(x,y)表示亮度圖像,R(x,y)是指物體的反射圖像,與照射光無關(guān),它包含了物體的細(xì)節(jié)特征。
Retinex算法分為單尺度Retinex(single-scale retinex, SSR)、多尺度Retinex(multi-scale retinex, MSR)和帶彩色恢復(fù)的多尺度Retinex算法(multi-scale retinex with color restoration, MSRCR)。本文采用多尺度Retinex圖像增強(qiáng)算法,設(shè)原始圖像為I(x,y),反射圖像為R(x,y),F(xiàn)(x,y)為低通卷積函數(shù),W為權(quán)值,該算法可用下式描述:
(2)
其中,*表示卷積運(yùn)算,環(huán)境函數(shù)F(x,y)可以表示為:
(3)
即高斯濾波函數(shù),其中K是常量值,該值是通過實(shí)驗(yàn)來確定的。
基于多尺度Retinex理論,設(shè)置每個(gè)尺度的權(quán)值為1/3,通過在原圖像中去除亮度圖像即光源亮度的影響,得到對(duì)物體反射光線顏色的本質(zhì)描述,以增強(qiáng)夜間圖像。
2.1 CUDA簡(jiǎn)介
CUDA是由NVIDIA[8]提出的通用并行計(jì)算架構(gòu),該架構(gòu)通過利用GPU的處理能力,可大幅提升計(jì)算性能。
在GPU CUDA硬件體系結(jié)構(gòu)中,一個(gè)GPU內(nèi)有許多SM(streaming multiprocessor),類似CPU的核,一個(gè)SM配備若干個(gè)SP(streaming processor)。SP,即CUDA核,是CUDA最基本的處理單元,具體的指令和任務(wù)都是在SP上處理的。GPU進(jìn)行并行計(jì)算,也就是多個(gè)SP的并行處理。
GPU中的每個(gè)SM都支持?jǐn)?shù)以百計(jì)的線程并行執(zhí)行,并且每個(gè)GPU都包含了很多的SM,所以GPU支持成百上千的線程并行執(zhí)行。當(dāng)一個(gè)CUDA核(Kernel)啟動(dòng)后,線程(Thread)會(huì)被分配到這些SM中執(zhí)行。大量的線程可能會(huì)被分配到不同的SM,同一個(gè)線程塊(Block)中的所有線程在同一個(gè)SM中并行執(zhí)行。每個(gè)線程擁有自己的程序計(jì)數(shù)器和狀態(tài)寄存器,并且用該線程自己的數(shù)據(jù)執(zhí)行指令,這就是所謂的SIMT[9]。
2.2 CUDA線程模型
GPU中的線程是以網(wǎng)格(Grid)的方式進(jìn)行組織的,每個(gè)網(wǎng)格包含若干個(gè)線程塊,而每個(gè)線程塊由若干個(gè)線程組成,線程是CUDA中的基本執(zhí)行單元,線程塊的結(jié)構(gòu)可以是一維、二維或三維。同一線程塊中的線程具有相同的指令地址,不僅能夠并行執(zhí)行,而且能夠通過共享存儲(chǔ)器(Shared Memory)和柵欄(Barrier)實(shí)現(xiàn)塊內(nèi)通信。如圖1所示為CUDA內(nèi)存訪問模型。
使用CUDA進(jìn)行編寫的代碼既適用于主機(jī)處理器(CPU),也適用于設(shè)備處理器(GPU)[10]。主機(jī)處理器負(fù)責(zé)派生出運(yùn)行在GPU設(shè)備處理器上的多線程任務(wù)(CUDA稱其為內(nèi)核程序),當(dāng)這些任務(wù)有足夠的并行度時(shí),隨著GPU中SM的增加,程序的運(yùn)算速度就會(huì)提升。圖2所示為CUDA線程模型。
圖1 CUDA內(nèi)存訪問模型Fig.1 CUDA memory access model
圖2 CUDA線程模型Fig.2 CUDA thread model
2.3 CUDA編程模型
由于多尺度Retinex算法在對(duì)輸入圖像進(jìn)行處理時(shí),圖像的R、G、B分量在進(jìn)行高斯濾波、卷積和對(duì)數(shù)空間差分等操作時(shí)是單獨(dú)計(jì)算的,各數(shù)據(jù)之間相互獨(dú)立,符合CUDA的SIMT特性,因此可以進(jìn)行高性能并行處理。
在進(jìn)行CUDA編程時(shí),通常將程序分為兩個(gè)部分:主機(jī)(Host)端和設(shè)備(Device)端[11-12]。Host端是指在CPU上執(zhí)行的部分,是串行代碼;而Device端則是在GPU上執(zhí)行的部分,是并行代碼。Device端的程序又稱為"Kernel",Kernel產(chǎn)生的所有線程成為Grid。在CUDA中,Host和Device有不同的內(nèi)存空間。
基于CUDA架構(gòu)編寫的程序在主機(jī)端和設(shè)備端協(xié)同進(jìn)行,其中主機(jī)端是指在CPU上執(zhí)行的部分,是串行代碼;而設(shè)備端則是在GPU上執(zhí)行的部分,是并行代碼。在實(shí)現(xiàn)MSR算法的CUDA編程時(shí),應(yīng)盡可能增加數(shù)據(jù)的并行化,減少主機(jī)端和設(shè)備端的數(shù)據(jù)相互拷貝,從而充分發(fā)揮GPU的運(yùn)算優(yōu)勢(shì)。因此,本文中輸入圖像數(shù)據(jù)的讀取、主機(jī)端與設(shè)備端內(nèi)存空間的分配與回收以及主機(jī)端與設(shè)備端的數(shù)據(jù)傳輸均在主機(jī)端處理。其余整個(gè)算法的執(zhí)行流程均在設(shè)備端執(zhí)行,主要有高斯濾波、圖像邊緣擴(kuò)展、卷積和對(duì)數(shù)空間差分4個(gè)內(nèi)核函數(shù)。
2.4 MSR并行實(shí)現(xiàn)
為了提高并行化執(zhí)行效率,該算法為每個(gè)像素單獨(dú)分配一個(gè)線程進(jìn)行處理,并采用Shared Memory緩存卷積算子。由于CUDA的Warp大小都是32,為了充分利用每一個(gè)Thread的計(jì)算能力,每個(gè)線程塊中的線程數(shù)目最好是32的倍數(shù)。本文采用一維分配的方式,為每個(gè)線程塊分配了256個(gè)線程,并根據(jù)圖像的維度確定線程塊的數(shù)量。其中,高斯濾波確定線程塊時(shí)依賴于卷積模板窗口的大小,經(jīng)過實(shí)驗(yàn)測(cè)試,本文取卷積模板窗口大小為11,因此線程塊取值確定如下:
gridSize1= (11*11+256-1)/256 。
在CUDA核中執(zhí)行的高斯濾波函數(shù)為:
generateGaussFactor_kernel<<
圖3 Retinex算法流程圖Fig.3 Flow chart of Retinex algorithm
邊緣擴(kuò)展運(yùn)算中,擴(kuò)展后的圖像高度和寬度設(shè)置如下:
height_padding = ImgHeight + 2*(int)(11/2);
width_padding = ImgWidth+ 2*(int)(11/2);
因此,線程塊取值確定如下:
gridSize2=((height_padding*width_padding+256-1)/256) 。
在CUDA核中執(zhí)行的邊緣擴(kuò)展函數(shù)為:
paddingImage_kernel<<
卷積計(jì)算及對(duì)數(shù)差分運(yùn)算中,線程塊取值確定如下:
gridSize3= (ImgHeight*ImgWidth+256-1)/256
在CUDA核中執(zhí)行的卷積函數(shù)和對(duì)數(shù)差分函數(shù)為:
convolution2D_kernel<<
logMix<<
整個(gè)算法的流程如圖3所示。
本次實(shí)驗(yàn)采用GeForce GTX 480[13]以及CUDA5.5進(jìn)行性能測(cè)試,其中CPU為2.66 GHz、2.67 GHz的酷睿雙核,GeForce GTX 480則有480個(gè)SP,1 536 M的顯存容量,計(jì)算能力為2.02TFLOPs。本次實(shí)驗(yàn)中,我們選取夜間圖像以及逆光圖像進(jìn)行了增強(qiáng)效果測(cè)試,同時(shí)選取不同圖像分辨率的圖像,對(duì)256×256到2 048×2 048的M×M的圖像進(jìn)行了計(jì)算速度的測(cè)試,并與相應(yīng)的CPU算法的執(zhí)行速度進(jìn)行了比較。
本次實(shí)驗(yàn)總共采集了400張圖像進(jìn)行了測(cè)試,其中200張夜間圖像,200張逆光圖像,MSR算法的CPU實(shí)現(xiàn)與GPU實(shí)現(xiàn)的圖像增強(qiáng)效果如圖4所示。
實(shí)驗(yàn)結(jié)果顯示,該算法改善了圖像的視覺效果,增強(qiáng)效果明顯。圖4中a,d為兩張?jiān)紙D像,其中a圖像為夜間圖像,由于夜間圖像的對(duì)比度和信噪比都比較低,導(dǎo)致圖像的視覺效果較差;d圖像為逆光圖像,在高對(duì)比度下導(dǎo)致圖像偏暗,可視化效果差。b,e為CPU實(shí)現(xiàn)的多尺度Retinex算法增強(qiáng)后的圖像,c,f為GPU實(shí)現(xiàn)的多尺度Retinex算法增強(qiáng)后的圖像。增強(qiáng)后整個(gè)圖像的可見性增強(qiáng),亮度和對(duì)比度得到提升,細(xì)節(jié)部分更加突出,且具有很好的保真度。其中,該算法基于CPU與GPU的實(shí)現(xiàn)在增強(qiáng)效果上表現(xiàn)一致,但在算法的處理速度上得到了明顯的提升。
圖4 Retinex算法增強(qiáng)效果圖Fig.4 Images of Retinex algorithm enhanced
為對(duì)算法的計(jì)算速度進(jìn)行測(cè)試,本實(shí)驗(yàn)采用了Intel VTune。通過多次測(cè)試不同尺寸圖像的計(jì)算速度,進(jìn)而取平均值的方式得到算法最終的處理速度,如表1、表2所示。
表1 不同圖像分辨率總計(jì)算時(shí)間對(duì)比
表2 不同圖像分辨率卷積計(jì)算時(shí)間對(duì)比
表1表示不同圖像分辨率下,CPU和GPU實(shí)現(xiàn)的總計(jì)算時(shí)間的對(duì)比;表2表示不同圖像分辨率下,CPU和GPU實(shí)現(xiàn)的卷積計(jì)算時(shí)間的對(duì)比。通過表1、表2可以看出,該算法的瓶頸部分主要為卷積計(jì)算,并且當(dāng)圖像分辨率為2 048×2 048時(shí),CPU總計(jì)算時(shí)間為18 065.62 ms,而卷積的CPU計(jì)算時(shí)間高達(dá)15 476.57 ms。該算法經(jīng)過GPU加速后,總計(jì)算時(shí)間僅為113.26 ms,加速比達(dá)160倍;卷積部分的計(jì)算時(shí)間僅為108.72 ms,加速比達(dá)142倍,加速效果非常明顯。由此我們可以看出,與CPU方式相比,本文提出的基于GPU的多尺度Retinex算法的計(jì)算速度得到了明顯的提升,并且隨著圖像尺寸的增大,該算法在計(jì)算速度上的優(yōu)勢(shì)更加明顯。
多尺度Retinex算法在圖像增強(qiáng)處理中具有銳化、色彩恒常、顏色高保真度和高動(dòng)態(tài)范圍壓縮等特性,特別是在處理夜間、云霧等視覺效果較差的圖像時(shí),具有明顯的增強(qiáng)效果。但由于其計(jì)算方法較為復(fù)雜,計(jì)算數(shù)據(jù)量較大,導(dǎo)致算法的實(shí)時(shí)性效果差。本文通過對(duì)輸入圖像數(shù)據(jù)進(jìn)行并行性分析與挖掘,將算法中的時(shí)間瓶頸部分,如高斯濾波、卷積和對(duì)數(shù)差分等放到GPU CUDA內(nèi)核中進(jìn)行處理,既保證了增強(qiáng)效果,又使得處理速度得到了明顯的提升,從而較好地實(shí)現(xiàn)了該算法的實(shí)時(shí)性。后續(xù)將通過改進(jìn)該算法以進(jìn)一步對(duì)其效果和性能進(jìn)行優(yōu)化,同時(shí)將該算法的GPU實(shí)時(shí)處理編程模式引入到更多的圖像處理算法(如去霧、視頻摘要等)中,并進(jìn)一步應(yīng)用到智能視頻的實(shí)時(shí)處理中。
[1]尹士暢,喻松林.基于小波變換和直方圖均衡的紅外圖像增強(qiáng)[J].激光與紅外,2013,43(2):225-228.
[2]占必超,吳一全,紀(jì)守新.基于平穩(wěn)小波變換和Retinex的紅外圖像增強(qiáng)方法[J].光學(xué)學(xué)報(bào),2010,30(10):2788-2793.
[3]李慶忠,劉清.基于小波變換的低照度圖像自適應(yīng)增強(qiáng)算法[J].中國(guó)激光,2015,42(2):0209001.
[4]WANG Y K, HUANG W B. A CUDA-enabled parallel algorithm for accelerating retinex [J]. Journal of Real-Time Image Processing, 2014, 9 (3): 407-425.
[5]LAND E H. Recent advances in Retinex theory [M]// Central and Peripheral Mechanisms of Colour Vision. UK : Palgrave Macmillan,1985: 5-17.
[6]劉瑞劍,低能見度條件下圖像清晰化處理研究[D].太原: 中北大學(xué), 2008.
[7] LEE C H, SHIH J L, LIEN C C, et al. Adaptive multi-scale retinex for image contrast enhancement [M]// Proceedings of the 2013 International Conference on Signal-Image Technology & Internet-Based Systems. Washington, DC, USA: IEEE Computer Society, 2013: 43-50.
[8]NVIDIA .CUDA [EB/OL]. [2016-04-03]. http://www.nvidia.cn/object/cuda-cn.html.
[9]徐元旭, SIMT線程調(diào)度模型分析及優(yōu)化[D].哈爾濱: 哈爾濱工業(yè)大學(xué), 2013.
[10]COOK S.CUDA并行程序設(shè)計(jì):GPU編程指南[M].北京: 機(jī)械工業(yè)出版社,2014: 191-200.
[11] JIAN L H,WANG C,LIU Y, et al. Parallel data mining techniques on Graphics Processing Unit with Compute Unified Device Architecture (CUDA) [J]. The Journal of Supercomputing, 2013, 64 (3): 942-967.
[12] YANG Z Y, ZHU Y T, PU Y. Parallel Image Processing Based on CUDA [M]//Proceedings of the 2008 International Conference on Computer Science and Software Engineering. Washington, DC, USA: IEEE Computer Society, 2008: 198-201.
[13]NVIDA. Geforce GTX 480 Computing Processor Board [EB/OL]. [2016-04-03]. http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-480/specifications.
Realization of multi-scale Retinex image enhancement algorithm based on GPU
LI Hui, XIE Wei-hao, LIU Shou-sheng, GAI Ying-ying
(Institute of Oceanographic Instrumentation, Shandong Academy of Science, Qingdao 266001,China)
∶To improve the real-time performance of the multi-scale Retinex algorithm, a GPU based multi-scale Retinex image enhancement algorithm was proposed in this paper. Through the data analysis and parallel mining of the algorithm, time-consuming modules of the calculation, such as Gauss filter, convolution, and logarithm difference, were implemented in GPU, and the efficiency was improved by using massively parallel processing threads. Experiments were conducted in GeForce GTX 480 and CUDA5.5, and the results showed that the proposed algorithm could significantly improve the computing speed, and with the increasing of the image resolution, the maximum speed up ratio could reach 160 times.
∶image enhancement; multi-scale Retinex; GPU; CUDA; parallel computing
10.3976/j.issn.1002-4026.2017.03.018
2016-08-05
山東省科學(xué)院青年科學(xué)基金(2014QN032)
李輝(1987—),女,碩士,研究方向?yàn)閳D形圖像處理、高性能計(jì)算。E-mail:lihuihuidou@163.com
TP391.41
A
1002-4026(2017)03-0103-07