周曉雨,林 嫻,李志揚
(華中師范大學(xué) 物理科學(xué)與技術(shù)學(xué)院,湖北 武漢 430079)
近年來,隨著智能手機、頭盔立體顯示等技術(shù)的發(fā)展和普及,虛擬現(xiàn)實技術(shù)取得了飛速發(fā)展。在VR 技術(shù)中場景建模是最關(guān)鍵的一步。3D 游戲通常采用專業(yè)三維建模軟件,如Autodesk Maya、Autodesk 3ds Max 等進行建模,此方法耗時耗力,所建模型為虛擬場景。對真實場景一般需要借助專業(yè)三維掃描設(shè)備,此方法測量精度高,但設(shè)備價格昂貴,不利于大范圍推廣。為此本文將多視圖三維重建技術(shù)應(yīng)用于VR,實現(xiàn)真實場景的建模。該方法直接從多個視角的2D 圖像提取場景的三維信息,數(shù)據(jù)采集簡單快捷,成本低廉,但由于遮擋、光照變化、特征弱等各種因素,建模過程會出現(xiàn)噪聲、空洞等各種瑕疵。
目前基于多視角圖像的三維重建算法主要有三類[1-4]:①基于體像素的三維重建算法;②基于深度圖的三維重建算法;③基于特征點生長的三維重建算法。本文采用基于特征點生長的三維重建技術(shù),通過對現(xiàn)實場景進項圖像采集,然后對多幅圖像進行特征點檢測、匹配,生成稀疏種子點云,并在此基礎(chǔ)上增加生長點有條件的初值矯正優(yōu)化等措施,提高重建的精確性,降低噪聲、空洞等引起的重建錯誤。
如圖1 所示,本文提出的基于多視圖的三維重建方法主要包括5 個步驟:①對需要建模的真實場景進行圖像采集,獲取多幅不同角度的照片,在采集圖像時圍繞景物轉(zhuǎn)動,每轉(zhuǎn)動一定角度拍攝一張照片,確保場景被完整的記錄下來;②采用尺度不變特征變換算法(SIFT)[5]和最鄰近方法[6]對圖像進行特征點的提取和匹配;③通過SFM[7]和改進后的PVMS[8]生成稀疏點云;④生長稠密點云;⑤生成3D 網(wǎng)格重建模型。每個步驟的更詳細的解釋如下。
各個角度的二維圖像是重建稀疏種子點的基礎(chǔ)。本文采用尺度不變特征變換算法(SIFT)和最近鄰方法進行特征點的提取與匹配。
檢測sift 特征點時,需在多尺度空間中尋找極值點來檢測穩(wěn)定的點特征,然后使用高斯差分算子建立起的差分(DOG)[9]空間進行檢測。在特征點的提取中,先利用相差K 倍的高斯核對原圖像卷積,再利用高斯金字塔上下相鄰的兩層圖像之間的差值得到高斯差分圖像(DOG 圖像),確定關(guān)鍵點尺度和方向參數(shù),并生成描述符算子。待sift 特征描述符提取后,對特征點進行匹配。取出一張圖像的一個特征點,根據(jù)需求設(shè)定閾值,計算出此點與另一圖像所有特征關(guān)鍵點的歐式距離,選出歐式距離最近的兩個特征關(guān)鍵點,計算出最鄰近與次鄰近距離,如果最鄰近距離除以次鄰近距離的值小于閾值,則認為這兩點為一對匹配點。
圖1 三維重建的流程圖
通過足夠數(shù)量的匹配特征點可以求取相機的投影矩陣,并確定每個特征點的三維空間坐標(biāo),得到稀疏點云。首先按圖像分辨率從低到高的順序搜索,剔除分辨率較低的圖片;再從中選取兩幅具有比較多匹配特征點且視角不同的圖像,通過三角測量方法求解這些匹配特征點的對應(yīng)空間位置坐標(biāo)和相機參數(shù);然后逐步增加新的圖像進行計算,并利用Bundle Adjust 算法[10]調(diào)整優(yōu)化所有相機的參數(shù)和空間位置坐標(biāo)。重復(fù)上述操作,直至完成所有圖像的計算。
從每個稀疏種子點出發(fā),可以通過生長求出其近鄰點,再以已經(jīng)生長出的點為種子點,反復(fù)多輪生長可以得到稠密點。目前基于特征點生長的稠密點云算法中的PVMS 算法已經(jīng)成為三維重建方面的流行算法之一,但這種方法完全從種子點出發(fā)確定生長的初始值,容易陷入局部極值,導(dǎo)致重建出來的模型有很多毛刺漏洞,影響重建的完整度和真實性,因此我們對其進行改進,增加了初值矯正這一環(huán)節(jié),使得生長點初始值更加準(zhǔn)確,避免陷入局部極值,從而提高重建質(zhì)量。其核心思想是在首輪重建時,從種子點估計初始值,而當(dāng)經(jīng)過多輪重建,生長點達到一定稠密度后,通過已生長點進行初始值矯正。具體步驟如下。
2.3.1 生長點的初始值
將已生長的點視作種子點,由于待生長點與該點鄰近且方向相差不大,所以采用該點的方向作為生長點的初始方向。根據(jù)三角測量原理,要想確定一個點的空間位置至少需要兩幅圖片。因此進行生長前要從多幅圖像中選取最合適的幾張圖片。首先優(yōu)先選擇正對生長點的清晰圖片作為參考圖片,然后選取與已選參考圖片分辨率相差不大,但拍攝角度不同,不與已選圖片的相機處在同一平面拍攝,且兩張圖片的視線夾角適中的圖片。
選定圖片后,不斷迭代優(yōu)化生長點的空間位置和方向,直至兩幅圖片中對應(yīng)窗口內(nèi)的灰度分布成比例關(guān)系,認為得到該生長點最終的空間位置和方向。具體比例關(guān)系為:
式(1)中:IR和IK分別為先選的參考圖的灰度值和后選的輔助圖片的灰度值;(s,t)為生長點投影到參考圖中的像素坐標(biāo);(s+i,t+j),(s+i,t+j)K分別為參考圖片和輔助圖中對應(yīng)窗口的第(i,j)格點的像素坐標(biāo);CK為常數(shù)。
我們在實驗中發(fā)現(xiàn)窗口內(nèi)圖像的紋理清晰度和圖像視角等因素都會對上述的優(yōu)化結(jié)果產(chǎn)生一定的影響,所以在實驗過程中要根據(jù)情況調(diào)整窗口的大小,來保證其中有足夠的紋理,使優(yōu)化盡量成功。在調(diào)整窗口大小時一般參考下式:
式(2)中:σv為主要圖片窗口內(nèi)的灰度方差;thv為固定閾值。
2.3.2 初值矯正
如果生長點的初始空間位置遠離物體模型表面,且其方向與真實方向相差程度很大,得到優(yōu)化后的結(jié)果準(zhǔn)確度不高,從而導(dǎo)致重建點精度不高。為了提供更好的初始值,使優(yōu)化結(jié)果更加精確,在多輪重建以后,對于滿足以下兩個條件的生長點進行二重曲面擬合,用得到的二重曲面替換物體模型表面,同時利用生長點在曲面上的投影矯正其初始值,然后利用矯正后的初始值優(yōu)化該點,并有條件的保留生長點的結(jié)果。
其中第一個條件是待矯正點附近的點的分布不能太稀疏。因為這些點分布太稀疏的話,得到的曲面不能很好體現(xiàn)物體表面局部的起伏變化情況,造成誤差。因此要選出待矯正點周圍,距它最近的N 個點,并算出它們與待矯正點之間的平均距離。如果結(jié)果滿足則表明該區(qū)域的點滿足條件,可以對該點進行二重曲面擬合。反之,放棄對該點進行初值矯正。
第二個條件是待矯正點要在其周圍附近的點籠蓋的中心區(qū)域附近。我們在實驗中發(fā)現(xiàn)離中心區(qū)域較遠的待矯正點擬合到的二重曲面,矯正后的初始值精確度不高。因此,對于滿足以上兩個條件的待矯正點,即可采用進行二重曲面擬合,其中c1到c6為常數(shù),擬合后可以確定其取值。如果優(yōu)化后的生長點與擬合曲面相距不遠,且與其對應(yīng)的擬合曲面的方向相差不大,則用此次結(jié)果替換之前的結(jié)果,反之保留之前的結(jié)果。最后,過濾重建誤差較大的點,得到密集點云。
本文采用泊松表面重建算法[10]將稠密點云模型轉(zhuǎn)換為表面網(wǎng)格模型。該算法假定稠密點云的每一個點在模型表面均勻分布,然后根據(jù)樣本點得到指示函數(shù),并求出指示函數(shù)的梯度與表面曲面法線場的積分之間的關(guān)系。提取等值面,將模型表面重建為一個無縫的三角逼近,最終得到一個完全閉合的表面。
作為示例,本文對學(xué)校博雅廣場的一處石頭場景進行了多視圖三維重建,以生成VR 所需要的三維模型。首先用相機圍繞該石頭場景拍攝一組照片,如圖2 所示,其中包括不同光線條件下的照片。其次篩選出可用的照片后提取特征點,通過SFM 算法生成稀疏點云,并獲取相機的空間位置和參數(shù)信息,如圖3 所示。通過初始值矯正、優(yōu)化生長和濾波等環(huán)節(jié),獲得稠密點云,最后通過泊松表面重建算法將點連成面,獲得最終三維重建場景,如圖4 所示。從圖4 可以看出,改進后的多視角三維重建算法具有較好的重建效果,還原度高,因此可以用于VR 真實場景建模。
圖2 石頭場景的不同角度的代表性照片
本文提出了一種改進的基于特征點生長的多視角三維重建方法,通過在傳統(tǒng)算法中加入有條件的初值矯正環(huán)節(jié),避免了生長過程終止于局部極值點,提高了重建精度。由于該算法所重建的三維模型具有較好的完整性和真實性,因此可以用于VR 中真實場景的建模。
圖3 SFM 獲取的稀疏點云及相機空間位置
圖4 石頭場景的三維重建結(jié)果