龐巧遇,鄧寶松,桂健鈞,鹿 迎
(軍事科學(xué)院 國防科技創(chuàng)新研究院,北京 100071)
針對室外大場景的三維重建,大多采用基于幾何信息來恢復(fù)相機(jī)參數(shù)的SFM(Structure from motion)算法[1]。Yasutaka Fumkawa實(shí)現(xiàn)了一種精確、魯棒的稠密重建方法PMVS[2]。Newcombe提出了一種基于體素的三維稠密點(diǎn)云重建方法[3],但是重建精度受體素網(wǎng)格的分辨率限制。StereoScan提出流水線方式[4],重建結(jié)果存在許多噪點(diǎn)。吳常常實(shí)現(xiàn)的VisualSFM算法是較為完善的重建算法[5]。Schonberger等提出的方法在重建精度和完整性上做出了一些改進(jìn),其缺點(diǎn)是深度圖估計(jì)速度過慢[6]。Moulon等提出openMVG算法[7],缺少構(gòu)建稠密點(diǎn)云部分,需要結(jié)合openMVS[8]。Shan等實(shí)現(xiàn)了對大規(guī)模圖片進(jìn)行三維重建的系統(tǒng),但消耗的資源很多[9]。
隨著CPU多核處理與GPU技術(shù)的出現(xiàn),圖像并行處理也得到迅速發(fā)展。在CPU并行處理方面,Cadena L等應(yīng)用了并行處理方式對醫(yī)學(xué)圖像進(jìn)行增強(qiáng)[10]。Indragandhi K等引入了圖像并行處理策略,提升了程序的性能[11]。Spiliotis IM等采用并行處理機(jī)制來處理圖像塊,提升了算法效率[12]。在GPU并行圖像處理方面,Davidson RL等采用GPU并行處理技術(shù)加速了空間應(yīng)用中的圖像處理[13]。Civerchia F等在機(jī)器人的圖像識別中使用了GPU并行計(jì)算[14]。
本文基于CPU與GPU兩種架構(gòu)在三維重建的兩個執(zhí)行階段引入并行加速處理,旨在提升整體三維重建的速度。本文方法采用OpenMP多線程處理機(jī)制,首先對圖像進(jìn)行尺度優(yōu)化,提取圖像中的GPS信息,獲取鄰接信息;再使用SIFTGPU算法并行提取圖像中的特征點(diǎn),只對相鄰的圖片進(jìn)行特征匹配,以減少匹配時(shí)間;最后,通過全局式SFM得到場景的稀疏點(diǎn)云。
本文工作主要分為兩個模塊:無人機(jī)圖像處理模塊和稀疏點(diǎn)云構(gòu)建模塊。整體流程如圖1所示。
圖1 系統(tǒng)處理流程
在無人機(jī)圖像處理模塊中,首先采用OpenMP多線程處理機(jī)制,以并行方式對無人機(jī)航拍圖像進(jìn)行尺度優(yōu)化,對航拍圖像進(jìn)行降采樣,方便后續(xù)步驟對其進(jìn)行處理。然后,利用OpenMP多線程處理機(jī)制,并行提取無人機(jī)航拍圖像中的GPS信息,根據(jù)空間位置確定圖像之間的鄰接關(guān)系,對圖像進(jìn)行排序。最后,該模塊的輸出信息是按照經(jīng)緯度由小到大順序排列的無人機(jī)航拍圖像,以及航拍圖像中對應(yīng)的GPS信息。
在稀疏點(diǎn)云構(gòu)建模塊中,以排列有序的無人機(jī)航拍圖像和圖像中的GPS信息作為輸入,利用SIFTGPU算法并行提取圖像特征。將圖像中的GPS信息作為先驗(yàn)信息,只對相鄰的圖像進(jìn)行特征匹配。采用RANSAC(random sample consensus)算法來剔除誤匹配點(diǎn)[15]。根據(jù)全局式SFM,建立局部圖像和全局圖像的旋轉(zhuǎn)和平移矩陣,從而估算相機(jī)位姿和場景三維坐標(biāo),得到場景的稀疏點(diǎn)云。
本文的研究重點(diǎn)是無人機(jī)圖像加載處理部分以及SFITGPU特征提取部分,這也是三維重建最為關(guān)鍵的兩個環(huán)節(jié),下面對這兩部分算法進(jìn)行詳細(xì)介紹。
原始的無人機(jī)航拍圖像尺度都非常大,其像素大小為5184 px×3888 px,文件大小為20 MB。利用無人機(jī)航拍圖像對野外場景進(jìn)行三維重建,需要對原始圖像進(jìn)行預(yù)處理,主要包括兩個環(huán)節(jié):①通過降采樣優(yōu)化圖像大??;②利用無人機(jī)航拍圖像中的GPS信息,獲得圖像之間的鄰接關(guān)系。
在對無人機(jī)航拍圖像進(jìn)行尺度優(yōu)化與GPS信息提取的同時(shí),通過預(yù)處理算法對航拍圖像進(jìn)行空間拓?fù)浞治?。圖像預(yù)處理算法運(yùn)行主要消耗CPU計(jì)算資源,這一過程是單線重復(fù)的。本研究方法采用OpenMP多線程處理機(jī)制,充分發(fā)揮多核CPU的計(jì)算性能,對航拍圖像進(jìn)行并行處理以提升圖像的處理速度。
OpenMP是由計(jì)算機(jī)軟件及硬件廠商共同制定的應(yīng)用程序編程接口(application programming interface,API),是一種用于共享內(nèi)存系統(tǒng)的編程模型[16]。OpenMP的體系架構(gòu)如圖2所示,主要包括3部分,分別是:編譯指令(Compiler Directive)、環(huán)境變量(Environment Variables)以及運(yùn)行庫函數(shù)(Runtime Library Functions)。編譯指令包含指令(directive)和子句列表(clause list),指令控制并行執(zhí)行的代碼區(qū)域和線程數(shù)量,字句列表控制變量在每個線程中的作用域。編譯器通過編譯指令將串行執(zhí)行的程序轉(zhuǎn)化為并行執(zhí)行的程序。環(huán)境變量中包含一些控制命令,控制程序并行執(zhí)行。運(yùn)行庫函數(shù)能夠獲取OpenMP中每個線程的信息,以及變量在每個線程中的屬性,進(jìn)而在編譯階段,將程序進(jìn)行并行化處理。
圖2 OpenMP體系架構(gòu)
OpenMP的執(zhí)行過程如圖3所示,采用Fork-Join執(zhí)行模式。從一個串行執(zhí)行的單線程程序開始,將其作為主線程,在執(zhí)行并行處理程序時(shí),主線程進(jìn)行Fork操作,創(chuàng)建多個新的線程來執(zhí)行并行區(qū)域中的程序。并行區(qū)域中的每個線程獨(dú)立執(zhí)行,不會相互影響。當(dāng)每個線程執(zhí)行完成后,各個線程進(jìn)行Join操作,又重新回到串行執(zhí)行的主線程。
圖3 Fork-Join 執(zhí)行模式
本文研究的無人機(jī)航拍圖像處理流程如圖4所示,采用OpenMP多線程處理機(jī)制,并行處理航拍圖像,這里設(shè)置的線程數(shù)量為8。首先,以并行方式對圖像尺度進(jìn)行優(yōu)化,通過降采樣,將原始像素為5184 px×3888 px的航拍圖像大幅縮小,即將圖像像素大小調(diào)整為1250 px×1000 px。然后,再通過OpenMP多線程處理機(jī)制,并行提取圖像的GPS信息。最后根據(jù)圖像中的GPS信息,確定圖像之間的鄰接關(guān)系,按照經(jīng)緯度由小到大的順序?qū)λ袌D像進(jìn)行空間排序,為三維重建后續(xù)步驟做好鋪墊。
圖4 無人機(jī)航拍圖像處理流程
基于CPU的無人機(jī)影像并行處理算法的偽代碼如算法1所示。首先,通過pragma omp parallel將圖像處理程序設(shè)定為并行處理,threadcount表示線程數(shù)量,其值為8。Num表示圖像數(shù)量,newW為原始圖像的寬除以寬的縮小比例,newH為原始圖像的長除以長的縮小比例,inter設(shè)置為CV_INTER_AREA,表示輸出圖像的寬和高都不大于輸入圖像的寬和高。通過exifReader->GPSLatitude函數(shù)讀取圖像EXIF中的緯度,exifReader->GPSLongitude函數(shù)讀取圖像EXIF中的經(jīng)度。最后,根據(jù)圖像中的經(jīng)緯度,采用sort函數(shù),按照經(jīng)度由小到大,如果經(jīng)度相同按照緯度由小到大的順序?qū)D像進(jìn)行排序。
算法1:基于CPU的無人機(jī)影像并行處理
輸入:原始的無人機(jī)航拍圖像
輸出:按經(jīng)緯度由小到大順序排列的航拍圖像
#pragma omp parallel for num_threads(threadcount)
newW ← img.cols / width_scale
newH ← img.rows / height_scale
inter ← CV_INTER_AREA
resize(img, Size(newW, newH),inter)
img.lat ← exifReader->GPSLatitude(img)
img.lon ← exifReader->GPSLongitude(img)
end for
bool cmp(Image a, Image b)
if a.lat != b.lat
return a. lat < b. lat
else
return a.lon < b.lon
sort(img, img + Num, cmp)
采用OpenMP多線程處理機(jī)制來處理無人機(jī)航拍圖像,能夠使系統(tǒng)架構(gòu)更清晰明了;通過編譯指令對串行程序進(jìn)行并行化,也能夠加快程序的運(yùn)行速度。此外,OpenMP多線程機(jī)制具有很強(qiáng)的靈活性,可以十分容易適配不同計(jì)算單元中的并行系統(tǒng)配置。該機(jī)制能夠很好平衡線程粒度與系統(tǒng)負(fù)載之間的關(guān)系,使得線程個數(shù)與計(jì)算單元的處理器核數(shù)相匹配,從而充分發(fā)揮多核處理器的并行能力,提升無人機(jī)航拍圖像的處理速度,進(jìn)而提高三維重建的執(zhí)行效率。
無人機(jī)飛行高度較低,拍攝的場景圖像尺度較大,并且內(nèi)容豐富,在特征提取階段,單張圖像的特征提取往往耗時(shí)較長。本文基于改進(jìn)的SIFTGPU算法,在GPU上以并行方式對無人機(jī)航拍圖像進(jìn)行特征提取。在處理圖像過程中,首先將初始圖像上傳至GPU全局內(nèi)存中,再綁定紋理內(nèi)存,對其進(jìn)行專門的紋理緩存讀、寫操作。本文采用的紋理緩存機(jī)制,對二維空間的局部性訪問進(jìn)行了優(yōu)化,所以通過紋理緩存訪問的二維矩陣會獲得加速效果。此外,紋理緩存不需要滿足全局內(nèi)存的合并訪問條件,從而在隨機(jī)存取的環(huán)境下保持了較高的運(yùn)算性能。
本文采用的SIFTGPU特征提取流程如圖5所示,首先利用高斯核函數(shù)對圖像進(jìn)行卷積,創(chuàng)建不同尺度的圖像,建立圖像的尺度空間;再對不同尺度的圖像進(jìn)行特征點(diǎn)檢測,提取圖像中的特征點(diǎn);通過計(jì)算關(guān)鍵點(diǎn)鄰域中點(diǎn)的梯度直方圖,選擇梯度最大的點(diǎn)的方向,作為該特征點(diǎn)的主方向;將特征點(diǎn)鄰域中所有像素點(diǎn)的梯度作為特征向量,形成特征描述子。
圖5 SIFTGPU特征提取流程
SIFTGPU特征提取算法的偽代碼如算法2所示。首先對圖像進(jìn)行顏色空間的轉(zhuǎn)換,將RGB圖像轉(zhuǎn)換為灰度圖像。再構(gòu)建圖像金字塔,first_octave表示圖像金字塔的第一層,num_octaves為圖像金字塔的層數(shù),num_scales為金字塔每一層的圖像縮放尺度。Num為圖像的數(shù)量,w為圖像的寬,h為圖像的高。通過sift_new函數(shù)進(jìn)行關(guān)鍵點(diǎn)檢測,并獲取關(guān)鍵點(diǎn)keys,以及關(guān)鍵點(diǎn)數(shù)量nkeys。計(jì)算每一個關(guān)鍵點(diǎn)的方向angles,對于關(guān)鍵點(diǎn)每個方向上的特征feature,計(jì)算出相應(yīng)的描述子descriptor。feature中存儲的是關(guān)鍵點(diǎn)的位置、尺度和方向,descriptor存儲的是歸一化后的128維特征向量。最后,將特征點(diǎn)feature與對應(yīng)的描述子descriptor導(dǎo)出到sFeat,sDesc文件中。
算法2:SIFTGPU特征提取
輸入:無人機(jī)航拍圖像
輸出:圖像特征點(diǎn)與描述子文件
first_octave ← 0, octaves ← num_octaves
scales ← num_scales
cvtColor(image, img,CV_RGB2GRAY)
w ← img.cols, h ← img.rows
filt ← sift_new(w,h,octaves,scales,first_octave)
keys ← get_keypoints(filt)
nkeys ← get_nkeypoints(filt)
angles[n] ← {0}
for(k=1: nkeys)
nangles←keypoint_orientation(filt,angles,keys+k)
descriptor ←keypoint_descriptor(filt,keys+k, angles[q])
feature ←fp(keys[k].x, keys[k].y,keys[k].sigma, angles[q])
end for
end for
end for
sFeat ← feature
sDesc ← descriptor
本文所采用的SIFTGPU算法構(gòu)建圖像尺度空間的計(jì)算過程如下:
將原始圖像I(x,y) 與一個可變尺度的二維高斯核函數(shù)G(xi,yi,σ) 進(jìn)行卷積運(yùn)算,得到圖像的尺度空間L(x,y,σ)。
高斯核函數(shù)為
(1)
式中:參數(shù)σ為高斯平滑因子。
圖像的尺度空間為
L(x,y,σ)=G(xi,yi,σ)*I(x,y)
(2)
采用高斯核函數(shù)主要有兩個原因:①高斯核函數(shù)是唯一的尺度不變核函數(shù);②高斯核函數(shù)計(jì)算過程簡單,執(zhí)行效率高,并且提取的特征具有很好的魯棒性。
SIFTGPU[17]算法中不僅使用不同尺度的高斯核函數(shù)進(jìn)行濾波,還引入高斯金字塔,對圖像向下采樣,逐步降低圖像的分辨率,形成一系列以金字塔形狀排列的圖像,這使得圖像具有更高的尺度分辨率。并且,每組圖像中包含多層圖像,使得相鄰尺度的變化比較平滑。在同一組內(nèi),不同層圖像的尺寸是一樣的,后一層圖像的高斯平滑因子σ是前一層圖像平滑因子的k倍。
如果不使用圖像高斯金字塔[18],只在原始分辨率的圖像上采用不同的高斯核函數(shù)進(jìn)行多尺度檢測,那么在提取粗尺度特征時(shí),會產(chǎn)生很大計(jì)算量,造成資源浪費(fèi)。因?yàn)樵诒3謭D像原始分辨率不變的情況下,提取粗尺度特征需要高斯核函數(shù)的方差較大,相應(yīng)的濾波窗口也較大,計(jì)算量會激增,而圖像在大尺度上比較模糊,就沒有必要保持圖像的原始分辨率,通過構(gòu)建圖像的高斯金字塔,可以高效提取不同尺度的特征。
基于SIFTGPU算法對圖像進(jìn)行特征提取的過程中,并不是所有步驟都在GPU中運(yùn)行,而是為每個步驟選取最合適的運(yùn)行方式,充分發(fā)揮CPU+GPU架構(gòu)優(yōu)越性能。在SIFTGPU算法中,構(gòu)建圖像的尺度空間、生成圖像高斯金字塔、建立特征點(diǎn)方向直方圖、計(jì)算主方向等步驟利用GPU進(jìn)行加速;而圖像的顏色空間轉(zhuǎn)換、描述子特征向量的歸一化等步驟則使用CPU多核并行效率更高。
通過本文SIFTGPU算法對圖像進(jìn)行特征提取,不僅能夠快速得到圖像的特征,而且得到的SIFT特征具有很好的區(qū)分性。SIFT特征對旋轉(zhuǎn)、尺度縮放、亮度變化具有不變性,并且對視角變化、仿射變換、噪聲也保持一定程度的穩(wěn)定性。此外,SIFTGPU算法具有很好的適配性,能夠同時(shí)兼容Intel集顯、ATI和NVIDIA獨(dú)顯。這樣在具有不同顯卡配置的計(jì)算單元上都能夠運(yùn)行SIFTGPU算法,通過GPU加速,并行提取圖像中的特征,進(jìn)而提升三維重建速度。
為了評價(jià)本文提出的無人機(jī)影像并行圖像處理與特征提取算法,利用無人機(jī)在室外按照規(guī)劃的路徑進(jìn)行拍攝,對航拍圖像進(jìn)行測試。實(shí)驗(yàn)環(huán)境見表1,中央處理器為AMD Ryzen Threadripper 2990 WX 32-Core @ 3.00 GHz,內(nèi)存16 G,圖形處理器為NVIDIA GeForce RTX 2070(8 G),操作系統(tǒng)為Windows10,編程語言為C++。
表1 計(jì)算機(jī)配置
通過四旋翼無人機(jī)拍攝圖像,云臺相機(jī)為索尼DSC-QX30U,相機(jī)分辨率2000萬像素,照片大小為5184 px×3888 px,圖像數(shù)量為30,對航拍圖像進(jìn)行三維場景重建。在無人機(jī)圖像處理,特征提取的速度與特征點(diǎn)數(shù)量,以及稀疏點(diǎn)云的重建效果等方面,將本文提出的方法與開源算法openMVG、colmap進(jìn)行了比較。
針對無人機(jī)影像的圖像處理,將本文方法與openMVG、colmap開源算法進(jìn)行了性能對比。見表2,對不同數(shù)量的航拍圖像,分別從圖像的尺度優(yōu)化、提取圖像中的GPS信息以及整體運(yùn)行時(shí)間這3個方面進(jìn)行了對比,來測試這3種方法的性能。
表2 無人機(jī)影像并行處理性能
根據(jù)實(shí)驗(yàn)結(jié)果,在對無人機(jī)影像尺度優(yōu)化方面,本文方法的運(yùn)行時(shí)間平均比openMVG的運(yùn)行時(shí)間快了2.14倍,比colmap的運(yùn)行時(shí)間快了2.41倍;在提取無人機(jī)影像GPS信息方面,本文方法的運(yùn)行時(shí)間平均比openMVG的運(yùn)行時(shí)間快3.22倍,比colmap的運(yùn)行時(shí)間快了3.87倍;在整體運(yùn)行時(shí)間方面,本文方法的運(yùn)行時(shí)間平均比openMVG的運(yùn)行時(shí)間快2.14倍,比colmap的運(yùn)行時(shí)間快了2.41倍。
根據(jù)表2中的數(shù)據(jù)繪制了時(shí)間對比圖,如圖6所示。隨著圖像數(shù)量的不斷增加,本文方法的運(yùn)行速度明顯快于openMVG和colmap方法,并且時(shí)間上升趨勢緩于openMVG和colmap方法。與openMVG、colmap方法相比,本文方法有更高的圖像處理性能。
圖6 算法時(shí)間對比
從實(shí)驗(yàn)結(jié)果中可以看出,針對無人機(jī)影像的圖像處理,本文采用OpenMP并行處理機(jī)制,將圖像處理任務(wù)分配到各個不同的核進(jìn)行并行計(jì)算,充分利用了處理器硬件方面的性能資源,發(fā)揮了多核CPU的架構(gòu)優(yōu)勢。圖像預(yù)處理算法主要消耗CPU計(jì)算資源,并且圖像處理過程是單一重復(fù)的,基于CPU的并行處理策略,能夠大幅提升圖像處理速度。本文研究在圖像的尺度優(yōu)化與提取GPS信息兩個階段,利用了OpenMP多線程處理機(jī)制,提升了圖像的處理速度,為三維重建的后續(xù)環(huán)節(jié)節(jié)省了時(shí)間。
在無人機(jī)影像的特征提取方面,將本文方法與openMVG、colmap開源算法進(jìn)行了性能對比。如表3所示,對不同數(shù)量的航拍圖像,在確保特征質(zhì)量的前提下,分別從圖像的特征點(diǎn)數(shù)量與提取時(shí)間這兩個維度,比較3種算法的性能指標(biāo)。
表3 無人機(jī)影像特征提取性能比較
結(jié)果表明,在特征點(diǎn)提取數(shù)量方面,本文方法大約是openMVG的4倍,是colmap的3倍,并且其特征描述子均符合閾值要求;在特征提取消耗時(shí)間方面,本文方法大約比openMVG快11倍,比colmap快13倍。
表3給出了特征點(diǎn)數(shù)量與處理時(shí)間的對比,其結(jié)果如圖7所示。從中可以看出,隨著圖像數(shù)量的增加,本文方法提取的特征點(diǎn)數(shù)量明顯優(yōu)于openMVG和colmap方法,但所用時(shí)間更少。
圖7 特征點(diǎn)數(shù)量與時(shí)間對比
本文方法采用了SIFTGPU算法進(jìn)行特征提取,通過GPU的并行加速,在提高特征點(diǎn)提取速度的同時(shí),特征點(diǎn)數(shù)量也得到了很大的提升,從而為三維重建后續(xù)環(huán)節(jié)奠定了堅(jiān)實(shí)的基礎(chǔ)。
本文改進(jìn)的SIFTGPU算法,在圖像特征提取過程中,采用CPU+GPU的混合架構(gòu)方式。如表4所示,這里對SIFTGPU算法的重要步驟,通過不同數(shù)量的航拍圖像,在處理性能上進(jìn)行實(shí)驗(yàn)分析。并繪制時(shí)間對比圖,如圖8所示。
表4 SIFTGPU算法各個任務(wù)階段在GPU與CPU中的處理性能
圖8 SIFTGPU算法各任務(wù)階段運(yùn)行時(shí)間對比
圖8(a)中,計(jì)算特征點(diǎn)方向、計(jì)算特征點(diǎn)描述子等計(jì)算量大的步驟在GPU中運(yùn)行。圖8(b)中,圖像顏色空間轉(zhuǎn)換、描述子特征向量歸一化等計(jì)算量小的步驟在CPU中運(yùn)行。結(jié)果表明,運(yùn)算量大的步驟通過GPU加速,提升運(yùn)算效率;而運(yùn)算量小的步驟在CPU中的運(yùn)行,其消耗的時(shí)間不多,并節(jié)省了GPU的計(jì)算資源。采用這種GPU與CPU相結(jié)合的方式,充分發(fā)揮了系統(tǒng)性能,大幅縮短了特征提取時(shí)間。
圖9對這3種方法的特征提取效果進(jìn)行了比較,圖9(a) 是openMVG方法對航拍圖像進(jìn)行特征提取的效果圖;圖9(b)是colmap方法對航拍圖像進(jìn)行特征提取的效果圖;圖9(c)是本文方法對航拍圖像進(jìn)行特征提取的效果圖。通過這些圖像的對比,可以明顯看出本文方法提取的特征更加稠密,提取效果明顯優(yōu)于openMVG和colmap方法。
圖9 特征點(diǎn)提取效果
為了驗(yàn)證本文方法提取特征點(diǎn)的準(zhǔn)確性,將航拍圖像進(jìn)行變換,再對變換后的圖像進(jìn)行特征匹配。由于SIFT特征對旋轉(zhuǎn)、尺度縮放具有不變性,這里對航拍圖像進(jìn)行了縮小、上下翻轉(zhuǎn)。如圖10所示,將尺度變換后的圖像與原始圖像進(jìn)行特征匹配,相同的特征點(diǎn)采用直線連接。從結(jié)果中可以看出,無論是圖像縮小,還是圖像翻轉(zhuǎn),特征匹配的連接線依然能夠準(zhǔn)確連接圖像中的特征點(diǎn),并且十分稠密,表明本文方法提取的特征點(diǎn)具有準(zhǔn)確性。
圖10 特征匹配效果
本文采用全局式SFM,構(gòu)建場景的三維點(diǎn)云。通過相鄰圖像對之間的特征匹配,計(jì)算出所有圖像對之間相機(jī)的旋轉(zhuǎn)與平移,再進(jìn)行三角測量,計(jì)算場景的初始結(jié)構(gòu)。最后,通過光束法平差優(yōu)化相機(jī)位姿和空間物體三維坐標(biāo),并剔除異常值,最終得到整個場景的稀疏點(diǎn)云。在全局式SFM重建過程中,先計(jì)算所有圖像對之間的相對旋轉(zhuǎn),再計(jì)算了全局旋轉(zhuǎn)。在整個三維重建的最后,通過光束法平差,來優(yōu)化相機(jī)位姿和場景點(diǎn)的3D坐標(biāo)。
如圖11所示,基于完整流程,分別對5張、10張以及20張航拍圖像進(jìn)行三維重建,將本文方法與openMVG、colmap算法的稀疏點(diǎn)云重建效果進(jìn)行對比。圖11(a)、圖11(d)、圖11(g)是openMVG的三維重建結(jié)果,圖11(b)、圖11(e)、圖11(h)是colmap的三維重建結(jié)果,圖11(c)、圖11(f)、圖11(i)是本文方法的三維重建結(jié)果。從圖中可以明顯看出,本文方法重建的稀疏點(diǎn)云更密集,結(jié)構(gòu)更清楚,甚至可以清晰地看到場景輪廓。
圖11 三維場景稀疏點(diǎn)云
通過以上實(shí)驗(yàn)的對比分析,采用SIFTGPU算法對無人機(jī)影像進(jìn)行特征提取,能夠提取更多的特征點(diǎn),同時(shí)利用GPU進(jìn)行加速,極大地提高了算法效率。依據(jù)本文方法提取的特征點(diǎn)進(jìn)行完整點(diǎn)云三維重建,構(gòu)建的三維場景更加稠密,取得了良好的重建效果。
實(shí)驗(yàn)結(jié)果表明,本文提出的無人機(jī)影像并行圖像處理與特征提取算法大大提高了計(jì)算速度,三維重建結(jié)果明顯優(yōu)于傳統(tǒng)方法。通過引入OpenMP多線程處理機(jī)制與SIFTGPU特征提取算法,不僅提高了三維重建的速度,解決時(shí)效性差的問題,而且提升了三維重建的算法性能,使得室外大場景的三維重建效果得到了顯著的增強(qiáng)。該算法已經(jīng)在實(shí)際任務(wù)中得到了應(yīng)用,還可推廣應(yīng)用于搶險(xiǎn)救災(zāi)、應(yīng)急測繪和安全管控等領(lǐng)域的快速三維重建場景,提升數(shù)據(jù)獲取的效率。在未來,我們將進(jìn)一步改進(jìn)算法架構(gòu),降低對計(jì)算單元的要求,設(shè)計(jì)輕量化的三維重建算法,將其推廣至其它相關(guān)領(lǐng)域。此外,在多架無人機(jī)上進(jìn)行在線協(xié)同三維重建也是未來的研究方向。