朱桂海 蔣紅兵 蒙印
?
基于畸變矩陣的影像畸變差改正
朱桂海 蔣紅兵 蒙印
(四川省遙感信息測(cè)繪院 四川成都 610100)
針對(duì)已有的影像畸變差改正程序中存在每張影像分別進(jìn)行迭代計(jì)算的問(wèn)題,提出了基于畸變矩陣的影像畸變差改正方法。新方法首先利用影像行列數(shù)、相機(jī)內(nèi)方位元素與畸變參數(shù),計(jì)算影像畸變矩陣;然后,利用該畸變矩陣對(duì)多張航空影像進(jìn)行畸變差改正。新方法克服了間接法影像畸變差改正算法的逐像素迭代計(jì)算的缺點(diǎn),大大降低了影像畸變差改正的平均計(jì)算量?;贑PU/GPU的影像畸變差改正試驗(yàn),證明本文提出的方法降低了影像畸變差改正的計(jì)算復(fù)雜度,提高了影像畸變差改速度,在無(wú)人機(jī)影像快速處理中具有一定的實(shí)用價(jià)值。
畸變差改正 畸變矩陣 間接法 GPU
目前,國(guó)內(nèi)一些主要的攝影測(cè)量處理軟件大都針對(duì)量測(cè)型相機(jī)設(shè)計(jì)的,在處理普通數(shù)碼相機(jī)影像時(shí),需要在空三平差前對(duì)影像進(jìn)行畸變差改正[1-4]。已有的影像畸變差改正方法,主要分為三種形式:(1)基于CPU的逐像素串行計(jì)算;(2)基于CPU的多像素并行計(jì)算;(3)基于GPU的多個(gè)像素并行計(jì)算[1]。相對(duì)于方式(1),方式(2)能夠充分利用CPU的多核計(jì)算,提高計(jì)算速度;相對(duì)方式(2),方式(1)能夠充分利用GPU的超線程加速計(jì)算,提高計(jì)算速度。但是,方式(1)、(2)、(3)在處理多張影像時(shí),需要對(duì)每張影像中的每個(gè)像素進(jìn)行迭代計(jì)算,沒(méi)有考慮多張影像畸變的一致性,造成了巨大的額外計(jì)算,影響了畸變差改正的速度。
近年,隨著計(jì)算機(jī)軟硬件的快速發(fā)展,64位處理器、64位系統(tǒng)、32G或更高內(nèi)存已成為工作站的標(biāo)準(zhǔn)配置。開(kāi)發(fā)64程序不僅可以提高運(yùn)算速度,而且能夠以“空間換時(shí)間”方式優(yōu)化已有算法,減少計(jì)算量??紤]到,航空攝影中,同一架次飛行所獲取的影像具有相同的內(nèi)方位元素與畸變參數(shù)[5-7],本文提出了一種基于影像畸變矩陣的影像畸變差改正方法。該方法將影像畸變差改正與雙線性差值分離,即首先根據(jù)影像的內(nèi)方位元素與畸變參數(shù)計(jì)算影像畸變矩陣,然后利用影像畸變矩陣對(duì)每張影像進(jìn)行雙線性差值。利用本文方法進(jìn)行多張影像畸變差改正處理時(shí),能夠降低每張影像平均迭代計(jì)算量,提高影像畸變差改正速度。
目前,已有攝影測(cè)量處理軟件大都采用如圖1所示的影像畸變差改正流程[2, 3]。該處理流程,針對(duì)每張航空影像中的每個(gè)像素計(jì)算其畸變改正量,并沒(méi)有對(duì)同一測(cè)區(qū)的多幅影像做任何優(yōu)化處理,存在冗余計(jì)算的問(wèn)題。
圖1:傳統(tǒng)的影像畸變差改正處理流程
2.1 基于畸變矩陣的影像畸變差改正處理流程
針對(duì)傳統(tǒng)的影像畸變差改正處理流程存在的問(wèn)題,本文提出了基于畸變矩陣的影像畸變差改正方法,其處理流程如圖2所示。
2.1.1 計(jì)算量分析
對(duì)于N幅影像,影像行列數(shù)為m * n,假設(shè)每個(gè)像素平均需要迭代t次,則傳統(tǒng)的影像畸變差改正方法總共需要N*m*n*t次運(yùn)算,平均每張影像所用的運(yùn)算次數(shù)為m*n*t;而本文提出的影像畸變差改正實(shí)現(xiàn)方法,總共需要m*n*t次運(yùn)算,平均每張影像所用的時(shí)間為m*n*t/N次運(yùn)算。即,本文提出的影像畸變差改正算法所需要的計(jì)算量為傳統(tǒng)算法的1/N。當(dāng)N為1時(shí),本文方法的計(jì)算量與傳統(tǒng)方法的計(jì)算量一致;當(dāng)N大于1時(shí),本文方法的計(jì)算量為傳統(tǒng)方法的計(jì)算量的1/N;當(dāng)N趨近于無(wú)窮大時(shí),本文提出的實(shí)現(xiàn)方法計(jì)算量趨近于0。即當(dāng)需要處理的影像數(shù)量很大時(shí),影像畸變差改正需要的計(jì)算量趨近于0,每張影像的進(jìn)行影像畸變差改正處理的總計(jì)算量趨近于雙線性差值所需要的計(jì)算量。
圖2:本文提出的影像畸變差改正處理流程
圖3:平均單張影像畸變差改正計(jì)算量
根據(jù)圖3,可知基于影像畸變矩陣的影像畸變差改正算法,單幅影像畸變差改正的計(jì)算量,隨著影像數(shù)目的增大而減少。
2.1.2 內(nèi)存分析
對(duì)于行列數(shù)為m×n的影像,本文處理流程需要大小為2×m×n×4字節(jié)的內(nèi)存空間,存儲(chǔ)畸變矩陣matrix_y(m×n)與matrix_x(m×n)。
3.1 試驗(yàn)數(shù)據(jù)與軟硬環(huán)境
本文選擇了32張分辨率為5616×3744的無(wú)人機(jī)影像作為實(shí)驗(yàn)數(shù)據(jù)。
本文所涉及的多種影像畸變差方式均在VC++2013中進(jìn)行編碼,并在配置為Intel? Xeon? 2.5GHz、32GB、NVIDIA Quadro K2000的工作站中運(yùn)行。
3.2 試驗(yàn)結(jié)果
式中:pti0為虛擬節(jié)點(diǎn),表示部件任務(wù)ti∈PartTask開(kāi)始時(shí)的初始狀態(tài);pti為處理步驟的集合,即按順序排列的已完工工序任務(wù)的集合;ptij∈ProcedureTask(1≤i≤n,1≤j≤k)表示部件任務(wù)ti下屬的某個(gè)已完工工序任務(wù),視為數(shù)據(jù)世系DLti的一個(gè)處理步驟,也稱為DLti的一條記錄。
圖4:平均單幅影像處理所需時(shí)間
圖5:平均單幅影像處理加速比
本文編制64位程序,分別實(shí)現(xiàn)第一小節(jié)中的影像畸變差改正方式(1)、(2)、(3),統(tǒng)計(jì)本文方法與傳統(tǒng)方法畸變差改正所用時(shí)間,并計(jì)算本文方法相對(duì)于傳統(tǒng)方法的加速比,如圖5所示。方式(2),本文使用微軟并行計(jì)算庫(kù)PPL[8];方式(3)本文使用微軟C++ AMP計(jì)算庫(kù)[8, 9]。
3.3 試驗(yàn)分析
從圖4與圖5可以得出以下結(jié)論:
3.3.1 利用CPU串行實(shí)現(xiàn)本文方法
本文提出的方法能夠隨著需要處理的影像數(shù)的增大而更突顯優(yōu)勢(shì);當(dāng)需要處理的影像數(shù)增大到一定程度后,本文提出的算法的加速比趨于穩(wěn)定,即2.2倍。
3.3.2 利用CPU并行實(shí)本文方法
本文提出的方法相對(duì)于傳統(tǒng)方法的加速比,隨著需要處理的影像數(shù)的增大而增大;當(dāng)待處理的影像數(shù)增大到一定程度后,本文提出的算法的加速比趨于穩(wěn)定,即2倍。
本文提出的方法相對(duì)于傳統(tǒng)方法的加速比,隨著影像數(shù)的增大而趨于增大;但是加速比小于1.0,即本文提出的方法在進(jìn)行使用GPU進(jìn)行實(shí)現(xiàn)時(shí),算法的計(jì)算量降低了,但用時(shí)卻增加了。
影像畸變差改正方式(1)與(2)與第二小節(jié)中的理論推理一致,但是(3)與理論推導(dǎo)不一致。利用GPU并行實(shí)現(xiàn)新方法時(shí),需要開(kāi)辟2×m×n×4字節(jié)大小的內(nèi)存,存儲(chǔ)畸變矩陣。但由于本文的畸變矩陣的計(jì)算是在GPU中實(shí)現(xiàn),需要2次內(nèi)存與顯存之間的數(shù)據(jù)交換,此外,在利用畸變矩陣,對(duì)每張影像進(jìn)行畸變差改正的過(guò)程中,需要每次將畸變矩陣載入顯存。相對(duì)于傳統(tǒng)的方法,本文方法在處理N幅影像時(shí),需要多進(jìn)行N+2次內(nèi)存與顯存之間的數(shù)據(jù)交換,共計(jì)需要(N+2)×(2×m×n×4)字節(jié)的數(shù)據(jù)交換。一般情況下,顯存與內(nèi)存之間的數(shù)據(jù)交換速度比內(nèi)存數(shù)據(jù)存取速度慢的多[9]。因此,在利用GPU并行實(shí)現(xiàn)本文方法時(shí),得到如圖5所示的結(jié)果。將畸變矩陣保存在顯存中,減少內(nèi)存與顯存之間的數(shù)據(jù)交換次數(shù),將能顯著地提高方式(3)的計(jì)算速度。
本文提出了一種基于畸變矩陣的影像畸變差改正實(shí)現(xiàn)方法,并通過(guò)編程對(duì)其進(jìn)行實(shí)現(xiàn)。試驗(yàn)證明,本文提出的影像畸變差改正實(shí)現(xiàn)方法,能夠降低影像畸變差改正的計(jì)算量,提高影像畸變差改正的處理速度,在對(duì)處理速度要求較高的應(yīng)急無(wú)人機(jī)影像快速處理中具有一定的實(shí)用價(jià)值。如何減少內(nèi)存與顯存的交換次數(shù),以提高基于GPU并行的影像畸變差改正加速比,需要進(jìn)一步研究。
[1] 詹總謙,盧亮.基于GPU并行處理技術(shù)的影像畸變差修正[J].測(cè)繪信息與工程,2011(02):1-3.
[2] 李德龍.基于CUDA的無(wú)人機(jī)影像快速并行處理算法研究[D].北京:北京建筑大學(xué),2013.
[3] 王愷.數(shù)字?jǐn)z影測(cè)量影像數(shù)據(jù)的GPU并行處理研究[D].蘭州:蘭州交通大學(xué),2013.
[4] 張劍清,柯濤,孫明偉,等.并行計(jì)算在航空攝影測(cè)量中的應(yīng)用與實(shí)現(xiàn)——數(shù)字?jǐn)z影測(cè)量網(wǎng)格(DPGrid)并行計(jì)算技術(shù)研究[J].測(cè)繪通報(bào),2008(12):11-14.
[5] 李天子,郭輝.非量測(cè)數(shù)碼相機(jī)的影像糾正[J].測(cè)繪通報(bào),2006(10):59-61.
[6] 王樹(shù)根,張劍清,潘勵(lì).攝影測(cè)量學(xué)[M].武漢:武漢大學(xué)出版社,2002:158-166.
[7] 陳新璽,李浩,張曼祺.普通數(shù)碼相機(jī)構(gòu)像畸變差兩種檢校模型的比較[J].北京測(cè)繪,2005(04).
[8]Microsoft. C++ Accelerated Massive Parallelism Overview[EB/OL]. http://msdn.microsoft.com/zh-cn/library/hh265136.aspx.
[9] 格雷戈里.C++AMP用Visual C++加速大規(guī)模并行計(jì)算[M].北京:人民郵電出版社,2014.
四川省測(cè)繪地理信息局科技支撐項(xiàng)目(J2014ZC04、J2015ZC04),國(guó)家測(cè)繪地理信息局科技發(fā)展計(jì)劃項(xiàng)目(國(guó)測(cè)科發(fā)[2014]4號(hào))