徐鵬飛 張紅英
(西南科技大學信息工程學院 四川綿陽 621000)
進入計算機時代以來,人機交互技術一直相對單一,傳統的鼠標鍵盤交互方式給人們的生活學習帶來很大局限性,特別是近年來生活水平不斷提高,傳統交互方式已經不能滿足人們各個方面的需求。隨著計算機視覺技術的不斷發展,越來越多的研究者們通過手勢運動跟蹤以及手指狀態來實現非接觸式的人機交互[1-2]。
準確的手勢分割和指尖檢測是進行手勢識別的前提,在動態手勢識別中加入多個指尖的運動軌跡特征就能夠大量增加手勢種類。如果能夠通過手指移動完成隔空操作,那肯定會比揮動手臂操作有更好的用戶體驗。當前手勢交互的研究主要集中在基于二維彩色圖像的研究上,如:根據各種顏色空間、人手的紋理結構分析、灰度特征或者運動特征等來對目標進行檢測與跟蹤。Rafael Bastos[3]等人利用HSV空間進行膚色分割,曹建秋[4]等人利用YCbCr空間進行膚色分割。利用不同的顏色空間進行膚色分割有不同的效果,一般而言,在光照變化較大的情況下,利用YCbCr空間進行膚色分割的效果較好,而在正常的光照條件下,利用RGB空間進行膚色分割的效果較好。由于人種膚色差異較大,這一點也限制了利用膚色進行圖像分割的應用范圍。于洋[5]等人通過結合灰度級直方圖和設置動態閾值的方法進行手勢識別和分割,達到了較好的效果。Schwarz L A[6]等人采用健壯性檢測解剖標志以及約束化逆運動學,結合光流法來檢測運動姿勢。但由于二維圖像無法獲取物體在三維空間中的距離信息,相關的算法容易受到周圍環境、光照變化、背景等因素的影響,在目標檢測與跟蹤上魯棒性較差,難以實現復雜場景下的任意目標檢測和實時跟蹤,應用受到很大的限制。
本文通過引入Kinect攝像機來得到場景中的深度信息,有效分離目標與背景;使用最大類間方差法與固定閾值相結合的方法,分割出手勢區域;利用手部輪廓幾何特征、曲率特征標記指尖位置,實現實時的手勢分割與指尖檢測。
基于深度圖像的手勢分割和指尖檢測系統包含四大部分:深度圖像采集、手勢分割、指尖檢測以及檢測結果輸出。整個系統的流程圖如圖1所示。
Kinect是由微軟開發的體感攝像機,最主要功能之一就是能夠產生三維深度數據。深度數據流所提供的圖像幀的每一個像素點代表的是在深度感應器的視野中,在(x,y)坐標處離攝像頭平面最近的物體到該平面的距離(以毫米為單位)。其傳感器傳回的數據每像素占2字節(16位),其中低3位存儲用戶編號,用于用戶的識別。高13位存儲深度值。獲取的圖像中深度值最大為4 096 mm,0值通常表示深度值不能確定,一般應該將0值過濾掉。微軟建議在開發中使用1 220~3 810 mm范圍內的值。在進行其他深度圖像處理之前,應該使用閾值方法過濾深度數據至1 220~3 810 mm這一范圍內。
在實際場景中,各個物體的深度分布是離散的,故本文采用先從當前場景中分割出人體,再從人體圖像中分割出人手圖像的方法。

圖1 系統總流程圖Fig.1 The total system flowchart
由于Kinect獲取的深度圖像是不穩定的,其中存在一些空洞和噪聲,以及物體邊緣的深度值不穩定,直接處理會對算法的效果造成影響,所以需要進行一些濾波和形態學操作等,以提高分割和檢測的準確性。
1.2.1 圖像濾波
傳統濾波算法有均值濾波、中值濾波、低通濾波等。均值濾波算法比較簡單、易于實現,但是會使目標邊緣模糊,且對零值噪聲敏感,影響后續處理。由于深度圖像中噪聲多為0值點,即攝像機無法獲取深度值的點,中值濾波可以有效去除噪聲點,也降低了目標邊緣的模糊程度。所以本文采用中值濾波算法進行去噪。中值濾波法是一種非線性平滑技術,它的基本原理是通過使用滑動窗口掃描整幅圖像,將窗口內所有點的像素值按大小順序排列,找到其中的中位數,將中位數賦給窗口中心點。本文采用3×3的模板數組作為中值濾波的窗口,則對于圖像中任一點(x,y)都有8個相鄰的點,加上點(x,y)共有9個點,當這9個點有奇數個灰度值時選取中間值來代替點(x,y)的灰度值,而當這9個點有偶數個灰度值時選取兩個中間值的均值來代替點(x,y)的灰度值。對于圖像中4個邊框的像素點不進行處理,保持原來的灰度值。中值定義如式(1)。

1.2.2 形態學處理
形態學處理主要包括腐蝕、膨脹、開運算、閉運算等。膨脹是指將圖像與核進行卷積,并求其局部最大值的操作。核可以是任何的形狀或大小,它擁有一個單獨定義出來的參考點。核與圖像卷積,即計算核覆蓋的區域的像素點最大值,并把這個最大值賦值給參考點指定的像素,這樣會使圖像中的高亮區域逐漸增長。腐蝕是膨脹的反操作。腐蝕操作是對圖像的細化,常應用于骨架的提取、噪聲點的去除等;膨脹操作是對圖像目標的擴大,應用于圖像空洞的填充。開運算和閉運算是腐蝕膨脹的組合操作。在開運算情況下,我們先對圖像進行腐蝕后進行膨脹。開運算通常可以用來統計二值圖像中的區域數。在閉運算的情況下,我們先對圖像進行膨脹然后進行腐蝕。在多數連通區域分析算法中,都會用到閉運算來去除噪聲引起的區域。
通過對Kinect返回的深度數據進行分析,像素值的高13位保存該點像素的深度值,低3位保存操作者序號。當操作者序號為000時,表示該像素不屬于操作者。遍歷每一幀圖像的每一個像素,將像素信息后三位與111相與即可獲取該像素的操作者序號,進而過濾出操作者和背景,只取操作者的像素信息,其余像素信息全部置零。

如圖2所示,經過逐像素判定后可以得到人體的深度圖像。

圖2 獲取操作者深度圖像Fig.2 The depth image of the user
從深度圖像的特性來看,每個像素的灰度值能夠反映該點距離攝像頭的遠近。在得到人體深度圖像后,統計其灰度分布直方圖。如圖3(a)所示,當操作者伸出手操作時,灰度直方圖中較小的峰是手部區域的灰度分布,較大的峰是人體軀干區域的灰度分布。可見手掌平面與攝像機平面平行時,手掌的深度分布較均勻;如圖3(b)所示,當人手距離身體較近時,手部區域灰度值與人體灰度值相差不大;如圖3(c)所示,當指尖向前傾斜,人手所在平面與攝像機平面不平行時,人手區域的灰度分布范圍較大,所以單純使用最近點灰度值與固定閾值相加的方法來分割手勢會有很大的局限性。

圖3 人體深度分布直方圖Fig.3 The body depth distribution histogram
設圖像中一共包含L個灰度級(0,1,2,……,L-1),灰度值為i的的像素點數為Ni,由于灰度值為0的點是背景點,直接將其排除計算,圖像中人體部分總的像素點數為N=N1+N2+…+NL-1。灰度值為i的點的概率為:pi=Ni/N。設閾值t,將圖像分為軀干A=(1,2,3,…,t)和人手B=(t+1,t+2,t+3,…,L-1)兩個部分。則兩類出現的概率為:

軀干和人手的灰度均值為

灰度圖像的總均值為

由此,可以得到人手區域和軀干區域的類間方差

類間方差越大,兩類灰度差別就越大。則使得類間方差σ2最大的t即為所求的最佳閾值[7]。

由于后續工作只需對人手圖像進行操作,而此時得到的圖像有可能含有部分手臂圖像,因此,再設置閾值τ,結合自適應閾值得到的t,可以較好的得到手部圖像。
依據該閾值分割出手部圖像

如圖4所示,該方法能夠得到比較好的分割效果。

圖4 手勢分割效果Fig.4 The effect of hand gesture segmentation
指尖檢測算法中,建立三維手指模型的計算量較大,因此在實時系統中應用很少。基于二維手指模型的檢測分為指尖的空間位置檢測和二維平面位置檢測。指尖的空間位置檢測一般需要復雜的計算。因此在許多實時系統中,主要是檢測指尖在二維平面上的位置。檢測指尖二維平面位置的方法可以分為3類:輪廓分析[8]、模板匹配[9]和直觀啟發式方法[10]。
鑒于深度圖像的特征:人離攝像頭較遠,分辨率較低,手部圖像模糊,不適用傳統的模板匹配等方法。本文采取的方案是:首先,計算獲得圖形質心;其次,提取手部輪廓信息;最后,計算輪廓上各個點到質心的距離,判定指尖。由于指尖為突出部分,所以輪廓各點到掌心距離會有一個急劇的先變大再變小過程,而手腕、手掌邊緣不具有這些特征,通過合適的閾值設置即可快速的檢測出指尖。
指尖檢測步驟如下:
(1)首先計算圖像的矩并得到質心

Mpq為(p+q)階矩,I(x,y)是被描述的區域。其0階矩為:

1階矩為:

因此,圖像形狀的質心為:

(2)設P(xi,yi)為輪廓上的點,根據得到的人手圖像進行輪廓提取并計算輪廓上點P(xi,yi)距離質心的距離D:

順時針或者逆時針遍歷輪廓上所有的點,就會出現5個較大峰值,分別對應5個手指。手腕處的距離變化速度明顯小于指尖處。如果只伸出一兩個手指,那么就只有一兩個峰值了。
(3)判定指尖:將t個手部輪廓連續像素分為一組P={P0,P1,…Pt-1},在各組中尋找距離極大值的點Pmax。然后以此點開始按順時針、逆時針方向各抽樣一個點(Pmax-5,Pmax+5),如果滿足|Pmax-Pmax-5|>τ且|Pmax-Pmax+5|>τ則認定Pmax為指尖,如果不滿足則說明此段序列中無指尖。在認定為指尖的Pmax中,計算任意兩點的距離,距離太近的刪除其中一個,以排除分段點正好位于指尖位置時出現兩個都可認定為指尖的點。
為驗證算法有效性和手指尖提取的準確性,本文在配置為奔騰雙核主頻為2.80 GHz處理器、內存2 GB、win7 32位操作系統的計算機上,采用VS2010編譯環境,利用opencv2.3.1和C++來進行算法設計。傳感器為Kinect for XBOX360,深度圖像分辨率為320×240。
如圖5所示,紅點表示手部圖像質心,綠點表示指尖。本文算法下可有效檢測0到5個指尖。

圖5 不同數目手指的指尖檢測情況Fig.5 Fingertip detection of different numbers of fingers
本文方法相對于其他手勢分割及指尖檢測方法最大的提升在于魯棒性。
相對于使用彩色相機的方法,由于深度圖像的生成與環境光照、顏色無關,而且在手勢分割中已經通過距離信息將所有背景信息去除,然后只對分割出的手部圖像進行指尖檢測,所以能很好克服環境光照變化、環境中有類膚色區域、背景干擾等限制因素。而利用手部輪廓特征,計算輪廓點與掌心距離判斷指尖的方法也具有尺度變化、旋轉不變性,可以對指尖指向不加限制。
將深度圖像檢測到的指尖坐標映射到彩色圖像上,如圖6所示,圖6(a)為光線較暗的情況,圖6(b)為正常光照的情況,圖6(c)為光照較強的情況,圖6(d)為背景中有類膚色區域和其他人物,圖6(e)為指尖不同指向時的情況。可以觀察到本文算法在各種光照變化、背景干擾、指尖指向不一的情況下仍能夠準確檢測到伸出的指尖。
相對于同樣使用深度圖像信息的方法,如曹雛清[11]等人的分割方法需假設人手為距離攝像頭最近的物體,而本文算法通過引入用戶ID分類,可以很好克服前景干擾。另外,曹的方法使用固定閾值,在手掌伸出角度較大時,也會造成手勢分割不完全或者范圍過大,本文算法采用自適應閾值分割的方法可以解決此問題。如圖7所示,當操作者之前有其他物體或者手部傾斜較大時,使用曹雛清等人的方法進行手勢分割不能正確得到人手圖像而造成漏檢、誤檢,但是本文方法不受干擾。

圖6 不同實驗條件下的檢測效果Fig.6 Detection performances of different experimental conditions

圖7 前景干擾及手部傾斜時的檢測效果Fig.7 Detection performances of occlusion and hand leaning
從以上實驗中隨機選取1 800幀圖像(0~5個手指各300幀),其中包含了不同光照、背景及指尖指向的各種情況,統計檢測結果,得到表1數據。檢測正確定義為:伸出幾個手指就檢測到幾個指尖,多檢、漏檢均為錯誤。指尖數目平均檢測正確率為97.9%。從結果可以看出不同手指數目的總體檢測正確率較高,在環境變化的情況下仍能保持較好的魯棒性。

表1 檢測正確率Table 1 Detection accuracy rate
表2對比了本文方法與曲率法檢測指尖的精度(指尖實際位置為指尖正中間)及消耗時間。可以看出指尖檢測精度差別不大,但是本文算法耗時較短。指尖位置產生誤差的原因為:某些手勢下,指尖點并非是距離掌心的最遠點,可能是其旁邊的像素,因而造成數個像素的誤差。

表2 實驗誤差與耗時比較Tab.2 Experimental error and time consumption
通過以上實驗可見,基于深度信息的手勢分割能夠在各種情形下有效分割出手部圖像,穩定快速地進行指尖檢測。但是深度圖像也有其局限性。如圖8所示,左圖為人手在距離攝像頭1.7 m時,右圖為人手在距離攝像頭1.2 m時,結果表明由于設備精度問題,在1.7 m時能檢測出伸出手指的個數,但是對于指尖的真實位置的準確定位有誤差。

圖8 人手距離攝像頭1.7 m與1.2 m時的效果Fig.8 Detection performances in the distance of1.7 m and 1.2 m
本文提出了一種基于深度圖像的手勢分割和指尖檢測方法,在不使用MSKinect SDK的骨骼數據情況下,能夠快速魯棒地達到預期效果。相對于傳統彩色攝像機,基于深度圖像的方法很好地克服了光照、背景、其他人物的干擾,并能在較遠距離(1.2~1.7 m)內保證檢測效果有效,使手勢識別應用環境大大延伸。另外,本方法可以為基于Kinect的人體肢體動作識別、手勢識別系統提供指尖的定位和運動軌跡數據,以便進行靜態手勢識別和手指動作動態識別。
[1]翁漢良,戰蔭偉.基于視覺的多特征手勢識別[J].計算機工程與科學,2012,(2):123 -127.
[2]于美娟,馬希榮.基于HMM方法的動態手勢識別技術的改進[J].計算機科學,2011,(1):251-252.
[3]RAFAEL B,MIGUEL SD.Skin Color Profile Capture for Scale and Rotation Invariant Hand Gesture Recognition[J].Lectures Notes in Computer Science,2009,5085:81 -92.
[4]曹建秋,王華清,藍章禮.基于改進YCrCb顏色空間的膚色分割[J].重慶交通大學學報:自然科學版,2010,(3):488-492.
[5]于洋.基于手形特征的靜態手勢識別[D].河北工業大學,2007.
[6]SCHWARZ L A,MKHITARYAN A.Estimating Human 3D Pose from Time-of-Flight Images Based on Geodesic Distances and Optical Flow[C].Proceeding on Automatic Face& Gesture Recognition and Workshops(FG 2011),2011 IEEE International Conference,2011.700 -706.
[7]瞿中.基于改進的最大類間方差算法的圖像分割研究[J].計算機科學,2009,(5):276 -278,290.
[8]張登康,郭太良,姚劍敏,等.改進膚色識別參量和輪廓特征相結合的指尖檢測[J].光電子技術,2012,(3):185-189.
[9]OKA K,SATO Y,KOIKE H.Real- time fingertip tracking and gesture recognition[J].Computer Graphics and Applications,2002,22(6):64 -71.
[10]TOMITA A JR,ISHIIR.Hand Shape Extraction from a Sequence of Digitized Gray-Scale Images[C].Proceedings of the 20th International Conference on Industrial E-lectronics,Control and Instrumentation.Bologna:IEEE Computer Society Press,1994.1925- 1930.
[11]曹雛清,李瑞峰,趙立軍.基于深度圖像技術的手勢識別方法[J].計算機工程,2012,(8):16 -18,21.