吳澤燁,田建曌,車武軍,3
(1.中國(guó)科學(xué)院 自動(dòng)化研究所,北京 100190;2.中國(guó)科學(xué)院大學(xué) 計(jì)算機(jī)與控制學(xué)院,北京 100049;3.北京未來影像高精尖創(chuàng)新中心,北京 100088)
1 引言
動(dòng)作捕捉技術(shù)在游戲設(shè)計(jì)、動(dòng)畫、運(yùn)動(dòng)分析、虛擬現(xiàn)實(shí)等應(yīng)用中有廣泛的應(yīng)用。動(dòng)作捕捉技術(shù)主要分為基于標(biāo)記點(diǎn)的方法和無標(biāo)記點(diǎn)的方法。前者雖然采樣精度高,但是系統(tǒng)整體造價(jià)高昂、操作復(fù)雜。無標(biāo)記點(diǎn)的方法通過處理RGB相機(jī)或深度相機(jī)的數(shù)據(jù)來捕捉人物的動(dòng)作。隨著廉價(jià)的深度傳感設(shè)備的普及,利用深度數(shù)據(jù)進(jìn)行人體運(yùn)動(dòng)捕捉的技術(shù)受到學(xué)術(shù)研究與產(chǎn)業(yè)應(yīng)用人員的共同關(guān)注。
使用單臺(tái)深度相機(jī)進(jìn)行動(dòng)作捕捉[1,2]主要限制在于人物的遮擋。當(dāng)前的一些算法雖然可以實(shí)現(xiàn)在人體發(fā)生遮擋之后重新出現(xiàn)時(shí)繼續(xù)對(duì)其跟蹤,但是這些算法對(duì)于在人體被遮擋期間的骨架信息仍然無法完整獲取。而使用多臺(tái)深度相機(jī)組成的系統(tǒng)[3-5],可以提供一個(gè)更大的視野范圍。Kinect v2是一款典型的TOF深度相機(jī),配套SDK包含人體姿態(tài)跟蹤、人臉識(shí)別等功能,但其性能當(dāng)前與專業(yè)的設(shè)備相比還存在很大差距,SDK中提供的基于機(jī)器學(xué)習(xí)的骨架跟蹤方法[6]捕捉速度快、計(jì)算量小,但捕捉結(jié)果嚴(yán)重依賴于學(xué)習(xí)樣本,對(duì)正對(duì)設(shè)備的人體識(shí)別效果較好,而對(duì)自遮擋、復(fù)雜的人體姿勢(shì)如蹲坐等識(shí)別效果較差,且不能分辨人體的正背面。因此,通過多個(gè)Kinect的傳感數(shù)據(jù)融合來提高系統(tǒng)性能具有重要的研究意義。不同Kinect使用自身的坐標(biāo)系定義數(shù)據(jù),對(duì)來自不同Kinect的人體目標(biāo)數(shù)據(jù)處理時(shí),必須采取一定方法將多個(gè)Kinect視角下的數(shù)據(jù)校準(zhǔn)到同一坐標(biāo)系下,這樣才能對(duì)數(shù)據(jù)進(jìn)一步融合處理。目前標(biāo)定kinect深度相機(jī)外參數(shù)主要有兩種方法[7,8]。一是類似標(biāo)定彩色相機(jī),對(duì)棋盤格采集紅外灰度圖像,采用張氏標(biāo)定法,但這種方法假設(shè)紅外深度相機(jī)在生成紅外圖像與深度圖像時(shí)的坐標(biāo)系完全重合[9],操作較為繁瑣。Núez 等人[4]則是標(biāo)定彩色相機(jī)的外參數(shù)用以代替深度相機(jī)外參數(shù)。二是為棋盤格設(shè)計(jì)具有深度特征的孔洞,從而用于標(biāo)定深度相機(jī),但空洞邊緣的點(diǎn)可能會(huì)丟失,因此精度有所損失[10]。另外,Wei等人[11]提出KSCC校準(zhǔn)算法,用于校準(zhǔn)在遠(yuǎn)程訓(xùn)練系統(tǒng)中的任意位置的使用者的動(dòng)作數(shù)據(jù),該方法首先收集遠(yuǎn)程使用者的骨架數(shù)據(jù),并利用該數(shù)據(jù)計(jì)算使用者與Kinect的相對(duì)位置,將不同初始位置的使用者坐標(biāo)校正到同一個(gè)坐標(biāo)系下。但KSCC算法有一定的限制,要求Kinect相機(jī)高度一致且朝向?yàn)樗?。本文基于Kinect捕捉系統(tǒng)的特點(diǎn),在KSCC算法基礎(chǔ)上進(jìn)行改進(jìn),提出了一種校準(zhǔn)多個(gè)Kinect設(shè)備的人體數(shù)據(jù)的方法,使得操作更加簡(jiǎn)便靈活,無需輔助標(biāo)定設(shè)備或嚴(yán)格擺放相機(jī)。
2 系統(tǒng)概覽
校準(zhǔn)系統(tǒng)總體結(jié)構(gòu)如圖 1所示:每個(gè)Kinect作為客戶端,通過TCP通訊協(xié)議與服務(wù)器端相連接,在服務(wù)器端收集總體數(shù)據(jù)并計(jì)算校準(zhǔn)參數(shù)。

圖1 系統(tǒng)結(jié)構(gòu)
校準(zhǔn)方法的流程如下:
a)系統(tǒng)收集靜止站立使用者的骨架數(shù)據(jù);
b)對(duì)每個(gè)Kinect,使用累積的數(shù)據(jù)計(jì)算平均骨架與骨架的中心點(diǎn)坐標(biāo);
c)設(shè)置某個(gè)Kinect的坐標(biāo)系為系統(tǒng)世界坐標(biāo)系;
d)使用粒子群優(yōu)化算法計(jì)算出每個(gè)Kinect對(duì)應(yīng)的剛體變換矩陣。
此后系統(tǒng)就可以利用該矩陣將捕獲的人體數(shù)據(jù)如骨架坐標(biāo)、點(diǎn)云數(shù)據(jù)等變換到統(tǒng)一的世界坐標(biāo)系下,進(jìn)行進(jìn)一步的數(shù)據(jù)融合處理。
3 算法描述
3.1 骨架數(shù)據(jù)獲取與計(jì)算
系統(tǒng)采集數(shù)據(jù)時(shí),使用者站立在Kinect的有效數(shù)據(jù)采集重疊區(qū)域,人體在每個(gè)Kinect的視角中都不發(fā)生外部遮擋。Kinect SDK中一個(gè)人體骨架由25個(gè)關(guān)節(jié)點(diǎn)組成,每個(gè)關(guān)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)跟蹤狀態(tài),則第i臺(tái)Kinect中目標(biāo)人物骨架的第j(1≤j≤25)個(gè)關(guān)節(jié)點(diǎn)坐標(biāo)可表示為,vij=vij(x,y,z)關(guān)節(jié)點(diǎn)權(quán)重記為wij,與關(guān)節(jié)點(diǎn)跟蹤狀態(tài)Stateij有關(guān),根據(jù)實(shí)驗(yàn)將wij取值如下:
當(dāng)服務(wù)器對(duì)每個(gè)Kinect分別收集N幀數(shù)據(jù)后,開始計(jì)算平均骨架。一般N約為20至30,Kinect設(shè)備刷新幀率為30,則數(shù)據(jù)收集在一秒內(nèi)結(jié)束。對(duì)于第i臺(tái)Kinect,其中目標(biāo)人物骨架的第j個(gè)關(guān)節(jié)點(diǎn)在N幀中坐標(biāo)的加權(quán)和Sij為:




另外,由于Kinect根據(jù)深度信息追蹤人體骨架時(shí),無法確定用戶是否正對(duì)設(shè)備,當(dāng)用戶背對(duì)Kinect攝像頭時(shí),其提供的骨架坐標(biāo)是左右反轉(zhuǎn)的。為此設(shè)定一個(gè)簡(jiǎn)易的初始姿勢(shì)(如右手舉起)輔助系統(tǒng)判斷骨架的左右。計(jì)算出每臺(tái)設(shè)備的加權(quán)平均骨架后,服務(wù)器利用姿勢(shì)檢測(cè)判斷骨架正反面,并依此更新平均骨架。
3.2 求解剛體變換
服務(wù)器選擇信息可信度最高(即加權(quán)骨架關(guān)節(jié)點(diǎn)權(quán)重和最高)的Kinect作為參考,其坐標(biāo)系設(shè)為世界坐標(biāo)系。對(duì)其他Kinect的平均骨架關(guān)節(jié)點(diǎn)做剛體變換,變換到參考Kinect的坐標(biāo)系下。

(1)
記任一非參考Kinect的最優(yōu)剛體變換矩陣為M,則M含有6個(gè)自由度(3個(gè)旋轉(zhuǎn)自由度、3個(gè)平移自由度),變換矩陣M可由4*4矩陣簡(jiǎn)化為由(θx,θy,θz,tx,ty,tz)表示的數(shù)組,其中θx、θy、θz分別為骨架繞x,y,z坐標(biāo)軸旋轉(zhuǎn)的歐拉角,tx、ty、tz分別為骨架沿x,y,z坐標(biāo)軸平移的距離。此時(shí)可利用最小優(yōu)化算法找到使得F值最小的(θx、θy、θz,tx,ty,tz),得到旋轉(zhuǎn)變換矩陣R(θx、θy、θz)=Rz(θz)·Ry(θy)·Rx(θx),由三個(gè)平移變量tx、ty、tz得出平移矩陣T(tx,ty,tz),從而計(jì)算出變換矩陣為M(θx,θy,θz,x,y,z)=T(tx,ty,tz)·R(θx,θy,θz)。

3.3 粒子群優(yōu)化算法
對(duì)每個(gè)非參考Kinect,本文采用粒子群優(yōu)化算法來求解使式(1)最小的變換矩陣,將該非參考Kinect的中心位置坐標(biāo)與參考Kinect的中心坐標(biāo)差值作為偏移量初始值中心進(jìn)行隨機(jī)初始化。具體算法過程如下:
1.初始化:
設(shè)置粒子群規(guī)模,初始化所有粒子,包括隨機(jī)位置和隨機(jī)速度;
2.迭代過程:
a)計(jì)算每個(gè)粒子p的適應(yīng)值:

b)將每個(gè)粒子的計(jì)算出的適應(yīng)值與該粒子歷史最優(yōu)值pbestp比較,如果計(jì)算得出的適應(yīng)值小于歷史最優(yōu)值,則用當(dāng)前位置替換歷史最優(yōu)位置;
c)找出粒子群中所有粒子的適應(yīng)值最小值,與整個(gè)粒子群的歷史最優(yōu)值gbest作比較,如果比歷史最優(yōu)值小則用當(dāng)前位置替換歷史最優(yōu)值;
d)更新每個(gè)粒子p的速度:
其中ω為粒子慣性參數(shù),c1、c2為粒子的“學(xué)習(xí)”速度權(quán)重,r1、r2為介于0與1之間的隨機(jī)數(shù);
f)當(dāng)最大迭代次數(shù)達(dá)到k次,或全局最優(yōu)適應(yīng)值連續(xù)φ次穩(wěn)定在一個(gè)值附近時(shí),達(dá)到迭代結(jié)束條件,否則轉(zhuǎn)跳到計(jì)算粒子適應(yīng)值的步驟繼續(xù)尋找最優(yōu)解。
粒子群優(yōu)化中的全局最優(yōu)適應(yīng)值即為最優(yōu)F值的近似。如果收斂后的適應(yīng)值較大,說明校準(zhǔn)結(jié)果精度較差,需要重新收集數(shù)據(jù)進(jìn)行校準(zhǔn)。
4 實(shí)驗(yàn)結(jié)果
為驗(yàn)證本文算法的有效性,進(jìn)行如下實(shí)驗(yàn):固定一臺(tái)Kinect,將另一臺(tái)Kinect擺放在3個(gè)不同的位置,分別進(jìn)行10次校準(zhǔn),每次校準(zhǔn)時(shí)對(duì)每臺(tái)Kinect分別收集30幀骨架數(shù)據(jù)。
表1展示了30次校準(zhǔn)實(shí)驗(yàn)的結(jié)果,可以看到誤差收斂值一般低于0.08m,平移參數(shù)tx的標(biāo)準(zhǔn)差在0.04m左右,ty、tz的標(biāo)準(zhǔn)差在0.01m左右,歐拉角的角度誤差約在1.2°左右。因此本校準(zhǔn)算法的結(jié)果較為穩(wěn)定,準(zhǔn)確。圖2為一次實(shí)驗(yàn)中兩臺(tái)Kinect坐標(biāo)系校準(zhǔn)前后的追蹤數(shù)據(jù),將同一人在兩臺(tái)Kinect下捕捉到的人體數(shù)據(jù)變換到校準(zhǔn)的世界坐標(biāo)系下,圖中顯示變換后的兩個(gè)人體骨架基本重合,點(diǎn)云數(shù)據(jù)也能很好地融合。
實(shí)驗(yàn)中,校準(zhǔn)算法單線程運(yùn)行于主頻3G的CPU,每次校準(zhǔn)一臺(tái)非參考Kinect所需迭代次數(shù)平均為240次,最多為274次,用時(shí)平均為0.24秒,最多不超過0.3秒。用4臺(tái)Kinect就可較好地覆蓋人體運(yùn)動(dòng)的360°視角范圍,而4臺(tái)Kinect所需要的校準(zhǔn)時(shí)間約為1秒,故本校準(zhǔn)算法運(yùn)行效率較高,具有實(shí)用性。
本文算法基于Kinect的跟蹤結(jié)果進(jìn)行校準(zhǔn),當(dāng)Kinect本身跟蹤骨架誤差過大時(shí),校準(zhǔn)平均誤差也會(huì)隨之增大,導(dǎo)致校準(zhǔn)失敗,需重新收集數(shù)據(jù)校準(zhǔn)。因此初始累積數(shù)據(jù)時(shí),需保證使用者在Kinect的合適捕捉范圍內(nèi)。

圖2 兩臺(tái)Kinect校準(zhǔn)前(左)、校準(zhǔn)后(右)人體數(shù)據(jù)

迭代次數(shù)誤差收斂值用時(shí)TXTYTZθXθYθZ相對(duì)位置12270.03840.23-0.3481.038-1.538-0.1712.555-0.0862330.04840.23-0.2241.037-1.675-0.1842.526-0.0792340.03780.22-0.3421.044-1.527-0.1912.551-0.1032350.04080.23-0.3671.035-1.525-0.1562.535-0.0972350.04270.22-0.3591.040-1.541-0.1682.563-0.0592430.04270.23-0.3541.032-1.531-0.1752.557-0.0722470.03570.24-0.2281.038-1.539-0.1672.533-0.1172570.04100.26-0.2401.039-1.675-0.1742.602-0.0802610.04060.27-0.3581.045-1.513-0.1842.564-0.0932740.03780.29-0.3721.033-1.520-0.1592.537-0.085平均值244.60.04060.24-0.3191.038-1.558-0.1732.552-0.087標(biāo)準(zhǔn)差\