高 璐 史金龍 孔 秀
(江蘇科技大學(xué)計(jì)算機(jī)學(xué)院 鎮(zhèn)江 212003)
隨著人工智能、圖像識(shí)別技術(shù)和通訊技術(shù)的迅速發(fā)展,人機(jī)交互技術(shù)[1]成為了科學(xué)家研究的熱點(diǎn)。基于視覺(jué)的手勢(shì)識(shí)別,作為一種非接觸的人機(jī)交互模式,因其符合人們的動(dòng)作習(xí)慣,具有直觀、操作性強(qiáng)等優(yōu)點(diǎn)[2],受到廣大用戶的關(guān)注與認(rèn)可,并逐漸普及到人們的生活中。
基于視覺(jué)的手勢(shì)跟蹤主要分為手勢(shì)關(guān)節(jié)點(diǎn)的檢測(cè)與識(shí)別、特征點(diǎn)匹配、手勢(shì)的跟蹤、手勢(shì)運(yùn)動(dòng)預(yù)測(cè)。從兩個(gè)相機(jī)拍著的視頻中獲得手勢(shì)關(guān)節(jié)點(diǎn)的三維坐標(biāo)和運(yùn)動(dòng)參數(shù),進(jìn)行軌跡預(yù)測(cè)。與靜態(tài)物體的三維重建相比,動(dòng)態(tài)手勢(shì)的軌跡跟蹤更為復(fù)雜。除了將靜態(tài)物體建成三維立體模型[3]外,還需要考慮時(shí)間序列上目標(biāo)的跟蹤。因此,從二維視頻中恢復(fù)三維軌跡,仍具有挑戰(zhàn)性[4]。
近年來(lái),越來(lái)越多的學(xué)者投入到人機(jī)交互、手勢(shì)跟蹤的研究中。文獻(xiàn)[5]中采用三維空間加速度來(lái)記錄手的軌跡,然后采用時(shí)間動(dòng)態(tài)規(guī)劃算法進(jìn)行手勢(shì)分類、并轉(zhuǎn)化成機(jī)器手的控制指令。該方法較為復(fù)雜,成本較高。文獻(xiàn)[6]中,融合Camshift和粒子濾波進(jìn)行手勢(shì)跟蹤。文中將整個(gè)手作為一個(gè)目標(biāo)物體,尋找輪廓并找到手勢(shì)運(yùn)動(dòng)的大概位置,且基于單目視覺(jué)跟蹤,具有單一性。文獻(xiàn)[7]采用Kinect傳感器得到手勢(shì)運(yùn)動(dòng)的三維數(shù)據(jù),并轉(zhuǎn)化成一維手勢(shì)軌跡進(jìn)行動(dòng)態(tài)規(guī)劃。雖然提高了魯棒性,但是借助傳感器等機(jī)械設(shè)備,在人機(jī)交互的應(yīng)用中具有局限性。
本文通過(guò)基于仿射變換的馬氏距離算法和動(dòng)態(tài)線性模型跟蹤方法,重建手勢(shì)關(guān)節(jié)點(diǎn)的軌跡,進(jìn)行手勢(shì)跟蹤和軌跡預(yù)測(cè)。從而實(shí)現(xiàn)了基于雙目視覺(jué)的手勢(shì)跟蹤,提高了特征點(diǎn)匹配的精確度和手勢(shì)跟蹤的準(zhǔn)確性,并降低了時(shí)間復(fù)雜度。
本文使用兩臺(tái)參數(shù)相同、已經(jīng)標(biāo)定的相機(jī)模擬人體雙眼,拍攝目標(biāo)的運(yùn)動(dòng)視頻,并獲取每一幀圖像,進(jìn)行特征點(diǎn)檢測(cè)、軌跡重建與分析。首先,采用張正友標(biāo)定法[8~9]對(duì)兩臺(tái)相機(jī)進(jìn)行立體標(biāo)定,得到相機(jī)在世界坐標(biāo)系的相對(duì)位置,圖像坐標(biāo)系與世界坐標(biāo)系之間的轉(zhuǎn)換。運(yùn)用標(biāo)定得到的相機(jī)內(nèi)外參數(shù)、畸變系數(shù),對(duì)原始圖像進(jìn)行立體校正[10],使同一時(shí)刻左右視圖對(duì)應(yīng)的圖像塊保持在同一水平上,從而降低匹配復(fù)雜度。在空間匹配過(guò)程中,首先通過(guò)基于邊緣特征的優(yōu)化排序Hough梯度法進(jìn)行關(guān)節(jié)點(diǎn)目標(biāo)提取,找到特征點(diǎn)的中心坐標(biāo)。其次,采用基于仿射變換的馬氏距離算法進(jìn)行左右對(duì)應(yīng)點(diǎn)的匹配。再根據(jù)立體視覺(jué)原理[11]和三角形相似法則得到特征點(diǎn)的三維坐標(biāo)。時(shí)間序列跟蹤過(guò)程中,采用基于金字塔光流[12]的線性運(yùn)動(dòng)模型方法進(jìn)行跟蹤,并通過(guò)特征點(diǎn)的運(yùn)動(dòng)參數(shù),進(jìn)行手勢(shì)姿態(tài)分析和運(yùn)動(dòng)軌跡預(yù)測(cè)。跟蹤模型的結(jié)構(gòu)框圖如圖1所示。
圖1 手勢(shì)跟蹤模型的結(jié)構(gòu)框圖
本文根據(jù)手部的骨骼構(gòu)成,構(gòu)建19個(gè)標(biāo)記點(diǎn),分別表示手背、腕掌關(guān)節(jié)和指關(guān)節(jié)。進(jìn)行有效性手勢(shì)判定后,只要跟蹤關(guān)節(jié)點(diǎn),就可以對(duì)其運(yùn)動(dòng)軌跡進(jìn)行識(shí)別。關(guān)節(jié)點(diǎn)模型如圖2所示。
立體校正是為了使左右視圖平行對(duì)準(zhǔn),從而降低匹配復(fù)雜度。在相機(jī)標(biāo)定步驟中,已經(jīng)獲得旋轉(zhuǎn)矩陣R、平移向量T和畸變系數(shù)。通過(guò)建立左右相機(jī)的合成矩陣和行對(duì)準(zhǔn)轉(zhuǎn)換矩陣,實(shí)現(xiàn)立體校正。步驟如下:
Step1:通過(guò)畸變系數(shù)消除圖像的畸變。
Step2:相機(jī)旋轉(zhuǎn)矩陣R劃分為左右相機(jī)的合成矩陣rl、rr,目的是實(shí)現(xiàn)圖像平面平行。
Step3:得到行對(duì)準(zhǔn)矩陣,建立換行矩陣Rrect,使極點(diǎn)轉(zhuǎn)換到無(wú)窮遠(yuǎn)處。其中,Rrect的創(chuàng)建如下:
圖2 手勢(shì)關(guān)節(jié)模型
目標(biāo)檢測(cè)有許多經(jīng)典算法,如模板匹配、Hough變換、SURF、SIFT[13~14]等。本文檢測(cè)的目標(biāo)是帶有標(biāo)記圓點(diǎn)的手勢(shì)關(guān)節(jié)點(diǎn)。如果使用SURF、SIFT等算法,每個(gè)圓點(diǎn)上會(huì)檢測(cè)出多個(gè)特征點(diǎn),無(wú)法進(jìn)行精準(zhǔn)匹配。相較而言采用優(yōu)化的Hough變換,可以找到更精確的目標(biāo)位置。
首先將圖像轉(zhuǎn)化成灰度圖,采用非局部歐式中值去噪算法[15]消除整幅圖像中存在的高斯噪聲,再調(diào)用形態(tài)濾波函數(shù)進(jìn)行圖像邊緣增強(qiáng)[16],最后進(jìn)行特征點(diǎn)提取。對(duì)于形狀較清晰、形變不大的稀疏粒子,采用優(yōu)化的Hough梯度法提取特征點(diǎn)。
經(jīng)典的Hough變換是在參數(shù)空間上畫出一個(gè)完整的圓進(jìn)行投票,雖然對(duì)噪聲不敏感,但精度不足、對(duì)參數(shù)要求比較嚴(yán)格,總體穩(wěn)定性不佳。所以,提出基于優(yōu)化排序的Hough梯度法,在傳統(tǒng)的梯度法中,加入分?jǐn)?shù)過(guò)濾,將找出的圓與實(shí)際輪廓對(duì)比重合率,按照分?jǐn)?shù)高低排序,過(guò)濾掉低分的圓。具體如下。
1)先計(jì)算多個(gè)輪廓梯度向量;
2)根據(jù)搜索半徑R,沿著梯度方向和反方向距離輪廓點(diǎn)R長(zhǎng)度各投一點(diǎn),將候選中心存放在累加器中降序排列,記數(shù)越大越可能為圓心。
3)根據(jù)所有邊界圖中的非零點(diǎn)到中心的距離進(jìn)行升序排列,估計(jì)最佳半徑。
4)保留得分高的圓,與canny算子檢測(cè)到的實(shí)際輪廓進(jìn)行比對(duì),按照重合像素的總數(shù)進(jìn)行排序,得到分?jǐn)?shù)最高的圓。
通過(guò)目標(biāo)檢測(cè),可以得到手勢(shì)關(guān)節(jié)點(diǎn)的特征中心,然后采用基于仿射變換的馬氏距離算法進(jìn)行對(duì)應(yīng)點(diǎn)匹配。
圖像中的任意一點(diǎn)的特征屬性可以由該特征點(diǎn)以及周圍的特征點(diǎn)之間的局部關(guān)系進(jìn)行描述。由于每個(gè)點(diǎn)離散分布,馬氏距離的大小不僅與各個(gè)點(diǎn)集的自身分布有關(guān),還與各個(gè)點(diǎn)集的相對(duì)分布有關(guān)。因此,找到合適的點(diǎn)集是目標(biāo)匹配的關(guān)鍵。不僅可以降低匹配復(fù)雜度,還可以提高匹配正確率。
在雙目視覺(jué)模型中,通過(guò)立體校正后,兩臺(tái)相機(jī)的成像平面是共面的,且左右視圖的x方向和y方向相互平行。根據(jù)仿射變換原理[17],將左圖的向量空間映射到右向量空間上。并構(gòu)成投影點(diǎn)點(diǎn)集L'={(x1,y1)l,(x2,y2)l,…,(xm,ym)l} ,與右圖的特征點(diǎn)點(diǎn)集R={(x1,y1)r,(x2,y2)r,…,(xm,ym)r} 構(gòu)成兩個(gè)待匹配集合。接著,遍歷L'和R,取相同的樣本空間,根據(jù)式(3)得到每個(gè)點(diǎn)對(duì)應(yīng)的馬氏距離遍歷左圖中每個(gè)點(diǎn),計(jì)算差值,根據(jù)馬氏距離譜特征[17]的不變性可推導(dǎo)出:Δd的最小值所對(duì)應(yīng)的 (xi,yi)l和 (xi,yi)r為匹配點(diǎn)。
本文采用基于金字塔光流的動(dòng)態(tài)線性模型法進(jìn)行手勢(shì)關(guān)節(jié)點(diǎn)跟蹤。令線性運(yùn)動(dòng)二階線性狀態(tài)空間函數(shù)為,其中為第n幀圖像的特征點(diǎn)坐標(biāo),則動(dòng)態(tài)線性模型為
由于手勢(shì)在運(yùn)動(dòng)過(guò)程中發(fā)生不同的變化,只采用動(dòng)態(tài)模型進(jìn)行預(yù)測(cè),前后兩幀之間易出現(xiàn)跟蹤錯(cuò)誤現(xiàn)象,隨著時(shí)間步長(zhǎng)的推移,錯(cuò)誤率會(huì)逐漸增加,因此結(jié)合光流法進(jìn)行優(yōu)化。采用金字塔分層Lucas-Kanade光流跟蹤法,以待跟蹤點(diǎn)P為中心的一個(gè)小的空間域Ω上,P點(diǎn)周圍各點(diǎn)運(yùn)動(dòng)矢量保持恒定;給每個(gè)點(diǎn)分配不同的權(quán)重,離中心點(diǎn)越近的點(diǎn)所占的權(quán)重越大;最后使用加權(quán)最小二乘法估計(jì)光流。本文結(jié)合金字塔LK光流和線性模型法,以提高跟蹤準(zhǔn)確度。具體步驟如下:
Step1:第n幀圖像上初始化特征點(diǎn)窗口大小和位置。
Step2:采用動(dòng)態(tài)線性模型迭代獲得新的搜索窗口。
Step3:采用金字塔分層LK光流法預(yù)測(cè)第n+1幀特征點(diǎn)的位置。
Step4:篩選出跟蹤成功的點(diǎn),即光流跟蹤的預(yù)測(cè)位置出現(xiàn)在搜索窗口中。
此方法先用過(guò)動(dòng)態(tài)線性模型得到搜索范圍,再根據(jù)光流估計(jì)值平移鄰域窗口,計(jì)算圖像光流值。在搜索范圍內(nèi)篩選最佳對(duì)應(yīng)點(diǎn),精確度較高。
本文使用兩臺(tái)FDR-AX30相機(jī)來(lái)模擬人的雙目視覺(jué),水平并排放置。首先對(duì)相機(jī)進(jìn)行立體標(biāo)定,得到兩個(gè)相機(jī)在世界坐標(biāo)的相對(duì)位置。然后根據(jù)標(biāo)定參數(shù)建立雙目相機(jī)的合成矩陣和行對(duì)準(zhǔn)轉(zhuǎn)換矩陣,實(shí)現(xiàn)立體校正。立體校正對(duì)比如圖3所示。
圖3 立體校正對(duì)比示意圖
本文使用傳統(tǒng)的Hough和優(yōu)化的Hough梯度法進(jìn)行對(duì)比,可以優(yōu)化的Hough梯度檢測(cè)的結(jié)果較為精準(zhǔn)。比較結(jié)果如圖4所示。
圖4 特征點(diǎn)提取方法對(duì)比圖
在點(diǎn)的匹配上,采用SURF算法與本文方法進(jìn)行比較。匹配數(shù)據(jù)如表1所示,匹配效果如圖5所示。
表1 特征點(diǎn)匹配方法比較
圖5 匹配方法對(duì)比
圖5(a)為本文所使用方法,對(duì)應(yīng)點(diǎn)連接線互相平行,匹配效果達(dá)到要求。圖5(b)存在許多錯(cuò)誤匹配點(diǎn)。引入極線約束條件后,去除了781個(gè)匹配錯(cuò)誤的點(diǎn),但匹配率仍然較低。可見,本文方法精確度較高。
在時(shí)間序列跟蹤上,采用經(jīng)典LK光流、動(dòng)態(tài)線性動(dòng)態(tài)模型跟蹤法和本文的優(yōu)化方法進(jìn)行對(duì)比。比較下一幀特征點(diǎn)的預(yù)測(cè)值與真實(shí)值在x方向和y方向的坐標(biāo)差Δx,Δy和誤差距離Δs。其中,Δx=x1-x0,Δy=y1-y0,。如圖6所示。
圖6 三種方法的誤差對(duì)比
圖6(a)和(b)分別展示了第69幀手勢(shì)運(yùn)動(dòng)數(shù)據(jù)集的19個(gè)關(guān)節(jié)點(diǎn)在x方向和y方向的坐標(biāo)差。x軸為關(guān)節(jié)點(diǎn)的序號(hào),y軸表示誤差值。圖6(c)表示時(shí)間序列上所有點(diǎn)的平均誤差距離(Δs1+Δs2+...+Δsn)/n。其中,x軸表示時(shí)間序列t,y軸表示平均誤差距離。采用動(dòng)態(tài)線性動(dòng)態(tài)模型跟蹤法和LK光流法得到的預(yù)測(cè)值,與真實(shí)值之間誤差較大。本文方法的誤差范圍較小,在時(shí)間序列上可以跟蹤成功。
根據(jù)三角測(cè)量和雙目立體視覺(jué)的原理,將空間上對(duì)應(yīng)匹配,時(shí)間序列上連續(xù)的手勢(shì)關(guān)節(jié)點(diǎn)的二維坐標(biāo)轉(zhuǎn)化成三維坐標(biāo)。并通過(guò)最小二乘曲線擬合[18]方法重建手勢(shì)關(guān)節(jié)點(diǎn)的運(yùn)動(dòng)軌跡。
如圖7(a)在Matlab中展示了第60幀手勢(shì)的三維關(guān)節(jié)點(diǎn),并將關(guān)節(jié)點(diǎn)骨架連接。(b)展示了第37幀、第60幀、第93幀和第161幀的手勢(shì)形態(tài)和整個(gè)時(shí)間序列上關(guān)節(jié)點(diǎn)的運(yùn)動(dòng)軌跡。
通過(guò)三維重建,準(zhǔn)確得到手勢(shì)關(guān)節(jié)點(diǎn)的空間坐標(biāo)。通過(guò)時(shí)間序列跟蹤,可以計(jì)算出關(guān)節(jié)點(diǎn)的運(yùn)動(dòng)信息,以推斷其運(yùn)動(dòng)趨勢(shì)。運(yùn)動(dòng)速度、加速度公式如下所示:
圖7 手勢(shì)重建與軌跡跟蹤示意圖
在三維坐標(biāo)集中,計(jì)算第m幀中特征點(diǎn)Pm在x,y,z方向上的速度Vxi,Vyi,Vzi和加速度axi,ayi,azi。令:
將運(yùn)動(dòng)參數(shù)代入式(8),得到手勢(shì)運(yùn)動(dòng)的預(yù)測(cè)位置,并在Matlab中展示,其中點(diǎn)畫線為真實(shí)軌跡,加粗段為預(yù)測(cè)軌跡。如圖8所示。
圖8 軌跡跟蹤
本文主要研究手勢(shì)關(guān)節(jié)點(diǎn)運(yùn)動(dòng)的跟蹤。在傳統(tǒng)的三維重建模型的基礎(chǔ)上,提出了優(yōu)化的特征點(diǎn)匹配和跟蹤方法。實(shí)驗(yàn)結(jié)果顯示,采用基于仿射變換的馬氏距離算法,相較傳統(tǒng)的SURF算法提高了匹配準(zhǔn)確率;此外,基于金字塔光流的動(dòng)態(tài)線性模型法,減少了跟蹤誤差,實(shí)現(xiàn)了軌跡跟蹤和預(yù)測(cè)。在人機(jī)交互、三維手勢(shì)跟蹤方面具有一定的研究?jī)r(jià)值。下一步將根據(jù)手勢(shì)關(guān)節(jié)點(diǎn)的運(yùn)動(dòng)參數(shù)、運(yùn)動(dòng)方向進(jìn)行手勢(shì)行為分析,為后期用動(dòng)態(tài)數(shù)據(jù)驅(qū)動(dòng)靜態(tài)機(jī)器手臂打下基礎(chǔ)。