周濤+余磊+邵武+錢燕
【摘要】 傳統二維圖像基于膚色的手勢識別受背景影響嚴重,針對這一情況,改進了一種基于Kinect三維深度信息的指尖檢測及手勢識別算法。在獲取深度圖像后,利用開源庫OpenNI的手勢生成器獲取手心位置,設定鄰近深度閾值提取手部輪廓,同時跟蹤手部。結合OpenCV相關函數對圖像進行進一步形態學預處理,重置手心后通過道格拉斯-普克算法逼近輪廓,結合凹缺陷特征檢測指尖,識別手勢。實驗結果表明,該方法能在復雜背景下有效的檢測指尖和識別手勢,具有良好的魯棒性。
【關鍵詞】 Kinect openNI OpenCV 指尖檢測 手勢識別 人機交互
引言
在人機交互領域,手勢一直是研究的熱門對象。傳統的手勢識別一般都將二維顏色圖像中膚色和背景的區別分割出手部。傳統的利用膚色進行手部的前景分割,利用人的膚色在YcrCb顏色空間或HSV顏色空間的聚類特性分割手部,但是容易受到光照影響,背景要求較高。本文通過引入Kinect的深度圖像改進了一種有效分割手部,檢測指尖并識別數字手勢的方法。首先利用OpenNI的API獲取大概手心位置,根據手心位置深度信息值設定鄰近深度閾值分割手部區域,結合opencv庫相關函數預處理后,在傳統的凸包檢測上對輪廓做D-P逼近后,檢測凹缺陷特征算法得出指尖數。
一、手勢分割原理
基于深度信息圖像的手勢分割和指尖識別包括深度圖像采集、手勢分割、指尖檢測和結果顯示。通過打開Kinect的深度數據流獲取深度圖像,利用鄰近閾值分割手部,指尖檢測采用基于D-P逼近的凹缺陷檢測法,最后顯示結果。
二、實驗過程
2.1系統整體流程
整個系統的流程圖如圖1所示。
2.2深度圖像獲取
Kinect包括RGB攝像頭、紅外攝像頭和紅外發射器組成的深度傳感器。Kinect相對普通攝像頭的優點就是它的紅外傳感器可以通過黑白光譜的方式來探測空間內的物體到傳感器的距離,生成3D景深圖像。本文中利用Kinect的3D深度傳感器以30幀/每秒獲取圖像,實時獲取手部動態圖像。
2.3 OpenNI獲取手心位置
OpenNI是一個多語言、跨平臺的框架,提供相應的API接口與外接的硬件進行交互。目前OpenNI支持的硬件包括:3D Sensor 、RGB Camera、IR Camera和Audio Device 4類。我們在離Kinect 1m左右的距離內揮動手掌,利用OpenNI中的HandsGenerator類檢測并獲取手心位置。
2.4 手部分割
在檢測和追蹤到手心的位置后,可根據手心的深度值對深度圖像進行分割。在分割前采取中值濾波的方式濾除圖像的噪聲。中值濾波的基本原理是把數字圖像或數字序列中一點的值用該點的一個鄰域中各點值的中值代替,讓周圍的像素值接近的真實值,從而消除孤立的噪聲點。中值濾波對邊緣信息的保護也非常適合本文對濾波的要求。濾波后再利用opencv庫提供的erode()和dilate()對圖像進行形態學處理。
我們對圖像先進行膨脹后腐蝕操作,然后根據公式(1)對手部進行提取。
式(1)中,z為手心的深度,T為設定的手掌閾值,本文中設定閾值為5。經過分割的圖像如圖(2)所示。圖(2)中左為未經處理的圖,右圖為處理過的手部分割圖,對比發現處理后輪廓周圍噪點明顯變少,為進一步輪廓提取打下基礎。
其中中的p,q表示圖像X,Y維空間上的矩,n表示像素個數。
重置手心后對輪廓進行D-P逼近。本文采用道格拉斯-普克算法優化凸包。識別效果如圖3。圖3中表示的數字分別為原圖,深度圖,手部分割二值圖,手部分割圖,輪廓圖和識別結果。
三、實驗結果和分析
實驗環境:PC端CPU Core i5-4200H,內存8GB,操作系統Windows10 。在Visual studio 2013 環境下,利用openNI開源庫結合opencv 2.4.9來進行算法設計。傳感器為Kinect for XBOX360.深度圖像分辨率為640×480。
如圖4所示。本文算法可以有效檢測1到5個指尖。相對于傳統的相機,Kinect所采集的深度信息能通過距離將背景信息去除,只對手部圖像進行處理,很好的克服了環境的變化和背景的干擾等因素。本文將本文從實驗中隨意每個數字取300幀圖像,統計檢測結果,得到表1數據。統計正確定義為伸出手指數和Result顯示結果數相同,否則 錯誤。
四、結論
本文提出了一種基于深度圖像的手指分割和手指檢測方法。利用openNI找到手,利用深度信息分割手部,結合openCV相關函數對圖像進行進一步處理,利用道格拉斯-普克算法優化凸包后,判斷出手指數目,且準確率較高。實驗結果表明,基于深度圖像的方法能夠克服相關環境影響,在優化算法的情況下,準確地識別手勢,魯棒性較高。本文的方法可以為復雜背景下有效識別手勢提供參考。
參 考 文 獻
[1]程文山,談國新.基于膚色分割和 Camshift 的手勢識別研究[D]. 武漢: 華中師范大學,2009
[2]陳艷艷,陳正鳴,周小芹. 基于 Kinect 的手勢識別及在虛擬裝配技術中的應用[J]. 電子設計工程,2013,21(10):4-7.
[3]王勁東,武頻.一種基于Kinect的指尖檢測算法[J].計算機技術與發展,2016,(26)7:14-18.
[4]Douglas D H,Peucker T K.Algorithms for the reduction of the number of points required to represent a line or its caricature[j].The Canadian Cartographer, 1973,10(2):112-122.
[5]鄧瑞,周玲玲,應忍冬. 基于 Kinect 深度信息的手勢提取與識別研究[J]. 計算機應用研究,2013,30(4):1263-1265.
[6]Lee Jaemin, Hironori Takimoto, Hitoshi Yamauchi. A Robust Gesture Recognition based on Depth Data[C]. The 19th Korea-Japan Joint Workshop on Frontiers of Computer Vision. 2013:127-131.
[7]Jagdish L. Raheja, Ankit Chaudhary, Kunal Singal. Tracking of Fingertips and Centres of Palm using Kinect[C]. Computational Intelligence, Modelling & Simulation. 2011:248-252.
[8]李博男,林凡.基于曲率的指尖檢測方法[J].南京航空航天大學學報,2012,44(4):587-591.