馬遠(yuǎn)征,方 勇
1.長安大學(xué),陜西 西安,710061;
2.西安測繪研究所,陜西 西安,710054
相比于模擬相機,面陣航測相機能夠直接獲取數(shù)字影像而無需數(shù)字化,攝影效率高、圖像質(zhì)量好[1],可作為應(yīng)急救災(zāi)數(shù)據(jù)源。當(dāng)重大災(zāi)害發(fā)生時,其成為決策者快速了解災(zāi)情、及時制定救災(zāi)策略的重要依據(jù)。而數(shù)字航測影像往往數(shù)據(jù)規(guī)模大,迫切需要開發(fā)更為高效的影像數(shù)據(jù)處理算法,以滿足應(yīng)急測繪需要。隨著圖形處理器(graphics processing unit,GPU)計算性能的不斷提升[2]以及定位定向系統(tǒng)(position orientation system,POS)數(shù)據(jù)在影像直接地理定位上的廣泛應(yīng)用,使得攝影數(shù)據(jù)快速處理成為可能。就此,本文對POS數(shù)據(jù)支持下的面陣航測影像快速幾何糾正技術(shù)展開研究。
傳統(tǒng)的影像幾何糾正方法,大多運行在中央處理器(central processing unit,CPU)上,其效率提升主要依靠多CPU并行技術(shù),但由于CPU時鐘周期長期局限于4GHz,且多CPU散熱問題限制了多核并行技術(shù)的進一步發(fā)展。為提升影像數(shù)據(jù)處理效率,許多學(xué)者開始嘗試?yán)肅PU-GPU協(xié)同技術(shù)處理遙感影像。文獻(xiàn)[3]將CPU-GPU協(xié)同處理技術(shù)用于衛(wèi)星影像正射校正;文獻(xiàn)[4]分析了幾種不同GPU架構(gòu)下的影像正射校正效率;文獻(xiàn)[5]利用CPU-GPU協(xié)同處理技術(shù),使得影像正射校正效率提升了10.91倍。數(shù)字航測相機與POS系統(tǒng)集成,可實現(xiàn)數(shù)字航測影像快速地理定位。文獻(xiàn)[6]指出經(jīng)后處理的POS數(shù)據(jù)可直接作為影像的外方位元素;文獻(xiàn)[7]設(shè)計基于POS數(shù)據(jù)的高光譜影像CPU快速幾何糾正算法;文獻(xiàn)[8]開展了基于POS數(shù)據(jù)的機載航空影像幾何糾正試驗;文獻(xiàn)[9]基于POS數(shù)據(jù)使用ERDAS軟件進行航空遙感影像正射校正;文獻(xiàn)[10]提出結(jié)合POS數(shù)據(jù)、地形數(shù)據(jù)庫和GDAL開源圖像庫的航空影像快速幾何糾正方案。相機畸變也是數(shù)字航測影像幾何糾正的一個重要方面。文獻(xiàn)[11]分析了面陣航測相機的幾何畸變誤差傳遞模型;文獻(xiàn)[12]利用POS計算影像外方位元素,對推掃式成像方式的OMIS影像進行幾何畸變糾正;文獻(xiàn)[13]認(rèn)為多面陣組合相機的光學(xué)畸變差會導(dǎo)致像點相對于其理想位置發(fā)生徑向和切向的偏移,并推導(dǎo)了數(shù)碼相機畸變校正公式。
上述研究從不同角度論證基于GPU編程框架和POS數(shù)據(jù)對面陣航測影像幾何糾正的可行性,并開展了許多有益的工作。但是,這些文獻(xiàn)大多僅側(cè)重于某一技術(shù)層面。如CPU-GPU協(xié)同處理方面的文獻(xiàn)往往側(cè)重于分析影像幾何糾正算法的實現(xiàn)效率,而沒有涉及對校正精度的詳細(xì)分析;基于POS數(shù)據(jù)進行影像幾何糾正的文獻(xiàn)關(guān)注的重點是影像外方位元素求解精度及影像幾何校正方法的精度,而較少考慮糾正效率。而在應(yīng)急測繪保障需求條件下,糾正效率和糾正精度同等重要。因此,本文基于POS數(shù)據(jù)建立無控制點面陣影像對地定位關(guān)系,設(shè)計面陣航測影像GPU幾何糾正算法;并以某新型國產(chǎn)面陣數(shù)字航測相機為例,驗證所提方法的效率和精度。
1)無控嚴(yán)密對地定位原理
由于影像傾斜和地形起伏等因素,使得獲取的原始中心投影影像存在一定的變形,需要按照一定的數(shù)學(xué)模型實現(xiàn)原始影像與糾正后影像之間的幾何變換。航測相機獲取的數(shù)字影像,一般都滿足中心投影成像特性,可以采用共線方程模型建立嚴(yán)密對地定位關(guān)系,公式表述為:
其中,XS、YS、ZS為攝站點坐標(biāo);X、Y、Z為地面點坐標(biāo);為3 個外方位元素組成的9個方向余弦,外方位元素由集成在相機上的POS設(shè)備直接測定。
2)CUDA并行程序設(shè)計原則
計算統(tǒng)一設(shè)備架構(gòu)(compute unified device architecture,CUDA)是NIVDIA公司推出的一款內(nèi)嵌在GPU上的通用計算平臺,支持使用標(biāo)準(zhǔn)C語言開發(fā)GPU代碼,這些代碼即可運行在CPU上,也可運行在GPU上。CPU負(fù)責(zé)派生出在GPU運行的多線程任務(wù),即CUDA的內(nèi)核程序;GPU則通過內(nèi)部調(diào)度器將內(nèi)核程序映射到GPU的流處理器簇(stream multiprocessors,SM)上,SM數(shù)目越多,程序運行速度提升比例就會越高。每個SM調(diào)度多個線程塊,在每一個線程塊內(nèi)部又包含著許多線程。這些線程以批處理方式運行,稱為線程束,是SM中線程執(zhí)行的最小單元。基于CUDA層次化調(diào)度機制,進行GPU并行程序設(shè)計時需遵循以下三個原則:(1)要解決的任務(wù)可分解為多個可獨立執(zhí)行的子任務(wù);(2)執(zhí)行每個子任務(wù)的時間消耗不大于解決母任務(wù)的時間消耗;(3)每個子任務(wù)的解決可獨立執(zhí)行,且不需要復(fù)雜的流程控制。而面陣影像幾何糾正中的逐像素幾何變換及灰度重采樣操作計算密集度高,無需進行流程控制,符合上述原則,故可將其映射到CUDA內(nèi)核函數(shù)中。
因此,面陣影像GPU幾何糾正原理為將CPU視為程序的流程控制端和串行代碼執(zhí)行端,負(fù)責(zé)面陣影像數(shù)據(jù)讀入、旋轉(zhuǎn)矩陣計算及糾正影像地理范圍概算等任務(wù);而將地面點坐標(biāo)計算、像點坐標(biāo)計算和灰度重采樣三個環(huán)節(jié)映射到CUDA內(nèi)核程序中,發(fā)揮GPU并行計算優(yōu)勢,高效完成面陣影像快速幾何糾正任務(wù)。
圖1 GPU幾何糾正算法流程圖
使用共線方程建立無控嚴(yán)密對地定位關(guān)系的方法有兩種,分別為正解法和反解法。正解法糾正是由原始影像的像素點位置利用共線方程直接解算出糾正后影像像素位置,并將原始影像上該像點的灰度值填充到糾正后影像的相應(yīng)位置。反解法則是由糾正后的影像像素位置出發(fā)利用共線方程解算其在原始影像中的像素位置,并將原始影像的像素位置的灰度值填充到糾正后影像的相應(yīng)位置。
在CPU平臺下,程序是以串行方式執(zhí)行,體現(xiàn)在影像幾何糾正上就是像素的處理是順序執(zhí)行的,不同的采樣方法之間的差異僅僅是計算量的問題。在GPU平臺下,程序是以線程并發(fā)的方式執(zhí)行,并行性能發(fā)揮的關(guān)鍵在于應(yīng)盡量保證程序?qū)γ總€像素的處理是獨立進行的,且流程控制部分不宜過多。正解法糾正對每個像素的處理都需要迭代判斷其高程值是否滿足限差,計算量大,流程控制復(fù)雜,存儲器尋址操作復(fù)雜度高,GPU并行計算優(yōu)勢無法充分發(fā)揮。而反解法糾正有效地避免了線程訪問沖突問題及數(shù)據(jù)不一致性錯誤,求解過程明確,計算復(fù)雜度低,GPU并行易于實現(xiàn)。故本文設(shè)計的GPU幾何糾正算法使用反解法,校正流程如圖1所示。
詳細(xì)步驟如下:
1)POS數(shù)據(jù)讀入與旋轉(zhuǎn)矩陣計算
在CPU端將待糾正影像和對象的POS數(shù)據(jù)讀入到GPU的全局內(nèi)存中。根據(jù)讀入的外方位角元素計算影像旋轉(zhuǎn)矩陣,計算公式為:
式中,φ、ω、κ分別為航向傾角、旁向傾角和旋偏角。
2)計算地面點坐標(biāo)
根據(jù)影像尺寸及旋轉(zhuǎn)矩陣,利用共線方程計算影像地理坐標(biāo)的四周范圍。假定得到的影像左下角地面點坐標(biāo)為(Xmin,Ymin),糾正后影像分辨率為m,則影像上位置為(i,j)的像素點對應(yīng)的地面坐標(biāo)為:
式中,blockDim、blockIdx、thread Idx均為 CUDA內(nèi)建變量,數(shù)據(jù)類型均為dim3類型,分別標(biāo)識線程塊的維度、線程塊索引及線程索引。其中,x方向和y方向分別對應(yīng)面陣影像的寬度和高度。
根據(jù)設(shè)定的線程索引方式及規(guī)定的CUDA并行程序設(shè)計原則,可知面陣影像幾何糾正算法需要的線程塊和線程網(wǎng)格配置維度均為二維,即由二維線程塊組成線程網(wǎng)格。在影像處理領(lǐng)域,往往以2的冪次配置每個線程塊中的線程數(shù)目,其組織方式可采用以下幾種方案:2 ×2、4 ×4、8 ×8、16×16、32×32。由于NIVDIA規(guī)定線程束的大小為32,前兩種方案中線程束均小于該值,造成計算資源的大量浪費。8×8的配置方案,每個SM內(nèi)的線程數(shù)為512,小于每個SM可處理768個線程的約束;32×32的配置方案調(diào)度每個線程塊中的線程
3)CUDA線程塊及線程網(wǎng)格配置
待糾正面陣影像僅存在x方向和y方向兩個索引維度,則其在CUDA中的線程索引可以表示為:數(shù)目為1024,超出一個線程塊只能包含512個線程的限制。而16×16的線程塊組織方案,SM每次調(diào)度3個線程塊,可充分利用SM的處理性能。故本文選擇16×16的線程塊調(diào)度方案,若糾正后的影像寬度為W,高度為H,則其對應(yīng)的線程網(wǎng)格配置方案為:
4)計算像點坐標(biāo)
當(dāng)測量參數(shù)無誤差時,依據(jù)共線方程能夠得到無幾何失真的地面影像。而在實際應(yīng)用中,由于相機畸變的存在,使得糾正后的影像仍存在殘余誤差。因此,建立無控制嚴(yán)密對地定位關(guān)系時,首先校正相機畸變。
航測相機畸變主要由相機鏡頭徑向畸變(k1,k2,k3)、切向畸變(p1,p2)、面陣 CCD非正方形比例因子b1、CCD陣列排列非正交性畸變系數(shù)b2等因素引起。像點坐標(biāo)畸變差計算公式為:
式中,δx、δy為航測相機畸變導(dǎo)致的像點坐標(biāo)偏移量;dx0、dy0、df為像主點及相機焦距改正量,由相機文件提供;dx、dy為像主點坐標(biāo)相對于面陣影像中心點(0,0) 點的偏移量;Δx=x-x0、Δy=y-y0,分別為量測像點坐標(biāo)與像主點坐標(biāo)在x方向和y方向的坐標(biāo)差值;。
將公式(4)代入到公式(1),可推導(dǎo)無幾何失真的無控嚴(yán)密對地定位關(guān)系表達(dá)式:
其中:
由于面陣影像的屏幕顯示是以行列號表示像素位置,坐標(biāo)系定義為以左上角為原點,x方向取向右為正,y軸方向取向下為正。因此,還需要建立像平面坐標(biāo)到面陣影像坐標(biāo)系之間的坐標(biāo)變換關(guān)系,像平面坐標(biāo)(x,y)到屏幕坐標(biāo)(I,J)的轉(zhuǎn)換公式為:
其中,Ic、Jc為像主點所在的行、列號;μ為像元尺寸。
5)灰度重采樣
采用反解法計算得到的像點坐標(biāo)不可能為整數(shù),因此,存在灰度重采樣問題。在CUDA程序執(zhí)行過程中,每個線程塊內(nèi)所有線程共同擁有一塊共享存儲器,所有線程均可訪問全局存儲器。共享存儲器訪存速度優(yōu)于全局存儲器。在灰度重采樣時,每個線程都需要從GPU的存儲器中讀取這組參數(shù),如果使用全局存儲器,則會存在嚴(yán)重的訪存延遲。因此,本文將坐標(biāo)變換參數(shù)從全局存儲器讀取到訪存速度相對較高的共享存儲器中,提升影像灰度重采樣效率。
采用Microsoft Visual Studio 2010開發(fā)環(huán)境分別開發(fā)了在CPU平臺和GPU平臺上運行的C++程序,其中CPU程序設(shè)備環(huán)境為Intel?CoreTMi7-5950HQ CPU 2.9GHZ,內(nèi)存為 32GB,64 位操作系統(tǒng);GPU設(shè)備環(huán)境為GeForce GTX 980M,CUDA版本為CUDA7.0。
實驗數(shù)據(jù)為某新型大面陣數(shù)字航測相機在中國西部某地拍攝的符合中心投影特性的面陣影像,測區(qū)處于平原與山地交界地帶,地形起伏較大。單幅影像原始大小為6024×8008,影像位數(shù)為8位,數(shù)據(jù)格式為TIFF;相機主距45mm,像素大小為12μm,航高1500m,影像分辨率為0.19m。相機上集成有POSAV510系統(tǒng),記錄相機攝影時的位置和姿態(tài)參數(shù);經(jīng)POSPAC后處理軟件處理后,可為面陣航測影像提供精確的攝站點坐標(biāo)和相機姿態(tài)參數(shù)。相機參數(shù)文件包含相機畸變系數(shù)、像中心點的像素坐標(biāo)和相機焦距等信息。在每幅影像上均勻分布有32個地面控制點或空三加密點,坐標(biāo)系為2000國家大地坐標(biāo)系。
機載POS系統(tǒng)直接對地定位精度可由嚴(yán)密空三解算的地面控制點進行檢驗,檢驗公式為:
式中,ica、jca為本文推導(dǎo)公式計算控制點行列號;ico、jco為經(jīng)嚴(yán)密空三解算得到控制點行列號。
使用本文方法及公式(7),選取5幅實驗影像,利用已有控制數(shù)據(jù),驗證經(jīng)檢校后的POS數(shù)據(jù)直接對地定位精度,結(jié)果見表1。
表1 1752號影像像點坐標(biāo)計算精度(單位:像素)
由表1可知,經(jīng)嚴(yán)格檢校的POS數(shù)據(jù)無控定位精度優(yōu)于0.25個像素。
1)糾正精度分析
在應(yīng)急測繪應(yīng)用場景下,無法在短時間內(nèi)獲取大量高精度的控制點。因此,以1752號影像(圖2)為例,取測區(qū)平均高程開展無控面陣影像幾何糾正試驗。采用雙線性插值法進行灰度重采樣,幾何糾正結(jié)果如圖3所示。
圖2 原始影像
圖3 CPU/GPU糾正后影像
對圖3中的32個控制點進行量測,其誤差分布情況見表2。
由表2可知,32個檢查點的誤差最大值為7.79m,最小值為0.03m??傻贸鼋Y(jié)論:使用平均高程進行無控幾何糾正精度可達(dá)到米級。
表3 相機畸變對糾正精度的影響(單位:m)
表3對比了相機畸變對面陣影像幾何糾正精度的影響。結(jié)果顯示:加入畸變糾正后幾何糾正精度分別提高了5.23倍(X方向)和3.92倍(Y方向)。說明航測相機畸變是面陣影像幾何糾正的關(guān)鍵步驟,不可忽略。
對比表2和表3中校正相機畸變后的結(jié)果可知,所有檢查點的誤差值均在3倍中誤差以內(nèi)。
2)糾正效率分析
使用加速比Sr對本文提出快速幾何糾正算法效率進行評價,定義如下:
式中,Tcpu為CPU串行算法進行面陣影像幾何糾正所需的時間;Tgpu為GPU并行算法進行面陣影像幾何糾正的所需的時間。
利用最鄰近像元法和雙線性插值法進行灰度重采樣,隨機選取5幅影像,其在CPU環(huán)境和GPU環(huán)境下的運行時間及加速比,見表4和表5。
表4 最鄰近像元法所需時間(單位:m s)
表5 雙線性插值法所需時間(單位:m s)
從上表可以看出:由于采用了GPU并行算法,面陣影像幾何糾正時間大幅縮短。較最鄰近像元法,雙線性插值方法計算量更大,所需時間更長,但兩種插值方法所需時間均小于400ms。較CPU串行程序而言,本文設(shè)計的GPU算法加速比在20倍以上。
本文從數(shù)字航測相機數(shù)據(jù)快速處理需求出發(fā),提出了POS數(shù)據(jù)支持下無控面陣航測影像幾何糾正算法,并進行了GPU編程實現(xiàn)。該算法使用經(jīng)檢校后的POS數(shù)據(jù)實現(xiàn)面陣影像的直接對地定位,定位精度優(yōu)于0.25個像素;應(yīng)急條件下,使用平均高程進行無控幾何糾正精度可達(dá)到米級;較CPU串行糾正方法,GPU并行幾何糾正效率提升20倍以上。本文方法同樣適用于其他滿足中心投影構(gòu)像條件的遙感影像,具有一定的通用性。
本文研究主要實現(xiàn)了單景航攝影像的快速糾正,還有以下任務(wù)有待深入研究:其一,本文方法未使用DEM數(shù)據(jù),對于如何開發(fā)加入DEM數(shù)據(jù)的GPU幾何糾正算法,進一步提高影像幾何糾正精度還需繼續(xù)研究;其二,在本文研究的基礎(chǔ)上,開發(fā)處理大數(shù)據(jù)量的影像快速拼接算法,提升獲取大范圍區(qū)域性影像的時效性,也是未來亟待解決的問題之一。
[1]張祖勛.航空數(shù)碼相機及其有關(guān)問題[J].測繪工程,2004,13(4):1-5.
[2]蘇統(tǒng)華,馬培軍,劉曙等.CUDA專家手冊[M].北京:機械工業(yè)出版社,2014.
[3]方留楊,王密,李德仁.CPU和GPU協(xié)同處理的光學(xué)衛(wèi)星遙感影像正射校正方法[J].測繪學(xué)報,2013,42(5):668-675.
[4]侯毅,沈彥男,王睿索等.基于GPU的數(shù)字影像的正射糾正技術(shù)的研究[J].現(xiàn)代測繪,2009,32(3):10-11.
[5]楊靖宇,張永生,李正國等.遙感影像正射糾正的GPU-CPU協(xié)同處理研究[J].武漢大學(xué)學(xué)報·信息科學(xué)版,2011,36(9):1043-1046.
[6]徐秋輝.無控制點的無人機遙感影像幾何校正與拼接方法研究[D].南京:南京大學(xué),2013.
[7]張浩,張兵,衛(wèi)征.基于POS的高光譜影像快速幾何糾正[J].測繪通報,2009(1):14-17.
[8]程紅,王志強,張耀宇.航空影像幾何校正方法的研究[J].東北師大學(xué)報(自然科學(xué)),2009,41(3):50-54.
[9]袁國體.航空遙感影像正射校正關(guān)鍵技術(shù)研究[D].焦作:河南理工大學(xué),2011.
[10]李德龍,邙曉宇,劉楊等.基于地形數(shù)據(jù)庫與機載POS的影像正射糾正技術(shù)探討[J].地理信息世界,2012,10(6):58-61.
[11]周前飛,劉晶紅,李剛.面陣CCD航空相機斜視圖像幾何畸變校正誤差分析[J].儀器儀表學(xué)報,2014,35(6):1-8.
[12]王偉,童小華,謝鋒等.基于POS數(shù)據(jù)的OMIS影像幾何校正[J].遙感信息,2010(1):89-93.
[13]周國香.UAV載多面陣數(shù)碼相機拼接技術(shù)的研究[D].青島:山東科技大學(xué),2009.