滕嘉瑋,趙 巖*,張艾嘉,王世剛,王曉坤
(1.吉林大學(xué) 通信工程學(xué)院,吉林 長(zhǎng)春 130012;2.空軍航空大學(xué) 航空作戰(zhàn)勤務(wù)學(xué)院,吉林 長(zhǎng)春 130022)
增強(qiáng)現(xiàn)實(shí)(Augmented Reality,AR)[1]一直是三維顯示領(lǐng)域的研究熱點(diǎn),將計(jì)算機(jī)生成的虛擬對(duì)象與真實(shí)場(chǎng)景相結(jié)合,達(dá)到增強(qiáng)用戶視覺感觀的效果。AR廣泛地應(yīng)用于工業(yè)、軍事、醫(yī)療等領(lǐng)域[2],近年來也經(jīng)常出現(xiàn)在春節(jié)聯(lián)歡晚會(huì)的節(jié)目中。AR技術(shù)在現(xiàn)代生活中扮演著越來越重要的角色,并且不斷改變著我們的日常生活。該技術(shù)的核心是虛實(shí)融合技術(shù)[3],為了使虛實(shí)融合效果更加逼真,需要使虛擬對(duì)象與實(shí)際場(chǎng)景呈現(xiàn)一致的幾何效果。幾何一致性主要考慮的是場(chǎng)景中真實(shí)對(duì)象和虛擬對(duì)象的遮擋和幾何匹配,增強(qiáng)觀眾在視覺上的真實(shí)感。
在AR領(lǐng)域中,解決幾何一致性虛實(shí)融合的方法主要分為輔助標(biāo)記法和輔助設(shè)備法[4]。Guo等[1]采用雙通行方案,首先用平行相機(jī)實(shí)時(shí)跟蹤,并允許在掃描過程將重建結(jié)果更新并且可視化,然后根據(jù)攝像機(jī)姿態(tài)處理虛擬對(duì)象和真實(shí)場(chǎng)景模型之間的遮擋,將渲染結(jié)果與彩色圖像融合。Liang等[5]提出了一種為ARAS設(shè)計(jì)的裸手深度感知方法,它可以輸出操作員的手部和虛擬零件之間的正確遮擋。該方法包含一個(gè)懸掛在立足點(diǎn)上的深度攝像機(jī),由該攝像機(jī)提供了場(chǎng)景的俯視圖,并提出了一種基于深度攝像機(jī)的手部分割方法。Güne?等[6]提出了一種無標(biāo)記的3D AR應(yīng)用程序,用于人體手臂周圍的虛擬物體試穿。
上述這些方法都是在三維層面上處理模型和場(chǎng)景之間的遮擋和幾何匹配。本文提出了幾何一致性虛實(shí)融合算法,討論了真實(shí)場(chǎng)景中的人體手臂是否正對(duì)攝像機(jī)拍攝的兩種情況。在手臂二維圖像上確定腕部的寬度和位置后,計(jì)算出虛擬腕表的位置、縮放和旋轉(zhuǎn)角度,最終通過差分渲染得到虛實(shí)融合的結(jié)果。為了使結(jié)果更加真實(shí)同時(shí)也考慮了光照一致性[7]。實(shí)驗(yàn)證明在二維層面處理模型,可以更細(xì)致、精準(zhǔn)地確定虛擬物體與真實(shí)場(chǎng)景的幾何關(guān)系,使虛實(shí)融合結(jié)果更真實(shí)。
本文提出的虛實(shí)融合系統(tǒng)框圖如圖1所示。首先對(duì)場(chǎng)景進(jìn)行三維重建得到場(chǎng)景三維模型,對(duì)場(chǎng)景的三維模型進(jìn)行分割,分割出手臂區(qū)域并計(jì)算手腕的位置與寬度。然后,通過差分渲染[8]算法把虛擬物體插入到真實(shí)場(chǎng)景中,最后為了虛實(shí)融合結(jié)果的真實(shí)性,對(duì)場(chǎng)景進(jìn)行光照估計(jì),構(gòu)建了幾何一致性和光照一致性統(tǒng)一的虛實(shí)融合系統(tǒng)。
圖1 虛實(shí)融合系統(tǒng)框圖Fig.1 System diagram of virtual-real fusion system
使用Kinect相機(jī)[9]拍攝場(chǎng)景得到場(chǎng)景的深度圖像和彩色圖像,采用KinectFusion[10]算法來重建三維場(chǎng)景。在導(dǎo)出重建的場(chǎng)景模型之后,通過蝴蝶細(xì)分算法[11]分割場(chǎng)景模型,將場(chǎng)景中的人體手臂部分分割出來。因?yàn)樾枰罅康狞c(diǎn)的坐標(biāo)數(shù)據(jù),所以將分割好的手臂模型表面的三角面片細(xì)分,增加其頂點(diǎn)數(shù)量,最后將所有的頂點(diǎn)坐標(biāo)輸出。
3.2.1 投影映射算法
當(dāng)手臂正對(duì)攝像機(jī)時(shí),手臂的三維模型坐標(biāo)系中z軸垂直于視覺平面。此時(shí)將模型的所有x o y平面向z軸的方向投影,映射的結(jié)果就是手臂的二維圖像,如圖2所示。
圖2 手臂二維圖像Fig.2 Two-dimensional image of arm
從圖2可以看出,手臂上的主方向是從手肘到手腕的方向,即水平方向。為了驗(yàn)證結(jié)果的準(zhǔn)確性,計(jì)算了手臂二維圖像協(xié)方差的特征值,發(fā)現(xiàn)手臂二維圖像的水平特征值最大,因此得到的手臂二維圖像是準(zhǔn)確的。
不難發(fā)現(xiàn)手臂二維圖像上因?yàn)橐恍c(diǎn)的缺失或者與其他點(diǎn)重疊,一些垂直列上的點(diǎn)很稀疏。在計(jì)算腕部位置與寬度時(shí),這會(huì)導(dǎo)致錯(cuò)誤。因此,刪除所有稀疏點(diǎn)的垂直列,獲得新的手臂二維圖像如圖3所示。
圖3 優(yōu)化后的手臂二維圖像Fig.3 Optimized two-dimensional image of arm
在圖3中,很容易找到手臂二維圖像每列的上邊緣和下邊緣上的點(diǎn)。上邊緣的點(diǎn)記為Yupper,下邊緣的點(diǎn)記為Ydown。因?yàn)檫@些點(diǎn)是離散的,上下點(diǎn)不嚴(yán)格匹配。因此,計(jì)算每列的長(zhǎng)度為:
其中:x=2,…,N-1;j=i-1,i,i+1,第i列的長(zhǎng)度值是3條線的最大值。通過每一個(gè)下邊緣點(diǎn)與其對(duì)應(yīng)的3個(gè)上邊緣點(diǎn)之間的長(zhǎng)度來計(jì)算腕部的長(zhǎng)度。在獲得不同列的長(zhǎng)度之后,最短的長(zhǎng)度被視為手腕的長(zhǎng)度,可通過以下公式得出:
其中:Loc是計(jì)算得出的腕部寬度,相應(yīng)的x值可以確定哪根立柱是腕部位置。
3.2.2 仿射變換算法
手臂與攝像機(jī)成一定夾角,按照3.2.1的方法得到的手臂二維圖像如圖4所示。
圖4 不正對(duì)攝像機(jī)的手臂二維圖像Fig.4 Two dimensional image of arm not facing camera
由圖4可以看出,手臂的二維圖像不方便直接計(jì)算出手腕的位置與寬度,所以需要對(duì)手臂的二維圖像進(jìn)行仿射變換。
仿射變換[12]是在幾何上定義為兩個(gè)向量空間之間的一個(gè)仿射變換或者仿射映射,由一個(gè)非奇異的線性變換[13](運(yùn)用一次函數(shù)進(jìn)行的變換)并接上一個(gè)平移變換組成。這里使用仿射變換(或2D仿射變換),主要包括旋轉(zhuǎn)、平移和縮放等。該變換結(jié)果仍然保持二維圖像的平坦度,即直線上的點(diǎn)仍然在直線上,點(diǎn)的位置順序保持不變,二維圖像的相對(duì)位置不變。
任何仿射變換都可以表示為矩陣與向量的乘積,然后通過齊次坐標(biāo)將這兩部分結(jié)合起來,矩陣平移公式為:
然后假設(shè)矩陣旋轉(zhuǎn)角度為α角,則坐標(biāo)的仿射矩陣為:
類似地,假設(shè)縮放因子為s,則坐標(biāo)的仿射矩陣為:
因此,需要根據(jù)上述算法優(yōu)化手臂的二維圖像。求出圖4中手臂二維圖像上所有點(diǎn)的坐標(biāo),然后計(jì)算將其轉(zhuǎn)到面向相機(jī)的手臂二維圖像的旋轉(zhuǎn)角度。經(jīng)過計(jì)算可得旋轉(zhuǎn)角度為π/3,旋轉(zhuǎn)后手臂的二維圖像如圖5所示。
因?yàn)檎鎸?shí)場(chǎng)景中物體的坐標(biāo)系和虛擬物體的坐標(biāo)系存在差異,所以坐標(biāo)系的統(tǒng)一有利于虛實(shí)融合。在手腕位置的中心點(diǎn)處建立了第一個(gè)坐標(biāo)系,同時(shí)在虛擬腕表的表盤處建立了第二個(gè)坐標(biāo)系,需要通過坐標(biāo)系的旋轉(zhuǎn)和平移將兩個(gè)坐標(biāo)系統(tǒng)一[14]。
圖5 旋轉(zhuǎn)后的手臂二維圖像Fig.5 Two dimensional image of arm after rotating
矩陣旋轉(zhuǎn)有3個(gè),分別繞x軸旋轉(zhuǎn),繞y軸旋轉(zhuǎn),繞z軸旋轉(zhuǎn)。其中,繞x軸旋轉(zhuǎn)的旋轉(zhuǎn)矩陣為:
其中θ為旋轉(zhuǎn)角度。
同理,可以得到繞y軸旋轉(zhuǎn)和繞z軸旋轉(zhuǎn)的旋轉(zhuǎn)矩陣:
如果有一個(gè)旋轉(zhuǎn)可以表示為依次繞著3個(gè)旋轉(zhuǎn)軸旋轉(zhuǎn)3個(gè)角度的組合,那這3個(gè)角度可以稱之為歐拉角,3個(gè)軸的旋轉(zhuǎn)次序不同,得到的結(jié)果也會(huì)不同。例如,常用的AR軟件Unity3D中歐拉角的旋轉(zhuǎn)順序就為Z Y X,所以旋轉(zhuǎn)順序很重要。
通過歐拉角旋轉(zhuǎn)將兩個(gè)坐標(biāo)系統(tǒng)一。由歐拉角求旋轉(zhuǎn)矩陣時(shí),設(shè)3個(gè)軸的歐拉角分別為θx,θy,θz。正弦值和余弦值分別為sx,cx,sy,cy,sz,cz,那么旋轉(zhuǎn)矩陣為:
解上述旋轉(zhuǎn)矩陣可以逆向求得3個(gè)歐拉角,分別為:
其中rij是旋轉(zhuǎn)矩陣中的元素值,i,j=1,2,3。由此就可以得到坐標(biāo)系3個(gè)坐標(biāo)軸各自的旋轉(zhuǎn)角度。
為了自動(dòng)地將虛擬物體與真實(shí)場(chǎng)景相融合,采用了差分渲染算法。
3.4.1 虛擬對(duì)象的插入
為了在獲得的圖像中插入虛擬對(duì)象,實(shí)現(xiàn)場(chǎng)景的幾何一致性,在場(chǎng)景中放置一個(gè)虛擬對(duì)象,場(chǎng)景中的一些像素會(huì)被虛擬對(duì)象遮擋。虛擬對(duì)象也會(huì)影響未被遮擋的像素,當(dāng)虛擬對(duì)象在場(chǎng)景中投射陰影時(shí),插入對(duì)象周圍的局部區(qū)域?qū)⒆儼怠ebevec等[18]將該區(qū)域稱為“局部場(chǎng)景”,并使用微分方法渲染該區(qū)域。
在給定的場(chǎng)景光照和相機(jī)參數(shù)下,對(duì)有合成對(duì)象和無合成對(duì)象的虛擬局部場(chǎng)景進(jìn)行渲染,得到圖像IO和IN。這兩個(gè)圖像之間的差異揭示了插入的對(duì)象對(duì)場(chǎng)景的影響。該改變被添加到原始圖像IF以生成合成圖像IΔ:
差分渲染要求在虛擬局部場(chǎng)景中渲染虛擬對(duì)象,并將虛擬局部場(chǎng)景與真實(shí)場(chǎng)景調(diào)成一致的像素。然而,因?yàn)樘摂M局部場(chǎng)景的像素強(qiáng)度可能在每一個(gè)圖像之間發(fā)生變化。通過相機(jī)進(jìn)行自動(dòng)曝光校正,虛擬局部場(chǎng)景的顏色強(qiáng)度會(huì)發(fā)生變化。所以插入虛擬物體后,插入前后圖像的像素強(qiáng)度會(huì)不一致。為了克服這個(gè)問題,計(jì)算得到:
其中SO和SN分別是具有和不具有虛擬對(duì)象的渲染無紋理場(chǎng)景。它們的比率顯示插入虛擬對(duì)象導(dǎo)致的像素變暗程度。
如果原始場(chǎng)景中的某個(gè)區(qū)域被插入的對(duì)象遮擋,便將它替換為虛擬對(duì)象中的像素。通過在相機(jī)坐標(biāo)系中比較場(chǎng)景像素和對(duì)象像素的深度來確定這些區(qū)域;如果插入的對(duì)象離攝像機(jī)較近,IO中的像素將復(fù)制到IC。
由于攝像機(jī)的運(yùn)動(dòng),初始場(chǎng)景圖像可能會(huì)模糊。為了產(chǎn)生更具說服力的結(jié)果,虛擬對(duì)象也應(yīng)根據(jù)攝影機(jī)的移動(dòng)進(jìn)行模糊。當(dāng)在時(shí)間t處合成圖像IC時(shí),收集多個(gè)樣本,樣本時(shí)間t=t-Δt其中Δt∈[0,]1,通過對(duì)樣本時(shí)間t'處合成的圖像進(jìn)行平均來獲得最終合成圖像Ic,t:
式中IO,t',SO,t'和SN,t'的定義與式(10)和式(11)中的IO,SO和SN相同。在樣本時(shí)間t'進(jìn)行渲染并計(jì)算t'處的相機(jī)姿態(tài)。IF,t是輸入圖像。Mt'是一個(gè)值為1的二元掩膜,其中插入的對(duì)象在時(shí)間t'和其他位置為0的地方開始遮擋原始場(chǎng)景。這可以反映出虛擬對(duì)象隨著場(chǎng)景的移動(dòng)而移動(dòng),從而使整個(gè)場(chǎng)景更加連貫。
3.4.2 陰影檢測(cè)
如果光源被其他對(duì)象阻擋,則投射的陰影可使其他陰影變形。如果能計(jì)算出有多少光線被遮擋,就能消除陰影。如果場(chǎng)景幾何體和照明可用,通過式(13)確定每個(gè)點(diǎn)被遮擋的光線數(shù)量,即:
需要通過忽略可見性項(xiàng)V(V表示來自光源的光按照正常照射方向照向物體表面)來計(jì)算它在沒有遮擋的情況下接收的光線數(shù)量。忽略可見性項(xiàng)V后,式(13)變?yōu)椋?/p>
當(dāng)S(x)和S'(x)分別測(cè)量到達(dá)x的光線是否有遮擋時(shí),S(x)/S'(x)表示光線在x處無遮擋的程度。為了去除陰影,將每個(gè)像素I(x)除以S(x)/S'(x)的值以補(bǔ)償陰影。然而,該值可能不準(zhǔn)確,某些區(qū)域會(huì)被過度校正,而其他區(qū)域仍然太暗。為了克服這個(gè)問題,本文生成一個(gè)閾值為S(x)/S'(x)的陰影遮罩,并使用掩膜區(qū)域中的局部照明變化來調(diào)整其外觀。
由于本方法中在插入對(duì)象和陰影檢測(cè)的同時(shí)也考慮了場(chǎng)景中的光照影響,所以在場(chǎng)景中對(duì)虛擬物體進(jìn)行了光照估計(jì)[15-19]。
采用式(2)來確定手腕位置和寬度,通過計(jì)算手臂二維圖像上每一列的上下邊緣點(diǎn)的差值來計(jì)算每一列的長(zhǎng)度,得到的結(jié)果如圖6(a)所示,此時(shí)計(jì)算出的長(zhǎng)度曲線圖很不規(guī)則,很難處理??紤]到手臂二維圖像上存在邊緣點(diǎn)缺失的問題,將每一個(gè)下邊緣點(diǎn)與它對(duì)應(yīng)的上邊緣點(diǎn)和其左右相鄰的兩個(gè)上邊緣點(diǎn)連線,計(jì)算3條線的長(zhǎng)度,得到的結(jié)果中取最長(zhǎng)的一條線作為這列的長(zhǎng)度,最終的長(zhǎng)度曲線如圖6(b)所示。
圖6 確定手腕位置與寬度實(shí)驗(yàn)結(jié)果Fig.6 Experiment result for determining wrist position and width
由圖6可以看出,手腕的位置在橫坐標(biāo)(表示列數(shù))279處,寬度為對(duì)應(yīng)的縱坐標(biāo)66,用白線標(biāo)記出來,如圖7所示。
圖7 白線標(biāo)記手腕位置Fig.7 Wrist position marked by white line
通過3.3中坐標(biāo)系統(tǒng)一的算法將坐標(biāo)系旋轉(zhuǎn)的3個(gè)歐拉角計(jì)算出來,再通過差分渲染算法,結(jié)合計(jì)算出的虛擬物體旋轉(zhuǎn)角、位置坐標(biāo)和縮放將對(duì)象插入到真實(shí)場(chǎng)景中并進(jìn)行渲染[20],虛擬腕表模型以及插入虛擬物體后場(chǎng)景的初步融合圖如圖8所示。
圖8 插入虛擬腕表模型融合Fig.8 Fusion image of virtual watch model on arm
為了使融合結(jié)果更加真實(shí),采用基于全局照明模型的光照估計(jì)算法[17]對(duì)場(chǎng)景加入了光照估計(jì),結(jié)果如圖9所示。
將計(jì)算得到的手腕寬度與實(shí)際手腕寬度比較,將虛擬腕表旋轉(zhuǎn)角度和位置點(diǎn)與實(shí)際的腕表旋轉(zhuǎn)角度和位置點(diǎn)比較,然后進(jìn)行誤差分析,結(jié)果如圖10和表1所示。把計(jì)算得到的手腕寬度與在手腕處4次測(cè)量得到的寬度相比較,可以看出計(jì)算得到的數(shù)據(jù)在誤差范圍內(nèi)。
表1為計(jì)算得到的虛擬腕表的3個(gè)坐標(biāo)軸的旋轉(zhuǎn)角度和坐標(biāo)原點(diǎn)的坐標(biāo)與實(shí)際測(cè)量得到的結(jié)果,誤差控制在4%左右。
為了驗(yàn)證結(jié)果,按照文獻(xiàn)[7]的方法,使用計(jì)算機(jī)檢測(cè)手腕姿態(tài),在骨架提取之后確定了手腕點(diǎn),通過四元數(shù)算法旋轉(zhuǎn)虛擬物體,得到虛擬物體的旋轉(zhuǎn)角度(x,y,z)為(-30°,163°,47.5°)。最后通過渲染RGB得到融合圖,如圖11所示。與圖11的誤差分析結(jié)果中虛擬物體的旋轉(zhuǎn)角度相比,本文的計(jì)算精度提高了15%左右。
圖9 虛實(shí)融合結(jié)果Fig.9 Result of virtual-real fusion
圖10 手腕寬度計(jì)算誤差分析Fig.10 Error analysis of wrist width calculation
圖11 文獻(xiàn)[7]的虛實(shí)融合結(jié)果Fig.11 Result of virtual real fusion in reference[7]
文獻(xiàn)[7]中,通過Kinect深度相機(jī)的骨骼點(diǎn)提取,確定出手腕的骨骼點(diǎn)位置,經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn),該方法只有人在深度相機(jī)視野內(nèi),并且要距深度相機(jī)特定的距離,所以具有局限性。在虛實(shí)融合部分文獻(xiàn)[7]采用的是四元數(shù)算法,沒有實(shí)際考慮到虛擬物體真實(shí)的體積,所以手表和手腕的融合幾何一致性不夠好。
表1 坐標(biāo)系旋轉(zhuǎn)角度和坐標(biāo)原點(diǎn)位置比較Tab.1 Comparison of coordinate system rotation angle and coordinate origin location
本文提出了一種幾何一致性的虛實(shí)融合方法,并結(jié)合光照一致性,實(shí)現(xiàn)了具有幾何一致性和光照一致性的虛實(shí)融合系統(tǒng)。該系統(tǒng)使用Kinect重建場(chǎng)景三維模型,使用三維到二維的方法處理手臂,并采用一種基于空間的變換方法來提高精度。最后,使用差分渲染將虛擬對(duì)象準(zhǔn)確地插入到真實(shí)場(chǎng)景中。實(shí)驗(yàn)結(jié)果表明,經(jīng)過本文方法確定手腕的位置與寬度,其誤差在實(shí)際測(cè)量的數(shù)據(jù)范圍之內(nèi),得到的手表坐標(biāo)系的旋轉(zhuǎn)角度和位置與實(shí)際測(cè)量結(jié)果的誤差在4%,且融合效果提升了15%左右。