劉 宇,熊恒斌,文義紅,高 峰,付 偉
(1.中國電子科技集團(tuán)公司航天信息應(yīng)用技術(shù)重點(diǎn)實(shí)驗(yàn)室,河北 石家莊050081;2.中國電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081)
衛(wèi)星傳感器嚴(yán)格幾何成像模型構(gòu)建了遙感影像像素坐標(biāo)和大地坐標(biāo)間的幾何關(guān)系,是遙感影像進(jìn)行幾何定位最基礎(chǔ)的模型[1]。但通常情況下,衛(wèi)星廠家不會(huì)將衛(wèi)星的內(nèi)外方位元素公布,而是采用與傳感器幾何無關(guān)的非嚴(yán)格數(shù)學(xué)RPC(Rational Polynomial Coefficients)模型用于遙感影像的幾何定位[2]。RPC模型的精度與嚴(yán)格幾何成像模型相當(dāng)[3],目前是主流的遙感影像幾何衛(wèi)星模型。
許多研究人員提出了高分辨率遙感影像的RPC校正方法[4],并對(duì)其精度和效率進(jìn)行了評(píng)價(jià)[5]。當(dāng)面臨對(duì)遙感影像的快速處理需求時(shí),需要縮短遙感影像處理的各個(gè)環(huán)節(jié)處理時(shí)間。考慮到RPC校正過程需要逐像素進(jìn)行坐標(biāo)反算和重采樣步驟,且寬幅遙感影像的像素?cái)?shù)量非常多,可以利用GPU強(qiáng)大的并行計(jì)算能力實(shí)現(xiàn)影像的RPC校正。目前已有許多研究人員將GPU的強(qiáng)大計(jì)算能力用到遙感影像計(jì)算領(lǐng)域,如Li等[6-7]基于CUDA運(yùn)算平臺(tái),實(shí)現(xiàn)了對(duì)高光譜數(shù)據(jù)在不同模型上的高性能并行計(jì)算;楊靖宇[8]在GPU上實(shí)現(xiàn)了多種典型遙感圖像處理算法,如監(jiān)督分類、卷積運(yùn)算、離散小波變換等;許雪貴和張清[9]對(duì)CUDA并行對(duì)遙感圖像處理中常用的快速傅里葉變換、邊緣檢測和模板匹配3種方法的效率提升進(jìn)行了分析;肖漢和張祖勛[10]在GPU上實(shí)現(xiàn)了遙感影像的快速匹配;楊景輝等[11]使用GPU完成了SAR影像的RPC校正,并和CPU下的處理效率進(jìn)行了對(duì)比。上述研究中對(duì)運(yùn)行效率的對(duì)比集中在GPU運(yùn)算與逐像素運(yùn)算,這種對(duì)比方式僅體現(xiàn)了GPU并行相較于逐像素運(yùn)算的優(yōu)勢(shì),而忽視了實(shí)際工程應(yīng)用中CPU下的RPC校正并非單線程逐像素運(yùn)算,因此不能反應(yīng)真實(shí)的CPU下RPC校正效率。
本文首先介紹了遙感影像RPC校正的原理,并設(shè)計(jì)了使用GPU(NVIDIA TITAN RTX)實(shí)現(xiàn)寬幅遙感影像的RPC校正并行處理方案;重點(diǎn)比較了GPU在不同影像分塊策略下相較于CPU進(jìn)行RPC校正的計(jì)算效率和整體效率加速比,分析了GPU與CPU間的數(shù)據(jù)交換對(duì)RPC校正的計(jì)算效率影響情況,為實(shí)際工程應(yīng)用提供有效數(shù)據(jù)支撐。
RPC模型用來替代以共線方程為基礎(chǔ)的傳感器嚴(yán)格幾何成像模型[2];其將地面點(diǎn)大地坐標(biāo)D(P,L,H)與對(duì)應(yīng)的像點(diǎn)坐標(biāo)d(X,Y)用比值多項(xiàng)式關(guān)聯(lián)起來[12]。對(duì)于一個(gè)影像,其像素坐標(biāo)和地理坐標(biāo)有如下關(guān)系:
(1)
式中,分子分母項(xiàng)的計(jì)算方式如下:
(2)
式中,ai,bi,ci,di為RPC參數(shù)。對(duì)于高分系列衛(wèi)星遙感影像而言,標(biāo)準(zhǔn)產(chǎn)品的壓縮包中分別包含了多光譜數(shù)據(jù)和全色數(shù)據(jù)的影像數(shù)據(jù)文件及其RPB文件(高分系列衛(wèi)星的RPC參數(shù)文件)。
以高分系列衛(wèi)星為例,影像數(shù)據(jù)文件不包含地理坐標(biāo)信息,RPC校正將原始遙感影像投影至指定參考系,其校正步驟如下:
(1)遍歷原始遙感影像的邊界像素,利用RPC模型的反算公式計(jì)算變換后影像的地理范圍;
(2)再利用輸出地理范圍和分辨率確定輸出影像的像素尺寸,并創(chuàng)建相應(yīng)的影像文件;
(3)遍歷輸出影像的像素,利用RPC正算公式將輸出像素的地理坐標(biāo)轉(zhuǎn)換至原始影像的像素坐標(biāo);
(4)根據(jù)(3)轉(zhuǎn)換得到的像素坐標(biāo),重采樣原始影像像素值獲取輸出影像的像素值,本文采用簡單的最近鄰采樣方法。
遙感影像RPC校正過程中,步驟(4)確定輸出像素的DN值計(jì)算量較大,且對(duì)于每個(gè)像素而言,計(jì)算步驟完全一致,適合使用GPU并行處理,提高計(jì)算效率。本文使用NVIDIA統(tǒng)一計(jì)算架構(gòu)CUDA[13],使用GPU完成影像RPC校正計(jì)算過程,計(jì)算機(jī)主機(jī)完成數(shù)據(jù)IO以及與GPU間的數(shù)據(jù)傳輸。整體處理流程如圖1所示。
圖1 GPU支持下RPC校正流程Fig.1 Flowchart of RPC geometric correction with GPU
將輸出影像分塊,計(jì)算每塊影像對(duì)應(yīng)的原始影像范圍,將輸出影像塊和原始影像塊交換至GPU;GPU啟動(dòng)kernel函數(shù),遍歷輸出影像像素,并為每個(gè)像素分配GPU線程,每個(gè)線程完成地理坐標(biāo)轉(zhuǎn)換和圖像重采樣工作,實(shí)現(xiàn)GPU并行運(yùn)算,然后將數(shù)據(jù)交換至計(jì)算機(jī)內(nèi)存并存儲(chǔ)到硬盤文件。
計(jì)算平臺(tái)包括計(jì)算機(jī)主機(jī)和GPU,其配置如表1和表2所示。
表1 計(jì)算平臺(tái)配置Tab.1 Configuration of computing platform
表2 顯卡性能Tab.2 Performance of GPU
本實(shí)驗(yàn)使用標(biāo)準(zhǔn)的高分二號(hào)遙感影像進(jìn)行測試,包括多光譜MSS數(shù)據(jù)和全色波段PAN數(shù)據(jù)。MSS數(shù)據(jù)自帶RPB文件(內(nèi)含RPC參數(shù)),共包含四個(gè)通道,每個(gè)通道尺寸為7 300 pixel×6 908 pixel,數(shù)據(jù)類型為16 bit整型,文件大小為384 MB,數(shù)據(jù)原始空間分辨率為0.000 36°×0.000 29°;影像對(duì)應(yīng)區(qū)域高程按照該地區(qū)平均高程。RPC校正后輸出圖像尺寸為8 639 pixel×8 162 pixel,文件大小為538 MB。
PAN數(shù)據(jù)自帶RPB文件,僅包含一個(gè)通道,圖像尺寸為29 200 pixel×27 920 pixel,數(shù)據(jù)類型為16 bit整型,文件大小為1.5 GB,數(shù)據(jù)原始空間分辨率為0.000 009°×0.000 007°。RPC校正后輸出圖像尺寸為34 553 pixel×32 664 pixel,文件大小為2.1 GB。
MSS、PAN影像及對(duì)應(yīng)的RPC校正結(jié)果如圖2所示。
(a)MSS原始影像
為測試不同分塊情況下對(duì)并行效率的影響,該實(shí)驗(yàn)每次將不同塊大小的數(shù)據(jù)交換至GPU,并記錄運(yùn)算時(shí)間和整體時(shí)間。由于MSS影像和PAN影像尺寸差異較大,故實(shí)驗(yàn)的分塊大小不盡相同。本文同時(shí)考慮了GPU支持下的運(yùn)算效率和整體效率,并與CPU下的運(yùn)算效率和整體效率進(jìn)行對(duì)比,為發(fā)揮計(jì)算機(jī)的全部性能,CPU進(jìn)行RPC校正時(shí)不做分塊處理。
3.3.1 不同分塊尺寸下的GPU并行運(yùn)算效率
本文記錄了RPC校正過程中GPU并行處理和CPU串行處理時(shí)的運(yùn)算時(shí)間,其中,CPU串行處理僅使用單個(gè)處理核心。對(duì)于CPU處理而言,RPC校正流程按照1.2節(jié)實(shí)現(xiàn),原始遙感影像不做分塊處理,運(yùn)算時(shí)間TC僅包含將遙感影像讀入內(nèi)存后的RPC校正函數(shù)運(yùn)算時(shí)間,不包括從硬盤中讀取文件以及將結(jié)果數(shù)據(jù)存入硬盤文件的時(shí)間;對(duì)于GPU并行處理而言,運(yùn)算時(shí)間TG包括將數(shù)據(jù)分塊后,每塊數(shù)據(jù)從內(nèi)存交換至GPU、GPU完成RPC校正以及GPU將數(shù)據(jù)交換至內(nèi)存的時(shí)間總和。定義運(yùn)算效率加速比為RGC,表達(dá)式如下:
(3)
不分塊情況下,CPU進(jìn)行MSS影像RPC校正的運(yùn)算時(shí)間為8.007 s,CPU進(jìn)行PAN影像RPC校正的運(yùn)算時(shí)間為80.621 s。不同分塊策略下,GPU進(jìn)行MSS、PAN影像的RPC校正效率如表 3所示。隨著分塊大小的增加,對(duì)MSS影像而言,GPU運(yùn)算時(shí)間不斷縮短,當(dāng)分塊大小為10 000 pixel×8 639 pixel時(shí),運(yùn)算效率最高,當(dāng)分塊大小超過10 000 pixel×8 639 pixel時(shí),運(yùn)算效率又逐漸下降;而對(duì)PAN影像而言,GPU運(yùn)算時(shí)間隨著分塊增加而不斷縮短,當(dāng)分塊大小為17 500 pixel×34 553 pixel時(shí),運(yùn)算效率最高,當(dāng)分塊大小超過17 500 pixel×34 553 pixel時(shí),運(yùn)算效率又逐漸下降。由于PAN影像的寬、高均是MSS影像的4倍左右,但MSS影像的波段數(shù)量是PAN影像的4倍,故在同一分塊策略下,PAN影像運(yùn)算時(shí)間耗時(shí)大致是MSS影像運(yùn)算時(shí)間的4倍左右。
表3 不同分塊策略下的GPU運(yùn)算耗時(shí)Tab.3 GPU computing time under different blocking strategies
不同分塊策略下的運(yùn)算效率加速比圖 3所示,其中MSS影像每行8 639個(gè)像元,PAN影像每行34 553個(gè)像元。MSS影像在分塊尺寸為10 000行(對(duì)應(yīng)分塊大小為10 000 pixel×8 639 pixel)時(shí)加速比最高,為4.26;不同分塊策略下,MSS影像運(yùn)算效率加速比范圍為3.0~4.26,平均值為3.71。PAN影像在分塊尺寸為17 500行(對(duì)應(yīng)分塊大小為17 500 pixel×34 553 pixel)時(shí)加速比最高,為9.93;不同分塊策略下,PAN影像運(yùn)算效率加速比范圍為6.79~9.93,平均值為8.27。PAN影像運(yùn)算效率加速比是MSS影像運(yùn)算效率加速比的2倍以上,說明當(dāng)影像所需計(jì)算量越大,則GPU加速運(yùn)算的效果更加明顯。
圖3 不同分塊策略下GPU支持的RPC校正運(yùn)算效率加速比Fig.3 Acceleration ratio of RPC efficiency under different blocking strategies with GPU
3.3.2 不同分塊尺寸的遙感影像RPC校正整體效率
除考慮運(yùn)算效率外,還需要考慮GPU對(duì)RPC校正的整體效率影響。整體效率指從硬盤文件中讀取數(shù)據(jù),然后進(jìn)行RPC校正,最后將校正完的結(jié)果輸出到硬盤文件的全過程耗時(shí)。定義整體效率加速比RT,表達(dá)式如下:
(4)
式中,TGT為GPU支持下遙感影像RPC校正整體耗時(shí);TCT為CPU支持下遙感影像RPC校正整體耗時(shí)。
不分塊情況下,使用CPU進(jìn)行MSS影像和PAN影像的RPC校正整體耗時(shí)分別為13.876 ,87.663 s。使用GPU并行進(jìn)行MSS影像RPC校正時(shí),根據(jù)表4可知,分塊大小為10 000 pixel×8 639 pixel時(shí),RPC校正的整體效率最高;結(jié)合表 3可知,硬盤讀寫(從硬盤讀取數(shù)據(jù)到內(nèi)存,然后將校正結(jié)果數(shù)據(jù)從內(nèi)存寫到硬盤文件)耗時(shí)達(dá)到6~7 s,遠(yuǎn)長于運(yùn)算時(shí)間。而使用GPU并行進(jìn)行PAN影像RPC校正時(shí),分塊大小為17 500 pixel×34 553 pixel時(shí),RPC校正的整體效率最高,硬盤讀寫耗時(shí)為7~8 s,略短于運(yùn)算時(shí)間。由于硬盤讀寫耗時(shí)較長,GPU加速PAN影像RPC校正的整體效率僅為MSS影像RPC校正的2倍左右。
表4 不同分塊策略下的GPU整體耗時(shí)Tab.4 Overall time consumption of GPU under different blocking strategies
由于MSS影像RPC校正過程中硬盤讀寫時(shí)間占用比例較高,故整體效率加速比較低,僅為1.3~1.72,平均值為1.59,相較于運(yùn)算效率加速比明顯下降。PAN影像校正過程中硬盤讀寫占用比例較低,但整體效率加速比比相較于運(yùn)算效率加速比依然有所降低,為4.7~5.7,平均值為5.07,如圖4所示。影像需要的運(yùn)算量越大,則整體效率加速比越大。
圖4 不同分塊策略下GPU支持的RPC校正整體效率加速比Fig.4 Acceleration ratio of RPC overall efficiency under different blocking strategies with GPU
影像數(shù)據(jù)量較大時(shí),使用GPU并行加速圖像運(yùn)算效率是一種切實(shí)可行的方法[14-15]。當(dāng)影像所需要的運(yùn)算量越大,則GPU并行效率加速比更高。本文針對(duì)高分二號(hào)MSS影像和PAN影像分別進(jìn)行了RPC校正并行實(shí)驗(yàn),運(yùn)算效率加速比分別達(dá)到了3.71與8.27。其原因是GPU能夠?yàn)槊總€(gè)像素的計(jì)算過程分配一個(gè)線程,充分利用了GPU的圖像計(jì)算性能,相較于CPU極大地提高并行線程數(shù)量。
GPU并行計(jì)算能夠極大地減少運(yùn)算時(shí)間,但增加了內(nèi)存和GPU之間的數(shù)據(jù)交換過程,整體上對(duì)于影像的運(yùn)算效率有提升。另一方面,GPU并行不能減少文件的讀寫時(shí)間,故整體效率加速比的提升并未達(dá)到運(yùn)算效率加速比的倍數(shù),考慮到MSS影像RPC校正過程中文件讀寫的耗時(shí)遠(yuǎn)超過計(jì)算耗時(shí),所以在GPU和CPU下的RPC校正整體效率差異不大。為盡可能減少文件讀寫耗時(shí),建議在運(yùn)算過程中,盡量增加分塊尺寸,減小分塊數(shù)量,盡可能保證文件的連續(xù)讀寫[11]。
為保證GPU的并行運(yùn)算,分塊進(jìn)行RPC校正實(shí)驗(yàn)時(shí),每一塊數(shù)據(jù)的尺寸是相同的,總運(yùn)算時(shí)間取決于對(duì)輸出圖像的分塊策略;當(dāng)分塊策略正好將輸出圖像平均分塊時(shí),無效運(yùn)算量最少,而當(dāng)分塊結(jié)果超出輸出圖像行數(shù)過多時(shí),無效運(yùn)算量較多,故表 3中MSS影像在分塊策略4的情況下運(yùn)算效率最高,PAN影像在分塊策略6的情況下運(yùn)算效率最高。
本文設(shè)計(jì)了GPU下的RPC校正方案,實(shí)現(xiàn)了GPU并行加速下的大幅面遙感影像RPC校正。本方案分塊將遙感影像數(shù)據(jù)交換至GPU,并對(duì)每個(gè)像素分配線程,充分發(fā)揮GPU強(qiáng)大的計(jì)算能力。實(shí)驗(yàn)結(jié)果表明,GPU并行計(jì)算可以使高分二號(hào)MSS影像RPC校正過程的運(yùn)算效率加速比達(dá)到3.71,整體效率加速比為1.59,PAN影像RPC校正過程的運(yùn)算效率加速比達(dá)到8.27,整體效率加速比為5.07。由實(shí)驗(yàn)結(jié)果可得到以下結(jié)論:① 遙感影像的像素?cái)?shù)量越多,則RPC校正GPU并行的加速比越高;② 考慮到高分二號(hào)MSS影像RPC校正過程中文件讀寫的時(shí)間遠(yuǎn)超出計(jì)算時(shí)間,實(shí)際的RPC校正在GPU和CPU下耗時(shí)差異不大;③ GPU與內(nèi)存間的數(shù)據(jù)交換也會(huì)消耗資源,所以盡可能減少GPU與內(nèi)存間的數(shù)據(jù)交換次數(shù),可一定程度上提高效率;④ 分塊策略應(yīng)遵循分塊行數(shù)總和接近影像行數(shù)的原則,減少GPU無效運(yùn)算的原則,提高RPC校正整體效率。