基于嵌入式系統(tǒng)實(shí)時(shí)交互的手勢(shì)識(shí)別方法
通過(guò)靜態(tài)手勢(shì)的識(shí)別,使系統(tǒng)能夠?qū)Ρ桓檶?duì)象有一個(gè)基本的理解,為實(shí)現(xiàn)自動(dòng)跟蹤初始化與跟蹤的自動(dòng)恢復(fù)奠定了基礎(chǔ)。首先,手部區(qū)域需要從場(chǎng)景中分割出來(lái)。本文采用一種基于模糊集和模糊運(yùn)算的方法進(jìn)行手的區(qū)域和輪廓提取,通過(guò)對(duì)視頻流中空域和時(shí)域上的背景、運(yùn)動(dòng)、膚色等信息執(zhí)行模糊運(yùn)算,分割出精確的人手。
靜態(tài)手勢(shì)的識(shí)別是基于輪廓特征的識(shí)別,對(duì)分割出來(lái)的人手作邊緣檢測(cè),得到手勢(shì)完整的輪廓邊緣。通過(guò)前面的模糊集合運(yùn)算,能得到圖像的手勢(shì)分割的二值圖。兩個(gè)具有不同灰度值的相鄰區(qū)域之間總存在邊緣。邊緣是灰度值不連續(xù)的結(jié)果,這種不連續(xù)可利用求導(dǎo)方便地檢測(cè)出來(lái)。
這樣就能得到完整的輪廓邊緣。如圖3所示,左邊為手部區(qū)域,右邊為手勢(shì)的輪廓。
接下來(lái)是對(duì)提取的手勢(shì)輪廓作外接多邊形擬合。KenjiOka和YoichiSato的指尖搜索方法是首先在一個(gè)較大的搜索窗口內(nèi)掃描確定20個(gè)候選指尖位置,然后再對(duì)匹配度最大的候選位置周圍的候選進(jìn)行抑制,同時(shí)按一定規(guī)則去除位于指尖中間的部分候選。該方法由于需要對(duì)搜索區(qū)域進(jìn)行多次逐像素的掃描,造成計(jì)算量較大,而且除去手勢(shì)中部候選位置的方法的魯棒性較差。文獻(xiàn)[5]給出了通過(guò)遍歷手勢(shì)輪廓的曲率來(lái)進(jìn)行之間位置搜索的方法,通過(guò)對(duì)手勢(shì)按輪廓順序進(jìn)行定長(zhǎng)掃描的方法,可以找出指尖并做出輪廓線的外接多邊形。但是這種查找方式需要遍歷輪廓線的每個(gè)點(diǎn),而且對(duì)每個(gè)點(diǎn)還需要作除法運(yùn)算,這使得算法的計(jì)算量太大,而且在搜索指尖時(shí),當(dāng)受到光線變化使得輪廓線出現(xiàn)很多突起的邊緣時(shí),使得識(shí)別工作出現(xiàn)困難。本文提出了一種查找外接邊的搜索方法,通過(guò)對(duì)手勢(shì)輪廓按輪廓點(diǎn)順序進(jìn)行定長(zhǎng)掃描,將手勢(shì)輪廓線的外接多邊形擬合出來(lái),同時(shí)將滿足定義1的手勢(shì)輪廓外接凸邊形缺陷結(jié)構(gòu)設(shè)為手勢(shì)識(shí)別的判斷特征。
2.1.1手勢(shì)缺陷圖
定義1手勢(shì)缺陷圖是指由手勢(shì)輪廓線外接多邊形以及多邊形各條邊所對(duì)應(yīng)的谷底(depthpoint)所組成的特征描述方程。谷底是指外接多邊形的邊與該邊所對(duì)應(yīng)的輪廓線上距離邊最遠(yuǎn)的輪廓點(diǎn)。定義手勢(shì)缺陷圖的數(shù)據(jù)結(jié)構(gòu)如下:
TypedefstructCvConvexityDefect{
CvPoint*start;//缺陷開始的輪廓點(diǎn)
CvPoint*end;//缺陷結(jié)束的輪廓點(diǎn)
CvPoint*depth_point;//缺陷中距離凸性最遠(yuǎn)的輪廓點(diǎn)
Floatdepth;//谷底距離凸性的深度
}CvConvexityDefect;
如圖4所示,手勢(shì)輪廓缺陷圖能很好地描述各種手勢(shì),通過(guò)對(duì)手勢(shì)輪廓線外接多邊形的邊數(shù)以及邊所對(duì)應(yīng)的谷底深度,可以將手勢(shì)缺陷圖映射到不同的手勢(shì)。其中A、B、C、D、E、F、G為手勢(shì)輪廓線的外接多邊形的各條邊,Da、Db、Dc、Dd、De、Df、Dg為手勢(shì)缺陷圖中的谷底到對(duì)應(yīng)邊的深度。
為了得到手勢(shì)輪廓缺陷圖,首先必須對(duì)手勢(shì)輪廓進(jìn)行多邊形擬合,得出它的外接多邊形。本文提出了一種根據(jù)手勢(shì)輪廓上相鄰兩點(diǎn)間的凹凸性來(lái)進(jìn)行擬合,通過(guò)一次遍歷輪廓上的點(diǎn),對(duì)以下方程進(jìn)行判定,將適當(dāng)?shù)狞c(diǎn)剔除,剩下的點(diǎn)即為外接多邊形的候選定點(diǎn):
by=nexty-cury(1)
ay×bx-ax×by(2)
ax=pcur.x-pprev.x,ay=pcur.y-pprev.y
bx=pnext.x-pcur.x,by=pnext.y-pcur.y
其中:pcur為當(dāng)前遍歷的輪廓線上的點(diǎn);pprev、pnext分別表示當(dāng)前點(diǎn)的前一個(gè)點(diǎn)和后一個(gè)點(diǎn);ax、ay分別為當(dāng)前點(diǎn)和前一點(diǎn)的x和y坐標(biāo)值差;bx、by分別為當(dāng)前點(diǎn)和后一點(diǎn)指尖的x和y坐標(biāo)值差。
基于輪廓線凹凸形的擬合算法流程如下:
a)將所有的輪廓線上的點(diǎn)按x坐標(biāo)值大小排序,并找出所有的點(diǎn)中y坐標(biāo)的最大最小值maxY和minY.
b)將排序后的輪廓點(diǎn)劃分為四部分:首先按照y坐標(biāo)將輪廓線分為上下兩個(gè)部分,將上半部分以maxY所在的x坐標(biāo)(記為Xmaxy)劃分為兩個(gè)部分,分別記為topLeft〈左上〉和topRight〈右上〉;將下半部分以minY所在的x坐標(biāo)(記為Xminy)劃分為兩個(gè)部分,分別記為bottomLeft〈左下〉和bottom-Right〈右下〉。
c)分別對(duì)前一步劃分的四個(gè)部分(topLeft,topRight,bottomLeft,bottomRight)進(jìn)行遍歷:對(duì)區(qū)域topLeft將滿足式(1)0,式(2)>0的點(diǎn)剔除;對(duì)區(qū)域TopRight將滿足(1)0,式(2)0的點(diǎn)剔除;對(duì)區(qū)域bottomLeft將滿足式式(1)>0,式(2)>0的點(diǎn)剔除;對(duì)區(qū)域bottomRight將滿足式(1)>0,式(2)>0的點(diǎn)剔除。剔除后剩下的點(diǎn)即為手勢(shì)輪廓線外接多邊形的頂點(diǎn)。
手勢(shì)缺陷圖的谷底以及谷底深度的求解是建立在擬合外接多邊形基礎(chǔ)上,還需要對(duì)外接多邊形的每條邊所對(duì)應(yīng)的輪廓線再進(jìn)行一次遍歷,并將滿足以下方程的最大值求出即是該邊所對(duì)應(yīng)的谷底:
其中:scale為單位化量值;hull_cur和hull_next分別為外接多邊形當(dāng)前遍歷的邊和下一條邊;dx0、dy0分別為外接多邊形當(dāng)前邊的x和y坐標(biāo)的差值;dx、dy分別為當(dāng)前遍歷的輪廓線上的點(diǎn)與hull_cur點(diǎn)之間x和y坐標(biāo)的差值;depth為遍歷點(diǎn)與對(duì)應(yīng)邊之間的距離,它的最大值即為該邊對(duì)應(yīng)的谷底深度,相應(yīng)的點(diǎn)為谷底。
通過(guò)以上搜索可以將手勢(shì)輪廓缺陷圖的特征值找出來(lái),接下來(lái)便可以將缺陷圖的特征值(多邊形與谷底的關(guān)系)與已建立的庫(kù)中的特征值相比較,對(duì)手勢(shì)進(jìn)行匹配,將手勢(shì)輪廓缺陷圖映射到不同的手勢(shì)上去。
2.1.2手勢(shì)匹配
手勢(shì)的匹配主要是基于手勢(shì)缺陷圖的匹配,手勢(shì)缺陷圖的特征值由外接多邊形以及谷底的位置和深度組成,如圖5所示。
根據(jù)多邊形的邊數(shù)以及各條邊的程度可以確定手指的數(shù)量,而谷底的深度和位置可以確定手指的關(guān)系和位置。由于這是根據(jù)手勢(shì)的整體圖像來(lái)進(jìn)行分析,所以具有一定的魯棒性,當(dāng)光線變化而導(dǎo)致手勢(shì)圖出現(xiàn)差別時(shí),并不會(huì)導(dǎo)致手勢(shì)缺陷圖的變化。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論