顏 源,張 靖,李紫凝,王潔茹
(1.長江航道測量中心,湖北 武漢 430010;2.武漢大學,湖北 武漢 430079)
基于GPU的GeoEye-1影像正射糾正
顏 源1,張 靖2,李紫凝1,王潔茹1
(1.長江航道測量中心,湖北 武漢 430010;2.武漢大學,湖北 武漢 430079)
在介紹和分析GPU并行編程方法的基礎(chǔ)上,給出了在GPU上進行GeoEye-1影像正射糾正的算法過程。利用NVIDIA Quadro 600顯卡對31 985像素×15 251像素的3波段GeoEye-1影像進行正射糾正,其總體速度比沒有加速的算法提升40%以上。試驗結(jié)果表明,采用GPU并行處理技術(shù)可以提升遙感影像處理效率。
正射糾正;并行計算;GPU;CUDA;GeoEye-1
由于衛(wèi)星影像在成像過程中受到地形起伏的影響,導致像點發(fā)生位移,定位精度較低,可以滿足影像瀏覽、景觀地圖制作等不需要高幾何精度的項目需要,但對于一些要求高精度影像、需要生產(chǎn)DOM的項目,如城市規(guī)劃、地理國情普查等,未進行正射糾正的影像不能滿足精度要求,需要對其進行正射糾正。
GPU計算就是運用GPU來加速通用科學和工程應(yīng)用程序。GPU具有數(shù)以千計的計算核心,能夠快速處理繁重的計算任務(wù),可實現(xiàn)前所未有的應(yīng)用程序性能[1]。GPU加速程序編寫關(guān)鍵在于分解任務(wù),合理分配GPU各線程的計算。
1.1 GPU并行編程方法
GPU具有比CPU多得多的處理核心,能夠使數(shù)以千計的線程同時計算,適合進行高密度的計算[1]。CUDA是NVIDIA推出的通用計算架構(gòu),該架構(gòu)能夠使GPU解決非常復雜的計算問題,并支持C語言擴展。
CUDA程序分為host端和device端。host端利用CPU進行串行處理運算量較小的任務(wù),如數(shù)據(jù)準備、內(nèi)存管理、數(shù)據(jù)傳輸?shù)?,device端利用GPU進行高計算密度的并行處理。CPU和GPU相互配合,充分利用各自優(yōu)勢,可大幅提升計算效率。CUDA程序可通過在Visual Studio中的集成調(diào)試工具Nsight(http:// www.nvidia.com/object/nsight.html)進行開發(fā)調(diào)試,其操作方法與在Visual Studio開發(fā)環(huán)境中調(diào)試C/C++代碼類似,為編寫CUDA程序提供了方便。
CUDA程序以線程為執(zhí)行單元,若干個線程構(gòu)成線程塊,線程塊的執(zhí)行相互獨立,線程塊內(nèi)的線程共享Shared Memory,線程塊之間共享Global Memory[1]。設(shè)定線程塊數(shù)為N,線程塊內(nèi)的線程數(shù)為M,則總線程數(shù)為N×M。線程塊和線程數(shù)的多少與GPU的參數(shù)有關(guān)。CUDA程序通過調(diào)用核函數(shù)來啟動多線程執(zhí)行并行計算。核函數(shù)的調(diào)用模式為kernel〈〈〈blockNum, threadNum〉〉〉(function argument),〈〈〈…〉〉〉為核函數(shù)的執(zhí)行配置語法。核函數(shù)內(nèi)通過線程塊索引blockIdx和線程索引threadIdx來定位像素,像素在for循環(huán)中的索引為index,for循環(huán)語句的結(jié)構(gòu)為for( index = threadIdx.x+blockId.x*threadNum; index〈nPixels;index += threadNum *blockNum)。nPixels為影像塊的像素數(shù),blockNum、threadNum分別為線程塊數(shù)、線程數(shù)。
1.2 RPC正射糾正
為了避免糾正后影像出現(xiàn)像素空白區(qū),糾正時一般采用反解法,即從空白影像出發(fā),逐像素反解其在原始影像的像素坐標,然后通過內(nèi)插獲取該像素的灰度值[2]。GeoEye-1提供了RPC模型代替嚴格成像模型,RPC模型形式簡單,可獲得與嚴格成像模型一致的精度,是目前高分辨率衛(wèi)星廣泛采用的幾何模型[3-5],采用RPC模型生成正射遙感影像是其重要應(yīng)用[6-8]。
1.3 算法過程
1.3.1 總體思想
將計算量大的部分分配給GPU,CPU則負責數(shù)據(jù)準備、內(nèi)存分配、邏輯處理、數(shù)據(jù)傳輸?shù)?;對于用反解法進行正射糾正來說,計算量大的部分主要是像點坐標計算和灰度重采樣,這一部分可分配給GPU計算;影像讀寫、DEM讀取、RPC參數(shù)讀取等計算量較小的任務(wù)分配給CPU。高分遙感影像數(shù)據(jù)量普遍較大,如果一次全部讀入內(nèi)存,可能會導致內(nèi)存不足。為了在內(nèi)存有限的條件下進行大數(shù)據(jù)量的計算,必須對影像進行分塊糾正。一次讀入一定大小的塊,糾正完成后,寫出到磁盤,再讀入下一塊,繼續(xù)同樣的糾正過程,直到最后的塊糾正完成。為了簡化程序編寫,實驗程序是基于開放遙感平臺OpenRS來完成的。
1.3.2 程序?qū)崿F(xiàn)流程
如圖1所示,host端讀入DEM、RPC文件,計算糾正后影像大小,創(chuàng)建輸出影像,分塊讀入原始影像并拷貝到device端。device端設(shè)計兩個核函數(shù),分別負責像點坐標計算和灰度重采樣,灰度重采樣選擇雙線性內(nèi)插方法。
圖1 基于GPU的正射糾正過程
為檢驗基于GPU的遙感影像正射校正的精度和速度,下面以云南省楚雄彝族自治州的Geoeye-1數(shù)據(jù)作為實驗對象。影像分辨率1.65 m,影像大小31 985列、15 251行、3波段、2.72 GB。DEM采用美國提供的90 m分辨率的免費SRTM數(shù)據(jù)。數(shù)據(jù)測試電腦配置:4核CPU、3.3 GHz,顯卡NVIdIA Quadro 600,計算能力2.1。為分析GPU加速的性能,編寫了基于GPU加速和單核CPU處理兩種正射糾正程序。
1)精度是速度的基礎(chǔ),首先進行精度分析。參照對象選擇ENVI正射糾正結(jié)果。將單核CPU的糾正結(jié)果、GPU加速的正射糾正結(jié)果與ENVI正射糾正結(jié)果進行比較,通過ENVI鏈接地理坐標,查看相同坐標是否定位在同一地物。
圖2 采用GPU編程的正射糾正結(jié)果和局部放大圖
圖3 ENVI軟件正射糾正結(jié)果和局部放大圖
圖4 只采用CPU進行正射糾正的結(jié)果和局部放大圖
圖2~圖4均在ENVI的地理坐標鏈接狀態(tài)下,即局部放大圖中紅色十字絲的交叉點坐標相等。從3幅局部放大圖可以看出,紅色十字絲均定位在同一處,表明本實驗編寫的GPU加速及單核CPU正射糾正程序正確,其糾正精度與ENVI一致。
2)速度分析。多次運行程序,統(tǒng)計各次影像讀取部分時間和總運行時間。
從表1可以看出,GPU加速的正射糾正程序相對于未加速的程序,速度可提升約40%。隨著影像數(shù)據(jù)量的增加,計算量增大,這種優(yōu)勢會更加明顯。對于遙感影像處理來說,除了計算量大之外,影響程序速度的另一個主要原因就是影像讀取。從表中可看出,對于單核CPU、GPU加速2種正射糾正程序,影像讀取的時間分別占整個程序運行時間的44%和76%。要減少影像讀取的時間,就要盡量減少讀取影像次數(shù),若內(nèi)存和顯存都足夠大,可以盡量讀取較大的影像塊,并拷貝到顯存,以減少影像讀取的頻率,從而減少CPU的運行時間。
表1 正射糾正時間統(tǒng)計
GPU加速程序中,數(shù)據(jù)主要存儲在GPU的Global Memory。由于Global Memory訪問延遲在400~600個時鐘周期,其訪存效率較低,但其分配的空間位于顯存,可分配的容量最大。 Local Memory和Shared Memory設(shè)有緩存機制,比Global Memory訪存效率高,但容量都很小,不能作為影像數(shù)據(jù)的主要存儲類型。
在已有硬件條件下要提升遙感影像的并行化計算效率,可以從以下幾個方面來考慮:
1)優(yōu)化算法結(jié)構(gòu)。確定算法中的串行和并行部分,盡量分解為能并行化執(zhí)行的結(jié)構(gòu),充分利用GPU的性能,同時也要綜合考慮并行化效率和host端與device端之間數(shù)據(jù)傳輸?shù)臅r間消耗。
2)優(yōu)化存儲器的使用。盡可能多地使用Local Memory和Shared Memory,減少對Global Memory的訪存。
3)優(yōu)化指令流。采用合適指令,避免線程沖突,盡量減少條件選擇等邏輯運算。
4)優(yōu)化影像讀寫性能。遙感影像的分塊讀寫幾乎要占用約一半的處理時間,影像讀寫的效率直接影響整個程序的性能。程序采用GDAL庫進行影像分塊讀寫,其總體效率并不高[9];可以考慮采用內(nèi)存文件映射技術(shù)進行影像讀寫,以減少I/O操作,在分塊讀寫大數(shù)據(jù)量的遙感影像時,I/O效率會得到大幅提升。
遙感影像處理大多是基于像素進行,像素之間的計算模式相同,各波段的計算模式也相同。其處理模式可分為2步:①基于像素坐標對各像素進行一系列數(shù)學運算,若不存在幾何處理,則得到的是各像素坐標新灰度值;若存在幾何處理,則變換得到新的像素坐標;②對新像素坐標賦灰度值,也就是灰度重采樣。這2步都是基于像素進行同質(zhì)的計算,因此遙感影像處理算法大多都可用GPU作并行化處理。在解決了各種算法并行化的瓶頸問題之后,另一個重要問題就是影像I/O,較好的解決辦法是通過內(nèi)存文件映射方式來讀寫影像,可大幅提升文件I/O效率。
[1] Jason S,Edward K.高性能編程之CUDA實戰(zhàn)[M].北京:機械工業(yè)出版社,2011
[2] 王佩軍,徐亞明.攝影測量學[M].武漢:武漢大學出版社,2010 [3] 宋偉東,陳靜波,王偉璽.高分辨率遙感影像單片定位及正射糾正方法[J].遼寧工程技術(shù)大學學報:自然科學版,2009,28(1):37-39
[4] 蘇逸平,陳春華.高分遙感影像Geoeye-1正射糾正研究[J].地理空間信息,2011,9(3):48-50
[5] 張柯南,闞明哲.GeoEye-1衛(wèi)星簡介及其遙感影像處理技術(shù)實踐[J].城市勘測,2010(3):80-81
[6] 王海俠,高飛,胡小華.基于RPC模型的QuickBird影像正射糾正研究[J].現(xiàn)代測繪,2010,33(6):13-15
[7] 王紅平,劉修國,羅紅霞,等.基于RPC模型的IRS_P5影像正射校正[J].中國地質(zhì)大學學報,2010,35(3):486-488
[8] 宋偉東,陳靜波,王偉璽.高分辨率遙感影像單片定位及正射糾正方法[J].遼寧工程技術(shù)大學學報,2009,28(1):37-39
[9] 李民錄.GDAL源碼剖析與開發(fā)指南[M].北京:人民郵電出版社,2014
P231
B
1672-4623(2016)04-0070-03
10.3969/j.issn.1672-4623.2016.04.023
顏源,碩士,工程師,主要從事衛(wèi)星遙感數(shù)據(jù)處理和在長江航道測繪中的應(yīng)用工作。
2015-03-26。
項目來源:國家自然科學基金資助項目(41301367)。