郭子興 ,張曉林 ,高 巖
(1.中國科學院上海微系統與信息技術研究所,上海200050;2.中國科學院大學北京100049;3.上海科技大學信息學院,上海201210)
增強現實利用圖像傳感器和計算設備感知真實環境,并在真實環境中添加虛擬內容,增強用戶對現實世界的理解和體驗。它主要包括3個特征:虛擬和真實內容融合、實時交互和三維注冊。受益于計算能力的提高和計算機視覺、圖形學、光學等學科的快速發展,增強現實在工業[1]、教育[2]、軍事[3]、醫療[4]等領域取得了重要的進展。
按照所依靠的硬件平臺分類,增強現實系統大體分為光學透視式顯示系統[5]和視頻透視式顯示系統。光學透視式顯示系統利用半反射鏡結構,真實世界通過鏡片透射被用戶感知,虛擬世界渲染結果被投影到鏡片上,通過反射被用戶感知。代表產品有微軟的HoloLens,這種結構的關鍵缺點在于虛擬視場角過小,只有三十多度。視頻透視式顯示系統利用攝像機捕捉真實世界,然后將渲染得到的虛擬世界圖片與之混合,得到增強現實結果。目前主流的系統是基于手機等移動平臺的增強現實系統,該系統的缺點在于單目結構無法提供真實的尺度信息,并且無法使用戶體驗立體內容。
面向不同的應用場景,增強現實系統可以分為基于特殊標記的系統和基于自然特征的系統。基于特殊標記的系統利用人工設計的圖形標記或圖像模板,計算相機的運動軌跡,然后疊加相應的虛擬內容。例如高通Vuforia引擎,該類系統的主要問題在于人工標記必須在相機視野內,極大的限制了相機的運動范圍,應用場景小。基于自然特征的系統通過追蹤圖像中的特征,計算相機的運動軌跡。該系統應用場景廣,可在較大空間實現增強現實效果。該系統的缺點在于初始化復雜,沒有真實的尺度信息。
針對上述問題,文中設計了一種基于雙目相機的增強現實系統。該系統利用雙目相機采集真實世界圖像并通過圖像處理算法感知真實世界的平面、深度等信息,利用雙目視覺里程計追蹤相機運動,疊加虛擬雙目相機渲染得到的虛擬圖像,最后將合成的左右圖分別傳入頭戴式3D眼鏡的左右屏幕,得到一個視場角大、運動范圍廣、具有立體信息的增強現實系統。
系統框架如圖1所示。硬件上采用ZED雙目相機采集真實世界,其參數如表1所示。為了保證虛擬和真實世界的幾何一致性,虛擬雙目相機的參數與真實相機的參數設為相等。算法上采用自主設計的基于特征點的平面檢測算法,自動檢測自然平面,完成系統的初始化;采用基于雙目視覺的立體匹配算法[6],獲取真實場景的深度信息,實現真實和虛擬世界相互遮擋的功能;采用基于特征點的定位算法[7],追蹤真實相機的運動,實現真實和虛擬世界的配準。渲染時,利用泊松分布[8]進行天空盒光源采樣,利用馮氏光照模型計算像素值,利用OpenGL加速。

圖1 系統整體架構圖

表1 雙目相機參數表
三維注冊是將虛擬世界中的物體轉換到真實世界空間中,形成統一的混合空間的過程,如圖2所示。

圖2 虛擬物體注冊示意圖
設在真實世界坐標系OXYZ中一個三維點P齊次坐標為(x,y,z,1)T,其對應的真實相機圖像坐標系中的齊次像素坐標為p=(u,v,1)T,則有:

其中:

s為比例系數;K為相機內參矩陣,由相機標定得到;R為真實世界坐標系相對于真實相機坐標系的旋轉,t為兩個坐標系之間的平移。
相應的,設三維點P在虛擬世界坐標系齊次坐標為(xv,yv,zv,1)T,其對應的虛擬相機坐標系中的齊次像素坐標為pv=(uv,vv,1)T,則有:

Rv為虛擬世界坐標系相對于虛擬相機坐標系的旋轉,tv為兩個坐標系之間的平移。
設虛擬世界坐標系和真實世界坐標系重合,虛擬相機和真實相機重合。則有:

在圖形渲染管線中渲染虛擬物體時,物體上所有頂點需要經歷局部空間、虛擬世界空間、虛擬相機空間、裁切空間、屏幕空間的轉化。其過程由公式(5)描述[9]:

其中Model矩陣表示自定義的虛擬物體在虛擬世界中的位置姿態。view矩陣表示從虛擬世界空間到虛擬相機空間的轉換,結合公式(3)可得

projection矩陣表示從虛擬相機空間到裁切空間的轉換,和內參矩陣K具有相同的物理意義,但具有不同的表達形式。其關系由公式(7)描述[10]:

其中w和h分別表示圖像的寬和高,n和f分別表示近平面和遠平面。
為了保證虛擬世界和真實世界的幾何一致性,需要實時追蹤相機在真實世界中的位姿。基于自然特征的追蹤算法無需知道場景的先驗信息,僅依靠提取和匹配雙目圖像序列中的特征,利用相鄰圖像之間的對極幾何約束,即可計算相機的位置和姿態信息。
為了保證在自然場景下特征匹配的準確性,特征點需要具有光照不變性、尺度不變性、旋轉不變性等,同時也要兼顧實時性。SIFT、SURF、ORB[11]等特征被廣泛應用于圖像處理中。對24幅分辨率為640×480的圖像提取同樣數量的特征點,其算法耗時如表2[11]。

表2 特征提取時間對比
ORB特征提取速度遠遠超過其他兩種特征,并且具有相近的準確度,因而本文選取ORB特征進行追蹤。
獲取雙目圖像序列的ORB特征點之后,計算其特征描述子,通過比較特征描述子的漢明距離,確定特征點之間的對應關系。特征匹配包括前后幀匹配和左右幀匹配。前后幀匹配時,需要在全圖范圍內找出所有匹配之間的最小距離和最大距離。當描述子之間的距離大于兩倍的最小距離時,即認為匹配有誤,但有時候最小距離非常小,設置一個經驗值作為下限[12]。左右幀立體匹配與上述過程相似,但對應的特征匹配點基本處于同一行,因而只在另一幅圖同一行和相鄰若干行搜索。
如圖3所示,設兩個連續幀分別為Fk-1和Fk,在兩幀中檢測到的關鍵點分別為P={p1,p2,...,pn}和,由3.1中的匹配方法,得到三維點之間的匹配關系。運動估計問題可轉換為求解變換R,T使得:


圖3 幀間運動估計示意圖
由于噪聲干擾,等式不可能嚴格成立,定義每對匹配點的誤差項:

然后公式(8)可轉化為最小二乘問題:

假設兩組點的質心為:

則每組點的去質心坐標為:

優化函數可以轉化為:

等價于:


即可得到從FK-1到Fk幀的位姿R,T,從第一幀開始不斷的兩兩計算位姿變換,得到每一幀相對于世界坐標系的位姿。
只依靠相鄰兩幀得到的位姿誤差較大,本文利用數量可調的多幀圖像,計算路標點,形成多幀之間的約束,計算當前位姿,提高運動估計的準確性。

圖4 局部優化示意圖
如圖4所示,設從連續L+1幀圖像中提取的特征點三角化后為路標點集合{Pi,i=1,2,...n},把路標點Pi在第k幀的觀測,即像素坐標,記為zk,i。則觀測誤差方程為:

h為觀測方程,ξk為從第k-1幀到第k幀的相機位姿R,T的李代數表示,ek,i為路標點Pi在第k幀時的觀測誤差。整體的代價函數為:

利用高斯-牛頓法求解上式,即可得到更準確的相機位姿。
本文算法實驗環境為windows10系統,CPU為i7-6700,GPU為GTX 1080。上述視覺定位算法運算速度為29.4 fps,滿足實時性要求,運行結果如圖5(a)(b)(c)所示。圖5為算法運行過程中截取的相機3個不同位置的混合圖像。可以看到虛擬物體與真實世界保持幾何一致性,說明相機定位精度滿足要求。此外,以圖5(a)為例,圖像左半部圖像為真實相機左目和虛擬相機左目圖像混合而成,將其輸入3D顯示頭盔左目,同理右半部圖像也做相似處理,即可產生立體視覺效果。

圖5 運動追蹤結果示意圖
為了產生更符合用戶直觀感受的虛擬內容,增強現實系統需要檢測真實世界中平面的位置,使虛擬物體與真實平面接觸區域自然平滑。系統初始化時,在真實世界平面上建立世界坐標系,需要計算真實相機和平面之間的位置關系。增強現實中的平面檢測可以分為兩類。基于點云數據的平面擬合方法[13],利用隨機采樣一致性模型(RANSAC),求具有最多內點的平面。然而由于立體匹配得到的點云數據不可靠,使得求解結果不夠準確,并且由于點云數據量大,平面求解耗時長,無法滿足實時性。基于特征點的平面檢測方法[14],利用前后幀匹配得到的特征點計算平面。但是此方法對初始化操作有一定要求,例如純旋轉會造成初始化失敗。
針對上述問題,本文設計了一種利用特征點立體匹配和RANSAC的平面檢測方法。首先利用3.1中的方法,匹配同一時刻左右幀的特征點,繼而利用平行式雙目相機三角化[15]的方法計算特征點的三維坐標,如圖6所示。設物理坐標點P(XC,YC,ZC)在左右相機成像點的橫坐標分別為ul和ur,視差d=ul-ur,則:

f為相機焦距,T為基線長度。根據投影模型可得:


圖6 特征點三角化示意圖
計算得到所有特征點的三維坐標值。
采用RANSAC求解稀疏特征點集合中的平面主要步驟如下:
1)隨機采樣任意3點,計算平面參數。
2)計算所有特征點與該平面的垂直距離,若小于給定閾值,則判定為內點。
3)若內點數大于一定的比例,則終止采樣,否則繼續采樣。
4)重復上述步驟k次,取內點數最大的集合。
5)利用最終得到的內點集合,重新計算平面參數。
設計算所得的平面法向量為n→(nx,ny,nz),截距為d,內點集合為{Si,i=1,2,...n}。計算內點集合的中心位置作為世界坐標系原點O(Ox,Oy,Oz),計算公式為:

將平面法向量n→設為世界坐標系的z軸,記為。計算內點集合中距離平面最近的點P,則令。則世界坐標系和真實相機之間的變換為:

利用Tcw即可將虛擬物體注冊到真實世界中的平面上。
以虛實雙目相機的左目為例,結果示意圖如圖7所示,算法對比如表3所示。算法先檢測平面參數,然后利用得到的平面參數渲染虛擬平面并自動注冊虛擬物體,如圖7深色平面所示,該結果表明,兩種方法計算得到的平面參數都比較準確。表3表明兩種方法得到的平面參數相近,但基于特征點的平面檢測算法速度超過了基于點云的平面檢測算法。

圖7 平面檢測效果圖

表3 平面檢測算法對比
在混合空間中,理想狀態虛擬物體和實際物體應當遵循正確的前后遮擋關系。然而在當前增強現實系統中,一般是直接把虛擬圖像疊加到真實圖像上。當虛擬物體應當被真實物體遮擋時,上述處理方法會造成視覺感知錯亂。文獻[16]采用三維重建方法,通過預先對場景進行幾何建模解決遮擋問題。然而該方法操作復雜并且只適用于靜態場景。本文選取半全局匹配(Semi-global Matching,SGM)方法[6],通過實時計算真實場景的深度圖,處理動態場景虛實遮擋問題。
SGM方法是介于局部和全局算法之間的立體匹配算法,給定校正后的左右圖,基于互信息計算得到每個像素的匹配代價,然后借助動態規劃進行代價聚合。算法設計的全局能量函數,綜合了鄰域點的匹配代價和平滑性約束。同時為了抑制單獨某個方向的拖尾問題,算法將多個方向的能量函數求平均。最后對得到的視差圖進行左右一致性檢驗和后處理,得到最終的視差圖。該算法可以通過并行計算進一步提升速度,滿足實時性需求。
利用公式(18),可以將SGM算法得到的視差圖轉化為真實世界深度圖。然后把深度圖作為紋理,傳入圖形渲染管線片段著色器。渲染管線中的深度緩沖區的值是非線性的,設為D,則利用公式(22)將其線性化:

其中f為遠平面,n為近平面,z為線性深度值。比較z和真實世界深度值,只保留z小于真實世界深度值的片段,最終實現虛擬和現實物體的正確遮擋。
以虛實雙目相機的左目為例,結果如圖8所示,圖8(a)為利用SGM算法得到的真實世界相對于真實相機左目的深度圖,速度為109 fps。圖8(b)為利用公式(22)得到的虛擬世界相對于虛擬相機左目的深度圖,圖8(c)為處理遮擋關系后的結果,效果良好。圖8(d)為不進行遮擋處理得到的結果,不進行遮擋處理會造成用戶視覺感知混亂,影響體驗。

圖8 虛實遮擋示意圖
文中設計的雙目增強現實系統完成了虛擬物體三維注冊、平面檢測和虛實遮擋功能。相比于當前主流的增強現實系統,本系統功能更加完善。基于雙目的平面檢測方法,使系統初始化快速而可靠。基于立體匹配的虛實遮擋處理方法,使系統可以應對動態場景。特別的,基于自然特征的視覺定位方法,使系統可以在較大面積下有效。本文對增強現實系統的設計具有一定的參考意義。