王 子,吳振宇
(1.安徽理工大學空間信息與測繪工程學院,安徽 淮南 232001;2.江蘇海洋大學海洋技術與測繪學院,江蘇 連云港 222000)
伴隨著三維重建研究領域的不斷發展,傳統的主動式基于激光雷達獲取點云數據三維重建已經逐漸發展成為基于計算機視覺的被動視覺三維重建方案。在城市的大規模場景三維重建方面,基于被動式視覺三維重建具有成本小、還原度高、建模完整、場景真實度高等優勢,目前已發展為大規模場景三維重建的最優方案之一[1]。
獲取空間物體的三維空間結構和圖像的三維信息方式主要包括主動式與被動式兩種。對環境中真實景物進行還原的主動式三維重建技術已相當成熟且被廣泛應用,但存在需要掃描儀等高成本的重建設備、受外界環境影響大、對重建目標物體要求高以及后續實驗結果分析不是特別簡便等劣勢。而基于被動式的三維重建技術是對無人機航拍影像進行重構,通過間接的方式與其涉及的相關算法獲取圖像的三維點云信息,最后經過表面重建還原其真實場景[2]。
目前,已經有Pix4D,Altizure,smart3D等無人機建模商業軟件推出,上述軟件在無人機影像建模中均取得了不錯的效果。被動式的重建方法具有成本低、對于重建目標的要求不高、靈活性高、操作簡單等特點,由此推動了視覺三維重建方案在無人機航拍影像三維建模的研究與應用[3]。
運動恢復結構 (Structure From Motion,SFM)算法是被動式視覺三維重建的核心算法之一,其可從無序圖片中重建場景的三維結構稀疏點云,同時恢復相機的位姿,是多視圖視覺三維重建的重要一步。曹海春[4]采用Context Capture軟件結合人工干預的方法對消費型傾斜無人機拍攝的城鎮局部區域圖像進行三維重建,最后對生成的三維模型精度評定,結果表明,此方法能夠滿足精度要求,且建模效率提高。段建偉[5]采用增量式單目SFM算法,構造函數圖像優化模型,對相機位姿和圖像三維點云進行重建優化,實驗表明,三維重建結果得到了極大改善,具有良好的視覺結果。何海清等[6]提出一種基于SFM算法結合耦合單-多旋轉平均迭代對低空影像三維建模結果進行優化的方法。王楠[7]針對建筑物的建模問題,采用SFM算法具體研究了三維重建方法,提出了一種隨機抽樣一致性(RANSAC)改進算法,最終獲得了精度更高的三維重建結果。張平等[8]基于SFM算法配合CMVS,PMVS算法對建筑物三維點云重構進行了研究,實驗結果表明此方法能夠有效地提取點云信息。陳輝等[9]采用基于機光掃描和SFM算法相結合的非同步點云三維重構方法對建筑物的三維點云信息進行融合,實現了復雜場景的重建。
本文針對無人機航拍影像三維建模問題,基于無人機正射航拍影像進行完整流程的三維重建實驗,探討SFM算法在三維建模中的應用,其基本技術路線見第105頁圖1。

圖1 基于SFM算法對無人機影像數據重建流程
基于SFM算法的三維重建的第一步是影像特征的提取與匹配,其主要目的是提取和匹配不同視角下多視圖像間對應的相同特征信息點,主要過程包括提取圖像特征子、生成描述子、匹配特征點、去除外點、消除誤匹配等。目前,在圖像特征點的匹配上已經有很多成熟算法,如SIFT,SUFR,FREAK,FAST和ORB等。但因考慮到三維重建在穩健性、模型完整性、高效性、重建模型質量及其在精度上存在的問題,重建過程中一般采用尺度不變特征轉換 (Scale-Invariant Feature Transform,SIFT)算法來進行特征提取,此算法在1999年由David G Lowe[10]在期刊上發表。SIFT算法實現特征點匹配的主要流程有以下步驟。
1)DOG尺度空間的極值檢測:首先確定圖像的尺度空間,即采用高斯核原始圖像濾波后生成卷積運算后的尺度空間圖像。用公式表示為

式中:L(x,y,σ)為尺度空間函數;σ為尺度因子;G(x,y,σ)為高斯核函數;*為卷積運算符;I(x,y)為輸入圖像。高斯核函數的表達式為

在空間尺度建立后,對該空間內的極值點進行檢測,將檢測到的極值點作為待確定的關鍵點。
2)定位關鍵點并確定特征方向:在候選的極值點中,需放棄掉低對比度不穩定點以及邊緣響應點來得到位置與空間尺度更精確的關鍵點。在確定關鍵點之后,統計其鄰域內的關鍵點梯度信息,最后獲取特征點的主方向。
3)生成特征點描述子并進行特征點匹配:即以特征點為中心,在其鄰域內建立一個128維度的特征向量。首先建立一個4×4大小的區域窗口,每個子區域都包含4×4個像素點且每個子區域的像素點都有8個梯度方向,統計這8個方向的梯度信息,最終獲得4×4×8=128維的特征向量。采用歐式距離法對各關鍵點的特征向量進行匹配,最終建立與目標建筑物間的對應關系[11]。
SFM算法是一種基于各種收集到的無序圖片進行三維重建的離線算法,在完成圖像的特征點提取與匹配工作之后,就可以對目標物體進行稀疏點云重建。SFM算法的原理見圖2。

圖2 SFM原理圖

圖2為同一個世界坐標系下的某一空間點在多個相機不同坐標系下所成的圖像,空間點X與投影點X1,X2,X3滿足的關系式為式中:F為基礎矩陣,然后利用基礎矩陣F與本征矩陣E分解計算圖像的位姿[R T],從而計算出空間點的三維坐標,獲得建筑物的稀疏點云。但是在進行稀疏三維重建過程中,由于陸續不斷添加新的圖像,計算所產生的誤差會逐漸積累,此時需要采用光束平差(Bundle Adjustment,BA)算法[12],其目的是最小化重投影誤差。根據誤差公式

式中:pi為損失函數;fi為代價函數;xin為需要優化的參數。
BA算法是一個不斷迭代的過程,在進行第一次迭代計算過后,自動將所有的三維點反向投影到圖片中,若計算出的坐標值大于閾值,即需把此點去除掉。反復重復以上步驟,得到所有像片的三維點云數據及其位姿,最后獲得三維重建成果[13]。
基于SFM算法的三維重建點是由特征匹配提供的,這些匹配點天生不密集。重建后所得到的模型存在較多空洞,點云數量過于稀疏且基于此算法只能粗略地描繪規則物體的三維結構,因此需采用基于多視圖密集重建(Multi View Stereo,MVS)算法[14]來對不規則物體以及目標對象的細節特征來進行密集點云重建。MVS算法不同于SFM算法,它對于反應目標建筑物的細節特征和物體的幾何信息更加真實準確,幾乎能夠匹配和重建所拍攝圖片中的每個像素點以及三維坐標信息,且此方法重建出的三維模型點云數量更多、更密集。其對相機拍攝到的多視圖影像間具有相同的三維幾何信息,而在三維幾何結構部分存在一定的極線幾何約束。基于這種約束,尋找兩張圖片上的同一點,再判斷此點是否為同一點,最后形成空洞更小的稠密點云。
泊松重建主要過程有定義八叉樹、設置函數空間、創建向量場、求解泊松方程、提取等值面。它的核心思想是通過將物體表面的離散樣本點信息轉化到連續表面函數上,從而構造出Watertight的隱式表面。如果在空間中區分一個表面,可以直觀地理解為表面外和表面內。它采用隱性擬合的方式對點云模型的表面信息進行等值面提取,從而得到具有更精確的細節特性和良好幾何實體信息的表面模型,最后根據SFM算法生成的點云數據和相機位姿及其圖像的RGB數據進行紋理映射,得到最終的目標模型[15-16]。
本實驗將學校某建筑物及其周圍環境作為重建目標,利用小型旋翼無人機獲取實驗目標的正攝影像圖122張,使用Ubuntu 16.04系統,4GB RAM的電腦,采用openMVG和openMVS開源方案進行三維重建,利用SIFT算法對影像進行特征提取和匹配實驗,共提取特征點106 420個;再選取一張不同視角但和該影像有重疊部分的圖片,進行特征點匹配實驗。
使用openMVG對點云進行稀疏重建,共得到點云數量98 903個,使用Meshlab軟件將點云打開,見圖3。可以看出,該結果僅僅只能夠反應出目標的大致輪廓,目標物體表面不清晰,不能夠具象地體現出建筑物實際情況且模型表面仍存在較多空洞區域,在細節方面還有不少缺失。在實際大規模場景應用方面仍存在較大問題,因此實驗下一步需對稀疏點云稠密化。

圖3 重建目標的稀疏點云
使用openMVS進行密集重建,共得到點云數量6 371 991個,見圖4。由圖4可知,經過對點云范圍約束后的密集重建所獲得的模型表面細節清晰,目標建筑物的真實度還原性更高,重建效果更好。該稠密點云對目標環境的部分細節有了很好的呈現。

圖4 稠密點云圖
使用泊松算法對稠密點云進行表面重建,再基于SFM算法對相機位姿進行紋理映射,最終得到的結果見圖5。

圖5 紋理映射后最終生成的三維模型
通過研究基于SFM算法對無人機航拍影像的目標物體進行三維重建,由以上建模過程可知,本文所采用的重建方法可以對目標建筑物的三維結構快速準確地獲取,且獲得的影像點云信息豐富。通過對影像特征點提取與匹配以及點云的稀疏重建與密集重建,能夠得到目標清晰的外形輪廓,相比傳統三維模型生成方法,基于SFM算法所獲得的三維重建模型在真實場景的還原度、建模完整性、建模成本與效率上有明顯優勢。但是,由最終生成的模型可知,在結構上仍有細節上的缺失,其原因與相機的拍攝角度有關。實驗數據僅僅采用無人機的正射影像,所采集重建目標的圖像數量不足且獲取影像信息不全,從而導致最終模型結構不完整。因此在此方面仍需進一步深入研究。