專利名稱:基于cpu和gpu協(xié)同處理的遙感影像正射校正方法
技術(shù)領(lǐng)域:
本發(fā)明屬于遙感影像高性能處理領(lǐng)域,涉及一種基于CPU (中央處理器)和GPU (圖像處理器)協(xié)同處理的光學(xué)衛(wèi)星遙感影像正射校正方法。
背景技術(shù):
正射校正是光學(xué)衛(wèi)星遙感影像用于災(zāi)害防治、搶險救災(zāi)等具體應(yīng)用的關(guān)鍵處理環(huán)節(jié),也是整個遙感數(shù)據(jù)處理過程中計算最密集、耗時最長的步驟之一。近年來,隨著對地觀測技術(shù)的飛速發(fā)展,光學(xué)遙感衛(wèi)星數(shù)據(jù)源迅速增加,影像分辨率大幅提高,獲取的影像數(shù)據(jù)量快速增長,對這些海量數(shù)據(jù)光學(xué)衛(wèi)星遙感影像進(jìn)行正射校正所需的計算量非常巨大。傳統(tǒng)的光學(xué)衛(wèi)星數(shù)據(jù)處理架構(gòu)主要考慮數(shù)據(jù)處理的質(zhì)量和精度,并未顧及計算效率,已無法滿足對海量數(shù)據(jù)光學(xué)衛(wèi)星遙感影像進(jìn)行快速正射校正的處理要求。目前,國內(nèi)外相關(guān)學(xué)者和研究機構(gòu)對在GPU上進(jìn)行正射(幾何)校正開展了一定的研究,使用GPU提高大數(shù)據(jù)遙感影像的正射(幾何)校正效率逐漸成為共識。著名的影像處理軟件 PCI Geomatics 在 2009 年 4 月發(fā)行了 Pro-Lines GeoImaging server 系統(tǒng),該系統(tǒng)使用GPU并行計算技術(shù)對遙感影像進(jìn)行幾何校正,獲得了較高的加速比;德國宇航中心通過研究正射校正等遙感數(shù)據(jù)處理算法在GPU硬件上的映射方法,實現(xiàn)了對航拍數(shù)據(jù)的高效處理,從而為在軌近實時災(zāi)害監(jiān)測提供支持。在國內(nèi),陳超、陳彬等以仿射變換幾何校正方法為例介紹了在GPU上進(jìn)行幾何校正的方法,較傳統(tǒng)的幾何校正算法加速2-3倍;侯毅、沈彥男等在保證影像正射校正精度的基礎(chǔ)上測試基于GPU的數(shù)字影像正射校正的速率,證明了基于GPU的數(shù)字影像正射校正的性能相對于CPU有較大的提高,算法加速比達(dá)到3-5倍。由于算法設(shè)計和實現(xiàn)較為簡單,上述校正方法并沒有完全發(fā)揮GPU的優(yōu)勢。楊靖宇、張永生等搭建了 CPU-GPU協(xié)同并行計算平臺并完成了正射校正的CPU-GPU協(xié)同處理和性能優(yōu)化,利用GeForce 9500GT顯卡對大小為6000像素X6000像素的全色影像進(jìn)行多項式糾正對比實驗,證明GPU處理效率優(yōu)于CPU處理效率,最鄰近內(nèi)插和雙線性內(nèi)插的最終加速比分別為8. 45倍和10. 91倍,但由于使用的GPU芯片較老,該實驗并未涉及對當(dāng)前主流的基于Fermi架構(gòu)GPU的性能優(yōu)化策略,且在數(shù)據(jù)量快速增長的背景下,該算法加速比不甚理想,無法完全滿足對海量光學(xué)衛(wèi)星影像進(jìn)行近實時正射校正的需求。
發(fā)明內(nèi)容
本發(fā)明所要解決的問題是,針對海量數(shù)據(jù)光學(xué)衛(wèi)星遙感影像,提出一種可以滿足近實時處理需求的快速正射校正方法。本發(fā)明的技術(shù)方案為一種基于CPU和GPU協(xié)同處理的遙感影像正射校正方法,包括以下步驟步驟1,將待校正影像和DEM從主機端內(nèi)存拷貝至GPU的全局存儲器中;步驟2,將校正變換模型參數(shù)拷貝至GPU的常數(shù)存儲器中;步驟3,動態(tài)調(diào)整片上緩存,包括在共享存儲器不可用時將更多片上緩存分配給一級 cache ;步驟4,設(shè)置GPU線程塊大小,確定GPU線程塊數(shù)目;步驟5,在GPU上對待校正影像進(jìn)行正射校正,得到校正后影像;步驟6,將校正后影像從GPU全局存儲器中拷貝回主機端內(nèi)存;其中,步驟1、2、3、4、6由CPU執(zhí)行,步驟5由GPU執(zhí)行。而且,步驟3中,在共享存儲器不可用時將48KB片上緩存分配給一級cache。而且,步驟4中,設(shè)置GPU線程塊大小、確定GPU線程塊數(shù)目按照以下準(zhǔn)則進(jìn)行,(I)線程塊中線程數(shù)小于1024 ;(2)流式多處理器中線程塊數(shù)量小于8 ;(3)流式多處理器中線程數(shù)等于1536。本發(fā)明針對海量光學(xué)衛(wèi)星遙感影像,基于CPU和GPU協(xié)同處理理論,提出了一種可以滿足近實時處理需求的快速正射校正方法。該方法在保證算法正確性的前提下,大幅提高了光學(xué)衛(wèi)星遙感影像正射校正效率。
圖1為本發(fā)明實施例的流程示意圖;圖2為本發(fā)明實施例的常數(shù)存儲器中校正變換模型參數(shù)命中情況示意圖;圖3為本發(fā)明實施例的動態(tài)調(diào)整片上緩存后Fermi架構(gòu)GPU存儲結(jié)構(gòu)示意圖;圖4為本發(fā)明實施例的線程塊大小變化時流式多處理器中線程塊和線程數(shù)量的變化情況示意圖。
具體實施例方式根據(jù)映射關(guān)系的不同,正射校正方案可分為兩種,分別稱為直接法方案和間接法方案。由于直接法不能直接得到校正結(jié)果影像上的每個點的灰度值,需要利用灰度值分配的思路來簡化處理流程以達(dá)到和間接法同等規(guī)模的計算復(fù)雜度,因此在GPU上容易出現(xiàn)嚴(yán)重的存儲器寫訪問沖突和數(shù)據(jù)不一致等問題,降低GPU的計算效率。采用基于輸出影像進(jìn)行任務(wù)劃分的間接法校正方案則不存在上述問題,該方法計算過程簡單,可以直接得到校正結(jié)果影像上每個點的灰度值,比較容易映射到GPU上進(jìn)行處理。因此,本發(fā)明采用具有先天并行性的間接法方案作為校正方案,保證GPU的計算效率。本發(fā)明技術(shù)方案具體實施時可采用計算機軟件技術(shù)實現(xiàn)自動運行。實施例使用通用統(tǒng)一設(shè)備架構(gòu)(Compute Unified Device Architecture, CUDA)提供的擴展C語言作為開發(fā)工具,并使用新一代基于Fermi架構(gòu)的GPU實施和運行。以下結(jié)合附圖和實施例詳細(xì)說明本發(fā)明技術(shù)方案。如圖1所示,實施例包括以下步驟步驟1,將待校正影像和DEM從主機端內(nèi)存拷貝至GPU的全局存儲器中。本步驟具體實施時可使用cudaMalloc ()函數(shù)為待校正影像和對應(yīng)的DEM(數(shù)字高程模型)在GPU的全局存儲器上分配存儲空間,并使用CUdaMemCpyO函數(shù)將其拷貝至全局存儲器上。cudaMallocO函數(shù)和cudaMemCpy ()函數(shù)為現(xiàn)有技術(shù),可參見CUDA下的GPU編程相關(guān)文獻(xiàn)。
步驟2,將校正變換模型參數(shù)拷貝至GPU的常數(shù)存儲器中。本發(fā)明為了達(dá)到更高的處理效率,使用GPU常數(shù)存儲器代替全局存儲器存儲校正變換模型參數(shù),以減少算法訪問全局存儲器的次數(shù)。除全局存儲器外,GPU上還有一個大小為64KB的常數(shù)存儲器。該存儲器存儲空間小,且為只讀存儲器,但由于設(shè)計有8KB的cache (高速緩沖存儲器),因此在滿足特定的訪問模式時,訪存速度明顯優(yōu)于全局存儲器。在正射校正過程中,校正變換模型參數(shù)較少,且計算完成后不再改變,滿足常數(shù)存儲器對存儲空間和數(shù)據(jù)只讀的要求;此外,在通過地面點坐標(biāo)反算像點坐標(biāo)時,同步執(zhí)行的所有線程在同一時刻將訪問同一個校正變換模型參數(shù),因此,當(dāng)?shù)谝粋€線程(未命中cache)訪問常數(shù)存儲器獲得校正變換模型參數(shù)并將其載入到cache后,后面的所有線程都可直接命中cache,從而提高算法的執(zhí)行效率。如附圖2所示常數(shù)存儲器存儲多個校正變換模型參數(shù)l、2-n,例如當(dāng)?shù)谝粋€線程訪問常數(shù)存儲器獲得校正變換模型參數(shù)I并將其載入到cache后,同步執(zhí)行的所有線程在同一時刻都將訪問校正變換模型參數(shù)I。因此,按步驟2所述,本實施例將校正變換模型參數(shù)載入常數(shù)存儲器中,以提高算法的計算訪存比,從而提高算法的執(zhí)行效率。具體實施步驟可為I)使用constant修飾符修飾校正變換模型參數(shù)結(jié)構(gòu)體;2)調(diào)用CudaMemoryCpyToSymbol ()函數(shù)將校正變換模型參數(shù)從主機內(nèi)存載入至GPU常數(shù)存儲器中。步驟3,動態(tài)調(diào)整片上緩存,將更多片上緩存分配給一級cache。本發(fā)明針對目前廣泛使用的新一代Fermi架構(gòu)GPU,將更多的片上緩存分配給Fermi GPU特有的一級cache,以緩存更多待校正影像,進(jìn)一步減少算法訪問全局存儲器的次數(shù)。除全局存儲器和常數(shù)存儲器外,基于Fermi架構(gòu)的GPU在每一組處理核心中放置了 64KB的片上緩存,作為共享緩存和一級cache使用;此外,在片上緩存和全局存儲器之間還放置了 768KB的二級cache。二級cache為系統(tǒng)級cache,由GPU硬件負(fù)責(zé)數(shù)據(jù)調(diào)度和緩存;片上緩存則可根據(jù)需要柔性重組,通過動態(tài)調(diào)整共享緩存和一級cache的大小,可以提高算法和程序的執(zhí)行效率。本實施例使用間接法方案對光學(xué)衛(wèi)星遙感影像進(jìn)行正射校正,雖然每個線程塊對應(yīng)的校正后虛擬影像塊為規(guī)則塊,但該虛擬影像塊對應(yīng)的輸入影像塊并不為規(guī)則塊,在單程序多數(shù)據(jù)流程序設(shè)計中,將邊界動態(tài)變化的、不規(guī)則的輸入影像塊載入到共享存儲器中存在困難。由于Fermi架構(gòu)GPU可動態(tài)調(diào)整片上緩存,因此本實施例在共享存儲器不可用時,將更多的片上緩存(48KB)分配給一級cache,如附圖3所示一級cache動態(tài)調(diào)整后緩存48KB待校正影像,二級cache緩存768KB待校正影像,全局存儲器存儲整幅待校正影像。由于相鄰線程進(jìn)行灰度重采樣時讀取的輸入影像像素間隔不大,如果將更多的片上緩存分配給一級cache,緩存更多的待校正影像,可以增加線程塊灰度重采樣時命中一級cache的幾率。片上緩存動態(tài)分配具體可通過cudaFuncSetCacheConfigO函數(shù)實現(xiàn),具體實施時可參見CUDA下的GPU編程相關(guān)文獻(xiàn)。步驟4,設(shè)置GPU線程塊大小,確定GPU線程塊數(shù)目。合理設(shè)置線程塊大小,并根據(jù)影像大小確定線程塊數(shù)目,可以保證整幅影像被GPU線程塊完全覆蓋。設(shè)置線程塊大小的時候使用“配置選擇優(yōu)化”策略提高GPU流式多處理器中GPU線程的占有率,從而提高GPU硬件調(diào)度線程的效率,更好地隱藏訪問延遲。在GPU中,線程塊被映射到流式多處理器中調(diào)度執(zhí)行。在基于Fermi架構(gòu)的GPU中,當(dāng)滿足如下三個準(zhǔn)則時,流式多處理器的調(diào)度性能達(dá)到最優(yōu)準(zhǔn)則1:線程塊中線程數(shù)小于1024 ;準(zhǔn)則2 :流式多處理器中線程塊數(shù)量小于8 ;準(zhǔn)則3 :流式多處理器中線程數(shù)等于1536。附圖4列出了當(dāng)線程塊大小(線程塊中線程數(shù))變化時,流式多處理器中線程塊數(shù)量和線程數(shù)量的變化情況。從圖中可知,當(dāng)GPU線程塊大小為256和512時,流式多處理器中線程塊數(shù)量分別為6個和3個,在這兩種情況下,流式多處理器中的線程數(shù)都達(dá)到1536個,同時滿足準(zhǔn)則1、準(zhǔn)則2和準(zhǔn)則3,調(diào)度性能達(dá)到最優(yōu)。因此,對執(zhí)行正射校正算法的GPU線程塊進(jìn)行配置選擇優(yōu)化,將其大小設(shè)置為256或512,可以提高流式多處理器的調(diào)度性能,從而提高算法的執(zhí)行效率。在本實施例中,將GPU線程塊大小設(shè)置為256(16X16)。在這種情況下,設(shè)校正后虛擬影像大小為MXN,且每個GPU線程對一個像素進(jìn)行正射校正,則 GPU線程塊個數(shù)為「M/l6]xpV/l6](進(jìn)行向上取整是為了保證所有的像素皆被GPU線程覆蓋)。具體實施時也可以將GPU線程塊大小設(shè)置為512 (32X16或16X32),則GPU線程塊個數(shù)為「M/32~|x「A^/16l或「M/16]x「jV/32~|。步驟5,在GPU上對待校正影像進(jìn)行正射校正,得到校正后影像。在GPU上進(jìn)行正射校正的主要步驟包括1) GPU上線程按索引號計算對應(yīng)的地面點坐標(biāo);2) GPU上線程按索引號將地面點坐標(biāo)和DEM代入校正變換模型反算地面點對應(yīng)的像點坐標(biāo);3) GPU上線程按索引號進(jìn)行灰度重采樣;4) GPU上線程按索引號進(jìn)行灰度賦值。在具體實施時,可將上述算法步驟封裝成一個GPU核函數(shù)(關(guān)于核函數(shù)編寫的方法可參見CUDA下的GPU編程相關(guān)文獻(xiàn))。需要注意的是,由于在步驟4中對線程塊個數(shù)進(jìn)行了向上取整,因此在最后一行和最后一列的線程塊中,可能會出現(xiàn)某些線程未分配到像素的情況。在本實施例中,通過分支邏輯處理這種情況對未分配到像素的線程,不進(jìn)行任何處理而直接返回。步驟6,將校正后影像從GPU的全局存儲器中拷貝回主機端內(nèi)存。本步驟使用cudaMemCpy ()函數(shù)將步驟5校正完畢后所得校正后影像拷貝回主機端內(nèi)存中,具體實施時可參見CUDA下的GPU編程相關(guān)文獻(xiàn)。其中,步驟1、2、3、4、6在CPU上運行,即CPU執(zhí)行部分;步驟5在GPU上運行,SPGI3U執(zhí)行部分。搭建實驗環(huán)境對本實施例進(jìn)行性能和正確性驗證,其中CPU型號為Intel XeonE5650,GPU型號為NVIDIA Tesla M2050,實驗數(shù)據(jù)為資源三號下視標(biāo)準(zhǔn)景影像(校正前數(shù)據(jù)量1. 12GB,校正后數(shù)據(jù)量1. 49GB)。按照如附圖1所示流程對實驗數(shù)據(jù)進(jìn)行基于CPU和GPU協(xié)同處理的正射校正,采用雙三次插值法作為重采樣方法時,校正時間壓縮至IOs以下;與傳統(tǒng)串行逐點正射校正算法相比,算法加速比達(dá)到44. 79倍,可以滿足對海量光學(xué)衛(wèi)星遙感影像進(jìn)行近實時正射校正的需求。此外,經(jīng)過驗證,使用本實施例校正后的影像與在CPU上使用逐點正射校正獲取的校正后影像的灰度值完全相同,說明了本實施例的正確性。本文中所描述的具體實施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。
權(quán)利要求
1.一種基于CPU和GPU協(xié)同處理的遙感影像正射校正方法,其特征在于包括以下步驟步驟1,將待校正影像和DEM從主機端內(nèi)存拷貝至GPU的全局存儲器中;步驟2,將校正變換模型參數(shù)拷貝至GPU的常數(shù)存儲器中;步驟3,動態(tài)調(diào)整片上緩存,包括在共享存儲器不可用時將更多片上緩存分配給一級cache ;步驟4,設(shè)置GPU線程塊大小,確定GPU線程塊數(shù)目;步驟5,在GPU上對待校正影像進(jìn)行正射校正,得到校正后影像;步驟6,將校正后影像從GPU全局存儲器中拷貝回主機端內(nèi)存;其中,步驟1、2、3、4、6由CPU執(zhí)行,步驟5由GPU執(zhí)行。
2.如權(quán)利要求1所述基于CPU和GPU協(xié)同處理的遙感影像正射校正方法,其特征在于步驟3中,在共享存儲器不可用時將48KB片上緩存分配給一級cache。
3.如權(quán)利要求1或2所述基于CPU和GPU協(xié)同處理的遙感影像正射校正方法,其特征在于步驟4中,設(shè)置GPU線程塊大小、確定GPU線程塊數(shù)目按照以下準(zhǔn)則進(jìn)行,(1)線程塊中線程數(shù)小于1024;(2)流式多處理器中線程塊數(shù)量小于8;(3)流式多處理器中線程數(shù)等于1536。
全文摘要
一種基于CPU和GPU協(xié)同處理的遙感影像正射校正方法,包括將待校正影像和DEM從主機端內(nèi)存拷貝至GPU全局存儲器中;將校正變換模型參數(shù)拷貝至常數(shù)存儲器中;動態(tài)調(diào)整片上緩存,將更多片上緩存分配給一級cache;設(shè)置GPU線程塊大小,確定GPU線程塊數(shù)目;在GPU上進(jìn)行正射校正;校正完畢后將校正后影像從GPU全局存儲器中拷貝回主機端內(nèi)存。該方法針對海量光學(xué)衛(wèi)星遙感影像,基于CPU和GPU協(xié)同處理理論,提出了一種可以滿足近實時處理需求的快速正射校正方法。該方法在保證算法正確性的前提下,大幅提高了光學(xué)衛(wèi)星遙感影像正射校正效率。
文檔編號G06K9/32GK103020620SQ201210544790
公開日2013年4月3日 申請日期2012年12月14日 優(yōu)先權(quán)日2012年12月14日
發(fā)明者王密, 方留楊, 李德仁, 龔健雅 申請人:武漢大學(xué)