郭子興 ,張曉林 ,高 巖
(1.中國(guó)科學(xué)院上海微系統(tǒng)與信息技術(shù)研究所,上海200050;2.中國(guó)科學(xué)院大學(xué)北京100049;3.上海科技大學(xué)信息學(xué)院,上海201210)
增強(qiáng)現(xiàn)實(shí)利用圖像傳感器和計(jì)算設(shè)備感知真實(shí)環(huán)境,并在真實(shí)環(huán)境中添加虛擬內(nèi)容,增強(qiáng)用戶對(duì)現(xiàn)實(shí)世界的理解和體驗(yàn)。它主要包括3個(gè)特征:虛擬和真實(shí)內(nèi)容融合、實(shí)時(shí)交互和三維注冊(cè)。受益于計(jì)算能力的提高和計(jì)算機(jī)視覺(jué)、圖形學(xué)、光學(xué)等學(xué)科的快速發(fā)展,增強(qiáng)現(xiàn)實(shí)在工業(yè)[1]、教育[2]、軍事[3]、醫(yī)療[4]等領(lǐng)域取得了重要的進(jìn)展。
按照所依靠的硬件平臺(tái)分類,增強(qiáng)現(xiàn)實(shí)系統(tǒng)大體分為光學(xué)透視式顯示系統(tǒng)[5]和視頻透視式顯示系統(tǒng)。光學(xué)透視式顯示系統(tǒng)利用半反射鏡結(jié)構(gòu),真實(shí)世界通過(guò)鏡片透射被用戶感知,虛擬世界渲染結(jié)果被投影到鏡片上,通過(guò)反射被用戶感知。代表產(chǎn)品有微軟的HoloLens,這種結(jié)構(gòu)的關(guān)鍵缺點(diǎn)在于虛擬視場(chǎng)角過(guò)小,只有三十多度。視頻透視式顯示系統(tǒng)利用攝像機(jī)捕捉真實(shí)世界,然后將渲染得到的虛擬世界圖片與之混合,得到增強(qiáng)現(xiàn)實(shí)結(jié)果。目前主流的系統(tǒng)是基于手機(jī)等移動(dòng)平臺(tái)的增強(qiáng)現(xiàn)實(shí)系統(tǒng),該系統(tǒng)的缺點(diǎn)在于單目結(jié)構(gòu)無(wú)法提供真實(shí)的尺度信息,并且無(wú)法使用戶體驗(yàn)立體內(nèi)容。
面向不同的應(yīng)用場(chǎng)景,增強(qiáng)現(xiàn)實(shí)系統(tǒng)可以分為基于特殊標(biāo)記的系統(tǒng)和基于自然特征的系統(tǒng)。基于特殊標(biāo)記的系統(tǒng)利用人工設(shè)計(jì)的圖形標(biāo)記或圖像模板,計(jì)算相機(jī)的運(yùn)動(dòng)軌跡,然后疊加相應(yīng)的虛擬內(nèi)容。例如高通Vuforia引擎,該類系統(tǒng)的主要問(wèn)題在于人工標(biāo)記必須在相機(jī)視野內(nèi),極大的限制了相機(jī)的運(yùn)動(dòng)范圍,應(yīng)用場(chǎng)景小?;谧匀惶卣鞯南到y(tǒng)通過(guò)追蹤圖像中的特征,計(jì)算相機(jī)的運(yùn)動(dòng)軌跡。該系統(tǒng)應(yīng)用場(chǎng)景廣,可在較大空間實(shí)現(xiàn)增強(qiáng)現(xiàn)實(shí)效果。該系統(tǒng)的缺點(diǎn)在于初始化復(fù)雜,沒(méi)有真實(shí)的尺度信息。
針對(duì)上述問(wèn)題,文中設(shè)計(jì)了一種基于雙目相機(jī)的增強(qiáng)現(xiàn)實(shí)系統(tǒng)。該系統(tǒng)利用雙目相機(jī)采集真實(shí)世界圖像并通過(guò)圖像處理算法感知真實(shí)世界的平面、深度等信息,利用雙目視覺(jué)里程計(jì)追蹤相機(jī)運(yùn)動(dòng),疊加虛擬雙目相機(jī)渲染得到的虛擬圖像,最后將合成的左右圖分別傳入頭戴式3D眼鏡的左右屏幕,得到一個(gè)視場(chǎng)角大、運(yùn)動(dòng)范圍廣、具有立體信息的增強(qiáng)現(xiàn)實(shí)系統(tǒng)。
系統(tǒng)框架如圖1所示。硬件上采用ZED雙目相機(jī)采集真實(shí)世界,其參數(shù)如表1所示。為了保證虛擬和真實(shí)世界的幾何一致性,虛擬雙目相機(jī)的參數(shù)與真實(shí)相機(jī)的參數(shù)設(shè)為相等。算法上采用自主設(shè)計(jì)的基于特征點(diǎn)的平面檢測(cè)算法,自動(dòng)檢測(cè)自然平面,完成系統(tǒng)的初始化;采用基于雙目視覺(jué)的立體匹配算法[6],獲取真實(shí)場(chǎng)景的深度信息,實(shí)現(xiàn)真實(shí)和虛擬世界相互遮擋的功能;采用基于特征點(diǎn)的定位算法[7],追蹤真實(shí)相機(jī)的運(yùn)動(dòng),實(shí)現(xiàn)真實(shí)和虛擬世界的配準(zhǔn)。渲染時(shí),利用泊松分布[8]進(jìn)行天空盒光源采樣,利用馮氏光照模型計(jì)算像素值,利用OpenGL加速。
圖1 系統(tǒng)整體架構(gòu)圖
表1 雙目相機(jī)參數(shù)表
三維注冊(cè)是將虛擬世界中的物體轉(zhuǎn)換到真實(shí)世界空間中,形成統(tǒng)一的混合空間的過(guò)程,如圖2所示。
圖2 虛擬物體注冊(cè)示意圖
設(shè)在真實(shí)世界坐標(biāo)系OXYZ中一個(gè)三維點(diǎn)P齊次坐標(biāo)為(x,y,z,1)T,其對(duì)應(yīng)的真實(shí)相機(jī)圖像坐標(biāo)系中的齊次像素坐標(biāo)為p=(u,v,1)T,則有:
其中:
s為比例系數(shù);K為相機(jī)內(nèi)參矩陣,由相機(jī)標(biāo)定得到;R為真實(shí)世界坐標(biāo)系相對(duì)于真實(shí)相機(jī)坐標(biāo)系的旋轉(zhuǎn),t為兩個(gè)坐標(biāo)系之間的平移。
相應(yīng)的,設(shè)三維點(diǎn)P在虛擬世界坐標(biāo)系齊次坐標(biāo)為(xv,yv,zv,1)T,其對(duì)應(yīng)的虛擬相機(jī)坐標(biāo)系中的齊次像素坐標(biāo)為pv=(uv,vv,1)T,則有:
Rv為虛擬世界坐標(biāo)系相對(duì)于虛擬相機(jī)坐標(biāo)系的旋轉(zhuǎn),tv為兩個(gè)坐標(biāo)系之間的平移。
設(shè)虛擬世界坐標(biāo)系和真實(shí)世界坐標(biāo)系重合,虛擬相機(jī)和真實(shí)相機(jī)重合。則有:
在圖形渲染管線中渲染虛擬物體時(shí),物體上所有頂點(diǎn)需要經(jīng)歷局部空間、虛擬世界空間、虛擬相機(jī)空間、裁切空間、屏幕空間的轉(zhuǎn)化。其過(guò)程由公式(5)描述[9]:
其中Model矩陣表示自定義的虛擬物體在虛擬世界中的位置姿態(tài)。view矩陣表示從虛擬世界空間到虛擬相機(jī)空間的轉(zhuǎn)換,結(jié)合公式(3)可得
projection矩陣表示從虛擬相機(jī)空間到裁切空間的轉(zhuǎn)換,和內(nèi)參矩陣K具有相同的物理意義,但具有不同的表達(dá)形式。其關(guān)系由公式(7)描述[10]:
其中w和h分別表示圖像的寬和高,n和f分別表示近平面和遠(yuǎn)平面。
為了保證虛擬世界和真實(shí)世界的幾何一致性,需要實(shí)時(shí)追蹤相機(jī)在真實(shí)世界中的位姿?;谧匀惶卣鞯淖粉櫵惴o(wú)需知道場(chǎng)景的先驗(yàn)信息,僅依靠提取和匹配雙目圖像序列中的特征,利用相鄰圖像之間的對(duì)極幾何約束,即可計(jì)算相機(jī)的位置和姿態(tài)信息。
為了保證在自然場(chǎng)景下特征匹配的準(zhǔn)確性,特征點(diǎn)需要具有光照不變性、尺度不變性、旋轉(zhuǎn)不變性等,同時(shí)也要兼顧實(shí)時(shí)性。SIFT、SURF、ORB[11]等特征被廣泛應(yīng)用于圖像處理中。對(duì)24幅分辨率為640×480的圖像提取同樣數(shù)量的特征點(diǎn),其算法耗時(shí)如表2[11]。
表2 特征提取時(shí)間對(duì)比
ORB特征提取速度遠(yuǎn)遠(yuǎn)超過(guò)其他兩種特征,并且具有相近的準(zhǔn)確度,因而本文選取ORB特征進(jìn)行追蹤。
獲取雙目圖像序列的ORB特征點(diǎn)之后,計(jì)算其特征描述子,通過(guò)比較特征描述子的漢明距離,確定特征點(diǎn)之間的對(duì)應(yīng)關(guān)系。特征匹配包括前后幀匹配和左右?guī)ヅ洹G昂髱ヅ鋾r(shí),需要在全圖范圍內(nèi)找出所有匹配之間的最小距離和最大距離。當(dāng)描述子之間的距離大于兩倍的最小距離時(shí),即認(rèn)為匹配有誤,但有時(shí)候最小距離非常小,設(shè)置一個(gè)經(jīng)驗(yàn)值作為下限[12]。左右?guī)Ⅲw匹配與上述過(guò)程相似,但對(duì)應(yīng)的特征匹配點(diǎn)基本處于同一行,因而只在另一幅圖同一行和相鄰若干行搜索。
如圖3所示,設(shè)兩個(gè)連續(xù)幀分別為Fk-1和Fk,在兩幀中檢測(cè)到的關(guān)鍵點(diǎn)分別為P={p1,p2,...,pn}和,由3.1中的匹配方法,得到三維點(diǎn)之間的匹配關(guān)系。運(yùn)動(dòng)估計(jì)問(wèn)題可轉(zhuǎn)換為求解變換R,T使得:
圖3 幀間運(yùn)動(dòng)估計(jì)示意圖
由于噪聲干擾,等式不可能嚴(yán)格成立,定義每對(duì)匹配點(diǎn)的誤差項(xiàng):
然后公式(8)可轉(zhuǎn)化為最小二乘問(wèn)題:
假設(shè)兩組點(diǎn)的質(zhì)心為:
則每組點(diǎn)的去質(zhì)心坐標(biāo)為:
優(yōu)化函數(shù)可以轉(zhuǎn)化為:
等價(jià)于:
即可得到從FK-1到Fk幀的位姿R,T,從第一幀開(kāi)始不斷的兩兩計(jì)算位姿變換,得到每一幀相對(duì)于世界坐標(biāo)系的位姿。
只依靠相鄰兩幀得到的位姿誤差較大,本文利用數(shù)量可調(diào)的多幀圖像,計(jì)算路標(biāo)點(diǎn),形成多幀之間的約束,計(jì)算當(dāng)前位姿,提高運(yùn)動(dòng)估計(jì)的準(zhǔn)確性。
圖4 局部?jī)?yōu)化示意圖
如圖4所示,設(shè)從連續(xù)L+1幀圖像中提取的特征點(diǎn)三角化后為路標(biāo)點(diǎn)集合{Pi,i=1,2,...n},把路標(biāo)點(diǎn)Pi在第k幀的觀測(cè),即像素坐標(biāo),記為zk,i。則觀測(cè)誤差方程為:
h為觀測(cè)方程,ξk為從第k-1幀到第k幀的相機(jī)位姿R,T的李代數(shù)表示,ek,i為路標(biāo)點(diǎn)Pi在第k幀時(shí)的觀測(cè)誤差。整體的代價(jià)函數(shù)為:
利用高斯-牛頓法求解上式,即可得到更準(zhǔn)確的相機(jī)位姿。
本文算法實(shí)驗(yàn)環(huán)境為windows10系統(tǒng),CPU為i7-6700,GPU為GTX 1080。上述視覺(jué)定位算法運(yùn)算速度為29.4 fps,滿足實(shí)時(shí)性要求,運(yùn)行結(jié)果如圖5(a)(b)(c)所示。圖5為算法運(yùn)行過(guò)程中截取的相機(jī)3個(gè)不同位置的混合圖像。可以看到虛擬物體與真實(shí)世界保持幾何一致性,說(shuō)明相機(jī)定位精度滿足要求。此外,以圖5(a)為例,圖像左半部圖像為真實(shí)相機(jī)左目和虛擬相機(jī)左目圖像混合而成,將其輸入3D顯示頭盔左目,同理右半部圖像也做相似處理,即可產(chǎn)生立體視覺(jué)效果。
圖5 運(yùn)動(dòng)追蹤結(jié)果示意圖
為了產(chǎn)生更符合用戶直觀感受的虛擬內(nèi)容,增強(qiáng)現(xiàn)實(shí)系統(tǒng)需要檢測(cè)真實(shí)世界中平面的位置,使虛擬物體與真實(shí)平面接觸區(qū)域自然平滑。系統(tǒng)初始化時(shí),在真實(shí)世界平面上建立世界坐標(biāo)系,需要計(jì)算真實(shí)相機(jī)和平面之間的位置關(guān)系。增強(qiáng)現(xiàn)實(shí)中的平面檢測(cè)可以分為兩類?;邳c(diǎn)云數(shù)據(jù)的平面擬合方法[13],利用隨機(jī)采樣一致性模型(RANSAC),求具有最多內(nèi)點(diǎn)的平面。然而由于立體匹配得到的點(diǎn)云數(shù)據(jù)不可靠,使得求解結(jié)果不夠準(zhǔn)確,并且由于點(diǎn)云數(shù)據(jù)量大,平面求解耗時(shí)長(zhǎng),無(wú)法滿足實(shí)時(shí)性?;谔卣鼽c(diǎn)的平面檢測(cè)方法[14],利用前后幀匹配得到的特征點(diǎn)計(jì)算平面。但是此方法對(duì)初始化操作有一定要求,例如純旋轉(zhuǎn)會(huì)造成初始化失敗。
針對(duì)上述問(wèn)題,本文設(shè)計(jì)了一種利用特征點(diǎn)立體匹配和RANSAC的平面檢測(cè)方法。首先利用3.1中的方法,匹配同一時(shí)刻左右?guī)奶卣鼽c(diǎn),繼而利用平行式雙目相機(jī)三角化[15]的方法計(jì)算特征點(diǎn)的三維坐標(biāo),如圖6所示。設(shè)物理坐標(biāo)點(diǎn)P(XC,YC,ZC)在左右相機(jī)成像點(diǎn)的橫坐標(biāo)分別為ul和ur,視差d=ul-ur,則:
f為相機(jī)焦距,T為基線長(zhǎng)度。根據(jù)投影模型可得:
圖6 特征點(diǎn)三角化示意圖
計(jì)算得到所有特征點(diǎn)的三維坐標(biāo)值。
采用RANSAC求解稀疏特征點(diǎn)集合中的平面主要步驟如下:
1)隨機(jī)采樣任意3點(diǎn),計(jì)算平面參數(shù)。
2)計(jì)算所有特征點(diǎn)與該平面的垂直距離,若小于給定閾值,則判定為內(nèi)點(diǎn)。
3)若內(nèi)點(diǎn)數(shù)大于一定的比例,則終止采樣,否則繼續(xù)采樣。
4)重復(fù)上述步驟k次,取內(nèi)點(diǎn)數(shù)最大的集合。
5)利用最終得到的內(nèi)點(diǎn)集合,重新計(jì)算平面參數(shù)。
設(shè)計(jì)算所得的平面法向量為n→(nx,ny,nz),截距為d,內(nèi)點(diǎn)集合為{Si,i=1,2,...n}。計(jì)算內(nèi)點(diǎn)集合的中心位置作為世界坐標(biāo)系原點(diǎn)O(Ox,Oy,Oz),計(jì)算公式為:
將平面法向量n→設(shè)為世界坐標(biāo)系的z軸,記為。計(jì)算內(nèi)點(diǎn)集合中距離平面最近的點(diǎn)P,則令。則世界坐標(biāo)系和真實(shí)相機(jī)之間的變換為:
利用Tcw即可將虛擬物體注冊(cè)到真實(shí)世界中的平面上。
以虛實(shí)雙目相機(jī)的左目為例,結(jié)果示意圖如圖7所示,算法對(duì)比如表3所示。算法先檢測(cè)平面參數(shù),然后利用得到的平面參數(shù)渲染虛擬平面并自動(dòng)注冊(cè)虛擬物體,如圖7深色平面所示,該結(jié)果表明,兩種方法計(jì)算得到的平面參數(shù)都比較準(zhǔn)確。表3表明兩種方法得到的平面參數(shù)相近,但基于特征點(diǎn)的平面檢測(cè)算法速度超過(guò)了基于點(diǎn)云的平面檢測(cè)算法。
圖7 平面檢測(cè)效果圖
表3 平面檢測(cè)算法對(duì)比
在混合空間中,理想狀態(tài)虛擬物體和實(shí)際物體應(yīng)當(dāng)遵循正確的前后遮擋關(guān)系。然而在當(dāng)前增強(qiáng)現(xiàn)實(shí)系統(tǒng)中,一般是直接把虛擬圖像疊加到真實(shí)圖像上。當(dāng)虛擬物體應(yīng)當(dāng)被真實(shí)物體遮擋時(shí),上述處理方法會(huì)造成視覺(jué)感知錯(cuò)亂。文獻(xiàn)[16]采用三維重建方法,通過(guò)預(yù)先對(duì)場(chǎng)景進(jìn)行幾何建模解決遮擋問(wèn)題。然而該方法操作復(fù)雜并且只適用于靜態(tài)場(chǎng)景。本文選取半全局匹配(Semi-global Matching,SGM)方法[6],通過(guò)實(shí)時(shí)計(jì)算真實(shí)場(chǎng)景的深度圖,處理動(dòng)態(tài)場(chǎng)景虛實(shí)遮擋問(wèn)題。
SGM方法是介于局部和全局算法之間的立體匹配算法,給定校正后的左右圖,基于互信息計(jì)算得到每個(gè)像素的匹配代價(jià),然后借助動(dòng)態(tài)規(guī)劃進(jìn)行代價(jià)聚合。算法設(shè)計(jì)的全局能量函數(shù),綜合了鄰域點(diǎn)的匹配代價(jià)和平滑性約束。同時(shí)為了抑制單獨(dú)某個(gè)方向的拖尾問(wèn)題,算法將多個(gè)方向的能量函數(shù)求平均。最后對(duì)得到的視差圖進(jìn)行左右一致性檢驗(yàn)和后處理,得到最終的視差圖。該算法可以通過(guò)并行計(jì)算進(jìn)一步提升速度,滿足實(shí)時(shí)性需求。
利用公式(18),可以將SGM算法得到的視差圖轉(zhuǎn)化為真實(shí)世界深度圖。然后把深度圖作為紋理,傳入圖形渲染管線片段著色器。渲染管線中的深度緩沖區(qū)的值是非線性的,設(shè)為D,則利用公式(22)將其線性化:
其中f為遠(yuǎn)平面,n為近平面,z為線性深度值。比較z和真實(shí)世界深度值,只保留z小于真實(shí)世界深度值的片段,最終實(shí)現(xiàn)虛擬和現(xiàn)實(shí)物體的正確遮擋。
以虛實(shí)雙目相機(jī)的左目為例,結(jié)果如圖8所示,圖8(a)為利用SGM算法得到的真實(shí)世界相對(duì)于真實(shí)相機(jī)左目的深度圖,速度為109 fps。圖8(b)為利用公式(22)得到的虛擬世界相對(duì)于虛擬相機(jī)左目的深度圖,圖8(c)為處理遮擋關(guān)系后的結(jié)果,效果良好。圖8(d)為不進(jìn)行遮擋處理得到的結(jié)果,不進(jìn)行遮擋處理會(huì)造成用戶視覺(jué)感知混亂,影響體驗(yàn)。
圖8 虛實(shí)遮擋示意圖
文中設(shè)計(jì)的雙目增強(qiáng)現(xiàn)實(shí)系統(tǒng)完成了虛擬物體三維注冊(cè)、平面檢測(cè)和虛實(shí)遮擋功能。相比于當(dāng)前主流的增強(qiáng)現(xiàn)實(shí)系統(tǒng),本系統(tǒng)功能更加完善?;陔p目的平面檢測(cè)方法,使系統(tǒng)初始化快速而可靠?;诹Ⅲw匹配的虛實(shí)遮擋處理方法,使系統(tǒng)可以應(yīng)對(duì)動(dòng)態(tài)場(chǎng)景。特別的,基于自然特征的視覺(jué)定位方法,使系統(tǒng)可以在較大面積下有效。本文對(duì)增強(qiáng)現(xiàn)實(shí)系統(tǒng)的設(shè)計(jì)具有一定的參考意義。