基于深度信息的指尖檢測方法
【專利摘要】基于深度信息的指尖檢測方法,指尖是指從手心出發(fā)經過指根點的測地路徑的終點,檢測方法包括如下步驟:1、手部分割及手心定位;2、指根定位:包括初始階段的指根檢測和手掌平面旋轉時的指根位置估計;3、指尖檢測:包括圖模型建立、手指定位和指尖定位;本發(fā)明檢測方法無論對于靜止的手勢還是運動的手勢都能達到較高的識別率,且能夠做到實時檢測;同時,當手掌與鏡頭成一定角度時,也能達到較高的檢測精度;通過計算指尖位置達到手勢識別的目的,實現了穩(wěn)定準確的指尖位置檢測,并且可通過計算手掌法向量實現多角度指尖檢測。
【專利說明】基于深度信息的指尖檢測方法
【技術領域】
[0001]本發(fā)明屬于基于視覺的手勢識別【技術領域】,具體涉及一種基于深度信息的指尖檢測方法。
【背景技術】
[0002]目前基于視覺的手勢識別方法主要分為三類:基于表面特征的方法,基于動作的方法,基于輪廓分析的方法。然而由于普通視頻中背景和光照變化較為復雜,這些方法難以獲得精確魯棒的手勢識別結果。
[0003]近些年隨著深度傳感器(以Kinect為主)的流行,也為手勢識別提供了另一種可能。深度傳感器利用紅外線探知場景深度并輸出一系列深度圖。深度圖中不同像素值代表不同的場景深度,因此不存在背景或光照變化等不確定因素。相比普通圖像,可更簡便地提取有用信息。
[0004]利用深度信息識別手勢的方法大致可分為兩類:基于輪廓信息的方法和基于深度分析的方法。
[0005]基于輪廓信息的方法。這類方法首先利用深度差異分割出目標一手。由于在進行人機交互時,人手一般是離鏡頭最近的目標,并且與背景深度有一個較大的差值。因此可簡單設置閾值分割出人手。這類方法的第二步則是抽取手部輪廓,利用輪廓描述方法,如傅里葉描述子或凸包描述等區(qū)別不同的手形,從而實現手勢識別。這種方法充分利用了深度值穩(wěn)定可靠的特點,但它往往把深度值完全等同于灰度值,從而沒有充分利用深度信息。
[0006]基于深度分析的方法。這類方法將深度值看做物體的一個物理屬性。目前比較流行的做法有兩種。第一種是模型匹配。即制作一系列不同手勢的三維手部模型,并搜索與當前手勢最匹配的那個模型。這種方法精度非常高,但主要缺點是比較耗時,通常需要GPU加速。第二種是測地距離的方法。這種方法將目標的深度圖看做物體表面在三維空間的位置信息。它首先將深度圖轉化為圖模型,然后利用最短路徑算法搜索手心到各手部點的最短路徑??紤]到指尖點是手指的末端,因此指尖點對應的正是最短路徑的極大值。這里的最短路徑其實是沿著物體表面的路徑,因此即便當手形變化時也十分魯棒。其主要缺點是容易受噪聲干擾。
[0007]基于視覺的手勢識別的研究已持續(xù)多年,但由于手勢的靈活多變,加上各種不確定因素的干擾,到目前還沒有一種實時、精確、魯棒的方法。因此該領域的研究還將持續(xù)一段時間。
【發(fā)明內容】
[0008]為了解決上述現有技術存在的問題,本發(fā)明的目的在于提供一種基于深度信息的指尖檢測方法,本方法通過計算指尖位置達到手勢識別的目的,實現了穩(wěn)定準確的指尖位置檢測,并且可通過計算手掌法向量實現多角度指尖檢測。
[0009]為達到以上目的,本發(fā)明采用如下技術方案:[0010]基于深度信息的指尖檢測方法,包括如下步驟:
[0011]步驟1:手部分割及手心定位:首先使用OpenNI函數庫確定手心大致位置,然后通過手心點深度推算出手部的大致深度范圍,再分割出手;將手心點定義為手部區(qū)域內最大內接圓的圓心點,利用距離變換原理對手心定位;
[0012]步驟2:指根定位:包括初始階段的指根檢測和手掌平面旋轉時的指根位置估計;
[0013]I)初始階段的指根檢測:在初始階段,要求用戶手掌平面與鏡頭平面平行,通過深度圖分割出手部并使用輪廓分析檢測出兩個手指間的“凹坑”。相鄰兩個“凹坑”間連線的中點即是指根;對于大拇指、食指和小拇指來說,首先檢測出其中一個“凹坑”的位置,然后以指尖為對稱中心,獲得對稱面的“凹坑”位置,即大拇指、食指和小拇指的指跟;
[0014]2)手掌平面旋轉時的指根位置估計:假設手掌平面是一個剛體,那么指根坐標在以這個平面為XOY平面建立起來的坐標系內固定不變,通過計算手掌平面法向量再利用坐標變換原理即可得到指根在手掌平面旋轉時的坐標;
[0015]步驟3:指尖檢測:包括圖1旲型建立、手指定位和指尖定位;
[0016]I)圖模型建立:獲得指根位置坐標后,將手部的空間點云的深度圖轉化為一個圖模型,各空間像素點作為其中的一個頂點,當兩個頂點互為鄰域且三維距離小于Icm時,兩個頂點間有邊相連;這個圖模型表征了目標在空間上的表面像素分布;然后以手心為源點,通過Dijkstra最短路徑算法,計算出手心到所有輪廓點的最短路徑及其距離;
[0017]2)手指定位:將手部的像素點分為六類,每一類的標簽為Ih e {T, I,M,R,P,N},分別表示大拇指、食指、中指、無名指、小拇指和非手指點,對于五個手指,其對應的指根點為Fb={Tb, Ib, Mb, Rb, PbI ;具體算法如下:
[0018]①將手部點V賦值為一個臨時參量Vt ;
[0019]②對于臨時參量Vt,根據前驅數組得到其前驅點Vf ;
[0020]③將前驅盧 > 賦值為臨時參量vt;
[0021]④若臨時參量Vt位于某一指根Xb (Xb e Fb)的鄰域內,
[0022]則手部點V 的類別 Iv=X (X e {T, I, M, R, P})
[0023]返回 Iv ;
[0024]⑤若臨時參量Vt等于手心Cp,
[0025]則手部點V的類別Iv=N
[0026]返回Iv ;
[0027]⑥否則,
[0028]返回步驟②;
[0029]3)指尖定位:先剔除各候選區(qū)域內測地距離較小的點,然后對于剩余點求幾何中心,該幾何中心即是指尖點。
[0030]所述手掌平面旋轉的旋轉角度限于:
[0031]-60°≤θχ≤60°,-60°≤Θ y ≤ 60。,-10°≤θ z ≤ 10。
[0032]其中:θχ、0y> θζ分別為手掌平面在X軸、Y軸、Z軸的旋轉角度。
[0033]本發(fā)明和現有技術相比,具有如下優(yōu)點:
[0034]1、本發(fā)明檢測方法無論對于靜止的手勢還是運動的手勢都能達到較高的識別率,且能夠做到實時檢測。同時,當手掌與鏡頭成一定角度時,也能達到較高的檢測精度;通過計算指尖位置達到手勢識別的目的,實現了穩(wěn)定準確的指尖位置檢測,并且可通過計算手掌法向量實現多角度指尖檢測。
[0035]2、在實驗階段,使用指尖檢出位置與真實位置之間的距離作為誤差來衡量檢測精度。經過測試統(tǒng)計,當手掌平面與鏡頭平行時,各手指(大拇指、食指、中指、無名指、小拇指)指尖的平均誤差分別為3.25mm、4.70mm、4.95mm、4.43mm、3.94mm。這一實驗結果的精度遠遠超過現有方法。
【專利附圖】
【附圖說明】
[0036]圖1為本發(fā)明檢測方法流程圖。
[0037]圖2為初始階段指跟檢測圖,其中,圖2a為輪廓點到手心的距離,圖2b為圖2a對應的時序信號圖。
[0038]圖3為初始階段指跟檢測結果圖,其中,圖3a為指根位置圖,圖3b為小拇指指根位置獲取圖。
[0039]圖4為手掌三維點云圖。
[0040]圖5為獲得手掌平面法向量不意圖。
[0041]圖6為手指定位算法結果圖。
[0042]圖7為指尖定位圖,其中:圖7a為不冋手指指尖的候選區(qū)域,圖7b為指尖定位圖,圖7c為指尖和指根定位圖。
[0043]圖8為本發(fā)明檢測方法部分實驗結果圖。
【具體實施方式】
[0044]以下結合附圖及具體實施例對本發(fā)明作進一步的詳細描述。
[0045]如圖1所示,本發(fā)明基于深度信息的指尖檢測方法,包括如下步驟:
[0046]步驟1:手部分割及手心定位:首先使用OpenNI函數庫確定手心大致位置,然后通過手心點深度推算出手部的大致深度范圍,再分割出手;將手心點定義為手部區(qū)域內最大內接圓的圓心點,利用距離變換原理對手心定位;
[0047]步驟2:指根定位:包括初始階段的指根檢測和手掌平面旋轉時的指根位置估計;
[0048]I)初始階段的指根檢測:在初始階段,要求用戶手掌平面與鏡頭平面平行,通過深度圖分割出手部并使用輪廓分析檢測出兩個手指間的“凹坑”,相鄰兩個“凹坑”間連線的中點即是指根;對于大拇指、食指和小拇指來說,首先檢測出其中一個“凹坑”的位置,然后以指尖為對稱中心,獲得對稱面的“凹坑”位置,即大拇指、食指和小拇指的指跟;
[0049]2)手掌平面旋轉時的指根位置估計:假設手掌平面是一個剛體,那么指根坐標在以這個平面為XOY平面建立起來的坐標系內固定不變,通過計算手掌平面法向量再利用坐標變換原理即可得到指根在手掌平面旋轉時的坐標;
[0050]步驟3:指尖檢測:包括圖|旲型建立、手指定位和指尖定位;
[0051]I)圖模型建立:獲得指根位置坐標后,將手部的空間點云的深度圖轉化為一個圖模型,各空間像素點作為其中的一個頂點,當兩個頂點互為鄰域且三維距離小于Icm時,兩個頂點間有邊相連;這個圖模型表征了目標在空間上的表面像素分布;然后以手心為源點,通過Dijkstra最短路徑算法,計算出手心到所有輪廓點的最短路徑及其距離;
[0052]2)手指定位:將手部的像素點分為六類,每一類的標簽為Ih e {T, I,M,R,P,N},分別表示大拇指、食指、中指、無名指、小拇指和非手指點,對于五個手指,其對應的指根點為Fb={Tb, Ib, Mb, Rb, PbI ;具體算法如下:
[0053]①將手部點V賦值為一個臨時參量Vt ;
[0054]②對于臨時參量Vt,根據前驅數組得到其前驅,I '
[0055]③將前驅點< 賦值為臨時參量Vt ;
[0056]④若臨時參量Vt位于某一指根Xb (Xb e Fb)的鄰域內,
[0057]則手部點V 的類別 Iv=X (X e {T, I, M, R, P})
[0058]返回Iv ;
[0059]⑤若臨時參量Vt等于手心Cp,
[0060]則手部點V的類別Iv=N
[0061]返回Iv;
[0062]⑥否則,
[0063]返回步驟②;
[0064]3)指尖定位:先剔除各候選區(qū)域內測地距離較小的點,然后對于剩余點求幾何中心,該幾何中心即是指尖點。
[0065]所述手掌平面旋轉的旋轉角度限于:
[0066]-60。( θχ<60。,_60。( Θ y 大于 60。,_10。( θ z 大于 10。
[0067]其中:θχ、0y> θζ分別為手掌平面在X軸、Y軸、Z軸的旋轉角度。
[0068]下面詳細說明本發(fā)明檢測方法各步驟:
[0069]步驟1:手部分割及手;L.、定似:
[0070]指尖檢測的第一步是從場景中分割出手,并計算手心位置,便于后續(xù)操作。由于本發(fā)明方法著重解決的問題是指尖檢測,因此對于手部檢測部分我們采用了一個比較簡單的方法。首先使用OpenNI函數庫確定手心大致位置,然后通過手心點深度推算出手部的大致深度范圍,再分割出手。
[0071]OpenNI輸出的手心點過于粗略,本發(fā)明中,我們將手心點定義為手部區(qū)域內最大內接圓的圓心點。因此可以利用距離變換原理解決這一問題。
[0072]步驟2:指根定位:
[0073]指根定位的主要目的是計算指根位置,為后續(xù)的指尖檢測提供先驗信息。這一步驟包括初始階段的指根檢測和手掌平面旋轉時的指根位置估計這兩方面內容。
[0074]I)初始階段的指根檢測:
[0075]在初始階段,要求用戶手掌平面與鏡頭平面平行,然后利用輪廓分析檢測指根。這里借鑒傅里葉描述子的思想,以手心Cp為參考點,依次序計算輪廓上各點到Cp的歐氏距離,并將它表示成一列時序信號,如圖2a和圖2b所示。
[0076]由圖2b不難看出信號的極大值對應的是指尖,極小值對應的是兩手指間的“凹坑”。通過進一步觀察發(fā)現兩相鄰“凹坑”連線的中點即是指根,如圖3a所示,因此指根位置可由“凹坑”位置估算得到。[0077]但同時對于大拇指、食指和小拇指來說,其中一個“凹坑”無法直接獲得。對于這類情況首先檢測出其中一個“凹坑”的位置,然后以指尖為對稱中心,獲得對稱面的“凹坑”位置,如圖3b所示。
[0078]2)手掌平面旋轉時的指根位置估計:
[0079]本發(fā)明的目標在于多角度實現指尖檢測。而當手掌旋轉時,上述基于輪廓分析的指根檢測方法由于輪廓遮擋的原因無法有效工作,因此需要采用其他方法獲取指根位置。
[0080]本發(fā)明針對的手掌旋轉角限于:
[0081]-60。( θχ<60。,_60。( Θ y ≤ 60。,_10。( θ z ≤ 10。 (I)
[0082]其中:θχ、0y> θζ分別為手掌平面在X軸、Y軸、Z軸的旋轉角度。
[0083]因此一般不允許手掌平面內的旋轉。
[0084]首先建立手部的三維點云,然后以手心Cp為坐標原點建立一個手掌坐標系,其中手掌平面為XOY平面,如圖4所示,其中XpYpZp指示手掌坐標系,而指示真實世界坐標系。顯然,手掌按照公式(I)旋轉時,指根坐標在XpYpZp坐標系下是固定不變的。因此,通過計算XpYpZp到的坐標變換,即可由手掌坐標系中的指根位置推算得到真實世界坐標系下的指根位置。
[0085]假設指根在真實世界坐標系下的坐標為(?4),而在手掌坐標系下的坐標為
這一參數由初始檢測階段得到。則這兩個坐標間的推算關系為:
【權利要求】
1.基于深度信息的指尖檢測方法,其特征在于:指尖是指從手心出發(fā)經過指根點的測地路徑的終點,檢測方法包括如下步驟: 步驟1:手部分割及手心定位:首先使用OpenNI函數庫確定手心大致位置,然后通過手心點深度推算出手部的大致深度范圍,再分割出手;將手心點定義為手部區(qū)域內最大內接圓的圓心點,利用距離變換原理對手心定位; 步驟2:指根定位:包括初始階段的指根檢測和手掌平面旋轉時的指根位置估計; 1)初始階段的指根檢測:在初始階段,要求用戶手掌平面與鏡頭平面平行,通過深度圖分割出手部并使用輪廓分析檢測出兩個手指間的“凹坑”,相鄰兩個“凹坑”間連線的中點即是指根;對于大拇指、食指和小拇指來說,首先檢測出其中一個“凹坑”的位置,然后以指尖為對稱中心,獲得對稱面的“凹坑”位置,即大拇指、食指和小拇指的指跟; 2)手掌平面旋轉時的指根位置估計:假設手掌平面是一個剛體,那么指根坐標在以這個平面為XOY平面建立起來的坐標系內固定不變,通過計算手掌平面法向量再利用坐標變換原理即可得到指根在手掌平面旋轉時的坐標; 步驟3:指尖檢測:包括圖|吳型建立、手指定位和指尖定位; 1)圖模型建立:獲得指根位置坐標后,將手部的空間點云的深度圖轉化為一個圖模型,各空間像素點作為其中的一個頂點,當兩個頂點互為鄰域且三維距離小于Icm時,兩個頂點間有邊相連;這個圖模型表征了目標在空間上的表面像素分布;然后以手心為源點,通過Dijkstra最短路徑算法,計算出手心到所有輪廓點的最短路徑及其距離; 2)手指定位:將手部的像素點分為六類,每一類的標簽為Ihe {T, 1,]?,1?,?,吣,分別表示大拇指、食指、中指、無名指、小拇指和非手指點,對于五個手指,其對應的指根點為Fb={Tb, Ib, Mb, Rb, P bI ;具體算法如下: ①將手部點V賦值為一個臨時參量Vt; ②對于臨時參量vt,根據前驅數組得到其前驅> ③將前驅點<賦值為臨時參量Vt; ④若臨時參量vt位于某一指根Xb(XB e Fb)的鄰域內, 則手部點V的類別Iv=X(X e {T, I, M, R, P}) 返回Iv; ⑤若臨時參量vt等于手心Cp, 則手部點V的類別Iv=N 返回Iv ; ⑥否則, 返回步驟②; 3)指尖定位:先剔除各候選區(qū)域內測地距離較小的點,然后對于剩余點求幾何中心,該幾何中心即是指尖點。
2.根據權利要求1所述的基于深度信息的指尖檢測方法,其特征在于:所述手掌平面旋轉的旋轉角度限于:
其中:θ χ、Θ y、θ z分別為手掌平面在X軸、Y軸、Z軸的旋轉角度。
【文檔編號】G06K9/00GK103488972SQ201310407231
【公開日】2014年1月1日 申請日期:2013年9月9日 優(yōu)先權日:2013年9月9日
【發(fā)明者】宋永紅, 俞雨, 張元林 申請人:西安交通大學