一种自然手势识别方法与流程

文档序号:12887557阅读:337来源:国知局
一种自然手势识别方法与流程

本发明涉及机器视觉领域,特别是一种自然手势识别方法。



背景技术:

现行的手势识别大都是基于pc平台,并借助于传感设备(如数据手套等)来获取手势特征,与系统预定义的手势库比对,以确定手势类型,进而执行相应的操作指令来控制系统。随着移动设备的普及,这种交互方式越来越不适用,迫切需要一种不借助任何设备,只根据摄像头捕获的手势图像就能知道用户意图的交互方式,进而控制系统发出相应的指令来达到用户所希望的目的。



技术实现要素:

本发明所要解决的技术问题是,针对现有技术不足,提供一种自然手势识别方法。

为解决上述技术问题,本发明所采用的技术方案是:一种自然手势识别方法,其特征在于,包括以下步骤:

1)获取手部图像的rgb图像,将rgb图像转换至ycrcb空间,然后将ycrcb空间的图形非线性变换至色彩空间ycr’cb’,建立椭圆肤色模型;

2)利用上述椭圆肤色模型遍历图像中所有像素,若像素坐标(cr’,cb’)在椭圆内部,则判定该像素点(cr’,cb’)为肤色点,否则(cr’,cb’)为非肤色点;

3)提取出肤色图像中手势区域的外围轮廓,并根据人的肤色范围值将手势区域的外围轮廓转换为二值图像,并获取手掌轮廓曲线;

4)将上述二值图像经过欧式距离变换,得到距离灰度图;

5)利用上述距离灰度图,计算手掌重心坐标;

6)利用上述手掌轮廓曲线获得精简轮廓s,计算轮廓s中点集的凸包h,通过比较h中各像素点的x坐标、y坐标,提取手部的关键点,即顶端点、左端点、右端点和底端点,结合手掌重心坐标,根据四个端点坐标拟合出包围手部的矩形,并以此为掩码,与所述二值图像进行与运算,最后的计算结果即为手部图像;

7)利用上述手部图像计算n个特征参数进行手势识别。

步骤1)中,利用下式将rgb图像转换至ycrcb空间:

其中,r——红色值;g——绿色值;b——蓝色值。y——亮度;cb——

蓝色分量值;cr——红色分量值。

所述椭圆肤色模型表达式为:

其中,cr’、cb’——色彩空间转换后的红色分量值和蓝色分量值;cx、cy——色彩空间ycr’cb’的cr’cb’平面上的椭圆中心;a、b——椭圆的长、短半轴;

θ——椭圆在平面内的倾斜角度。

本发明中,a=25.39,b=14.03,cx=1.60,cy=2.41,θ=2.53,cx=109.38,cy=152.02。

步骤5)中,手掌重心坐标(k,l)的计算公式为:

其中,i(i,j)表示图像像素坐标,m、n分别表示图像的宽和高。

为消除手掌重心计算过程中手指和手臂的影响,通过实验确定距离灰度图的距离灰度值ξ为150~230。

步骤7)的具体实现过程包括:

1)提取以下特征:特征f1:包围手部的矩形r的面积s与手势图像的轮廓面积a的比值,f1=s/a;特征f2:r的面积s与内切圆面积c的比值,f2=s/c;特征f3:r的长宽比,f3=h/w;特征f4:r的旋转角θ,f4=rθ;

2)若手势图像的特征f1在区间psa=[1.8088,1.9554]内,则判定手势为开手掌;若手势图像的特征f2取值在区间psc1=[1.5568,2.0951]内,则判定手势为拳头;否则,若手势特征f2在区间psc2=[2.1341,3.2045]内,则判定手势为闭手掌,或者左摆手,或者右摆手;若手势特征f3取值phw1=[1.53,2.38],且f4为rθ1=[-65,-15),则判定手势为左摆手;若手势特征f3取值phw2=[0.42,0.65],且f4为rθ2=(-75,-25],则判定手势为右摆手;否则,若手势特征f4为rθ3=[-15,0]∪[-89,-75],则判定手势为闭手掌;若所提取的手势特征值为其他情况,则均判定为无效手势。

与现有技术相比,本发明所具有的有益效果为:本发明不需要借助外部设备,只根据摄像头捕获的手势图像就能识别用户的交互意图,即实现自然的手势识别方法;而且本发明的时间复杂度和空间复杂度都比较低,适合于移动平台硬件资源相对欠缺的实际情况。

附图说明

图1为普通光照实时检测效果,其中,(a)原始图像;(b)rgb模型;(c)ycrcb模型;(d)加入亮度补偿的椭圆模型;

图2为强光环境实时检测效果,其中,(a)原始图像;(b)rgb模型;(c)ycrcb模型;(d)加入亮度补偿的椭圆模型;

图3为昏暗环境实时检测效果,其中,(a)原始图像;(b)rgb模型;(c)ycrcb模型;(d)加入亮度补偿的椭圆模型;

图4为提取手势轮廓,其中,(a)原图像;(b)二值图像;(c)所有轮廓;(d)最大轮廓;(e)最大轮廓填充图;

图5手势二值图像;

图6距离灰度图像;

图7不同灰度阈值下的二值化效果,其中(a)~(i)分别对应阈值ξ=70、100、140、150、180、210、230、240、250;

图8为系统预定义手势,其中(a)~(e)分别对应开手掌、闭手掌、拳头、左摆手、右摆手;

图9为距离变换法提取重心及半径,(a)拳型,(b)单手指,(c)双手指,(d)多手指;

图10手部关键点提取;

图11为手部提取示意图,(a)手势图像;(b)手势轮廓;(c)关键点拟合矩形;(d)手部提取效果图;

图12手势判别决策模型;

图13基本手势识别效果,其中(a)~(e)分别对应拳头、开手掌、闭手掌、左摆手、右摆手;

图14为五种手势在手机上的识别效果;(a)开手掌表示放大;(b)拳头表示复原;(c)闭手掌表示缩小;(d)左摆手向左切换;(e)右摆手表示向右切换;

具体实施方式

本发明理论来源:第一步,利用移动设备(如手机)拍摄到带有手势的图像,经过ycrcb空间加入亮度补偿的椭圆肤色模型进行肤色区域的提取,获取手势二值图像,查找二值图像中的最大轮廓,舍弃小区域肤色图,得到手势最大轮廓。

第二步,改进现有hu矩(几何不变矩)计算整个手掌重心的做法,采用欧氏距离变换算法来计算手掌重心点,并通过实验,确定灰度阈值ξ为150-230时,能够较好的消除噪声影响。

第三步,提出利用4个具有手势图像的旋转、平移、缩放不变性的特征参数进行拳头、开手掌、闭手掌、左摆手和右摆手五种基本手势的识别。

特征f1:r的面积s与轮廓面积a的比值f1=s/a;

特征f2:r的面积s与内切圆面积c的比值f2=s/c;

特征f3:r的长宽比f3=h/w;

特征f4:r的旋转角θf4=rθ。

其中r表示手势最小外接矩形;a表示手势轮廓面积;c表示手势轮廓内切圆面积。

1、获取手势最大轮廓

利用人的肤色与背景颜色的不同来获取手势最大轮廓,肤色检测方法有很多,考虑到实际使用过程中,会有各种光照环境,而光照不同对肤色的影响比较大,直接使用rgb模型会产生较大误差。为此,本发明采用改进的基于y(代表亮度)cr(代表红色色度)cb(代表蓝色色度)空间的加入亮度补偿的椭圆肤色检测模型。具体步骤如下:

首先,利用式(1)将摄像头获取的rgb图像转换至ycrcb空间,利用式(2)、式(3)、式(4)将ycrcb非线性变换至色彩空间ycr’cb’。其中,cr(y)、cb(y)表示将ycrcb颜色空间中色度分量cr、cb记作亮度y的函数;同样,表示经非线性变换后的空间色度分量函数。

式(2)中,kl、kh为常数,表示非线性色彩变换函数的分段阈值,分别取值:kl=125,kh=188;ymin、ymax表示肤色聚类区域中亮度y的边界值,根据实验数据获得,分别取值:ymin=16,ymax=235。

式(3)中,wci(y)表示在crcb空间中肤色区域的宽度;其wci、wlci和whci分别为:wcr=38.76,wcb=46.97,wlcr=20,wlcb=23,whcr=10,whcb=14,均由实验数据获得。

式(4)表示ycr’cb’与之间的非线性色彩变换函数,其变换时色度分量ci’由kl和kh决定。经非线性变换后,色彩空间ycr’cb’对亮和暗的肤色区域检测具有较强的鲁棒性,而且,根据hsu的研究结果可知,cr’cb’子空间中的肤色区域可以近似用椭圆肤色模型描述,如式(5)、式(6)所示。

其中,cx、cy表示cr’cb’平面上的椭圆中心,a、b为椭圆的长、短半轴,θ表示椭圆在平面内的倾斜角度。根据hsu等人的实验数据可知:a=25.39,b=14.03,ecx=1.60,ecy=2.41,θ=2.53(弧度),cx=109.38,cy=152.02,以上各值均由cr’cb’空间的肤色区域计算得到。

经过ycr’cb’颜色空间的转换后,就可以利用所建立的椭圆模型对图像中的肤色区域进行检测判定,即遍历图像中所有像素,若像素坐标(cr’,cb’)在椭圆内部(含边界),则判定其为肤色点,否则为非肤色点。

最后借助opencv提供的轮廓查找函数findcontours(),提取出肤色图像中手势区域的外围轮廓。并根据人的肤色范围值y-(20,255),cr-(132,174),cb-(40,130)将手势区域轮廓图转换为二值图像。

针对上述常用肤色模型检测方法进行实验效果对比,以验证本文所选算法——基于亮度补偿的椭圆肤色检测模型的优越性。其实验环境分为:①普通(正常)光照环境;②强光环境;③昏暗环境三种情况,各模型算法的肤色检测效果如图1、图2、图3所示。

由上述3种不同环境下的实验结果可知,rgb肤色模型检测算法受光照强度影响较大;ycrcb肤色算法与改进的加入亮度补偿的椭圆肤色模型算法相比也有较为明显的差异,即改进的加入亮度补偿的椭圆肤色模型算法在不同光照条件下的检测效果更加稳定,能够有效去除由光照产生的阴影区域。综上所述,采用基于ycrcb空间的加入亮度补偿的椭圆模型进行图像肤色区域的检测,能去除不同光照对肤色区域提取的影响。

经过肤色提取后,将该图像转换为二值图像,去除噪声,得到较为纯净的手势轮廓,并对轮廓内部进行填充,如图4所示。

2、获取手掌重心

获得了较为纯净的手势轮廓及其对应的二值图像后,要分析提取手掌重心,为手势识别做准备。通常的做法是借助hu矩(几何不变矩)计算整个手部的重心,并近似作为手掌重心,但该方法只适用于拳型或者只有单手指伸出的情况,且无手臂等的干扰,倘若有多个手指伸出或者手臂的干扰,所计算得到的手掌重心将严重偏离实际位置。为此本发明采用基于距离变换的重心提取算法,该算法能够有效避免相关噪声的影响,较为精确的提取手掌重心。

所谓距离变换就是二值图像中非零像素点到最近的零像素点的距离,其距离值表示为对应灰度图像中像素的灰度值。距离的具体计算方法有两大类:非欧氏距离和欧氏距离。非欧氏距离的计算复杂度虽然较低,但精度不高,为此,本发明采用欧氏距离变换算法。

欧氏距离的公式化定义:设二维平面中有两点p(x,y),q(s,t),则两点间的欧氏距离可表示为式(7):

d(p,q)=[(x-s)2+(y-t)2]1/2(7)

欧氏距离变换的公式表示:设一副m×n的二值图像a,其对应的二维数组p[m,n]=[pxy],pxy表示坐标为(x,y)的像素点,令pxy=0表示图像的背景点,pxy=1表示图像的前景点,即目标点,则有b={(x,y)|pxy=0},f={(i,j)|pij=1},b、f分别表示图像的背景、前景像素集合,计算a的欧氏距离变换等价于求解集合f中所有像素(i,j)到集合b中像素的最短欧氏距离,即

dij=min{dist[(i,j),(x,y)],(x,y)∈b}(8)

式(8)中dist[(i,j),(x,y)]=[(i-x)2+(j-y)2]1/2。手势二值图像(图5)经过欧氏距离变换后,得到其距离灰度图,如图6所示。

接下来,利用得到的距离灰度图像来完成手掌重心的计算。根据人体形态特征可知,通常情况下,手掌区域的宽度要大于手臂(手腕)的宽度,而且,通过观察图6也可以清晰地发现,距离手部骨架越远亮度越暗,其像素灰度值越小,因此,为了得到更精确的手掌重心坐标,必须消除手掌重心计算过程中手指和手臂的影响,所以通过实验确定最佳灰度阈值ξ,如图7所示。

阈值ξ为150-230时,能够较好的消除噪声影响,且如图7所示,当阈值ξ>230时,肤色区域面积过小,为重心的提取会带来一定的误差。进一步,根据得到的距离二值图像,计算手掌重心,即

式(9)中,i(i,j)表示图像像素坐标,m、n表示图像的宽高,通过遍历图像中各像素点,进行累加求均值,即可得到手掌重心坐标(k,l)。在此,为简化重心计算的复杂度,借助opencv的基本函数minmaxloc(),将上文获取的距离图像作为输入参数,获取图像矩阵中的最大距离值d,以及该值对应的图像像素坐标c。由欧氏距离变换定义可知,该最大距离值d就是手掌最大内切圆的半径,坐标c是手掌内切圆的圆心,即手掌重心hc=c,手掌半径hr=d。以下为各种手势图像(均含手臂)中,采用距离变换算法所提取的手掌重心及半径,如图9所示。图9中圆点表示手掌重心,圆圈表示最大内切圆,直线段表示半径,闭合曲线表示所提取的最大肤色连通域的轮廓。由图9可以看出,利用欧氏距离变换算法能够准确地提取手掌重心位置,而不受手指和手臂区域的影响。

3、手势识别

(1)系统与定义手势

本发明预定义的5种基本手势,如图8所示。

上述手势的语义分别定义为:(a)开手掌,表示放大;(b)闭手掌,表示缩小;(c)拳头,表示复位;(d)左摆手,表示向左切换;(e)右摆手,表示向右切换。

(2)手部关键点提取

运用多边形逼近算法对前面得到的轮廓曲线进行处理,以获得精简轮廓s;然后,计算轮廓s中点集的凸包h,以进一步减少无效坐标点,提升程序的运行效率;接下来,通过比较h中各像素点的x坐标、y坐标,提取手部的关键点,即顶端点(top)、左端点(left)、右端点(right),其底端点(bottom)为手掌重心轮廓内切圆半径的1.3倍距离处。由手掌重心坐标确定,如图10所示,并且,根据四个端点坐标拟合出包围手部的矩形,并以此为掩码,与输入的二值图像进行与运算;最后的计算结果即为手部图像,如图11所示。

为增强算法的适用性,在进行轮廓精简时,多边形逼近算法的精度阈值可以设定为手掌半径r的1/3,以自适应手势图像的缩放。

(3)手势识别

在图像识别中,对象特征的选取对识别结果的准确性有较大的影响,单一的特征很容易受到外界环境的干扰。同时,在将目标对象从图像中提取的过程中,也会受到具有相似属性区域的干扰,从而降低所提取特征的有效性。本发明设计并实现一种具有较强抗干扰能力的手势识别算法。

经过前面的步骤,已经获取了较为纯净的手部图像,考虑到人手的几何形状变化较为明显,很适合作为特征参数进行手势图像的辨别。此外,出于对移动平台运算能力较低,以及算法复杂度和系统实时性等因素的考虑,本发明针对上述5种手势特征参数的提取采用3个变量来表示:1)手势轮廓面积a;2)手势轮廓内切圆面积c;3)手势最小外接矩形r。所提取的4个特征参数如下:

特征f1:r的面积s与轮廓面积a的比值

f1=s/a(10)

特征f2:r的面积s与内切圆面积c的比值

f2=s/c(11)

特征f3:r的长宽比

f3=h/w(12)

特征f4:r的旋转角θ

f4=rθ(13)

上式中,s、h、w分别表示最小包围矩形r的面积、长和宽,rθ表示r的旋转角度。由于上述4个特征参数的运算复杂度都非常低,满足系统实时性的要求,而且,f1、f2和f3均为比例特征参数,确保了手势图像的旋转、平移、缩放不变性,同时,特征参数f3为手势的朝向做出了判定,f4又辅助f3完成了旋转角度的计算,从而进一步完善了对手势类型的辨别。各手势图像的判别依赖特征如表1所示,其中,“●”表示手势的决定特征组合,“〇”表示手势的非依赖决定特征。

表1手势特征依赖表

在实际编码实现时,手势的语义判别流程可依据图12进行决策。

在图13中,psa、psci、phwi、rθi分别表示各手势特征参数的取值范围,通过对100名参与者进行手势采样,每位参与者针对预定义的5种手势各采集5次,则每种手势共采集样本5×100次,然后,对各手势样本实验所得特征数据进行分析,以确定各区间取值。

具体判别过程:若手势图像的特征f1在区间psa=[1.8088,1.9554]内,则判定手势为开手掌;若手势图像的特征f2取值在区间psc1=[1.5568,2.0951]内,则判定手势为拳头;否则,若手势特征f2在区间psc2=[2.1341,3.2045]内,则判定手势为闭手掌,或者左摆手,或者右摆手,进一步,根据最小包围矩形的长宽比和旋转角来确定手势类型,若满足手势特征f3取值phw1=[1.53,2.38],且f4为rθ1=[-65,-15),则判定手势为左摆手;若满足手势特征f3取值phw2=[0.42,0.65],且f4为rθ2=(-75,-25],则判定手势为右摆手;否则,若手势特征f4为rθ3=[-15,0]∪[-89,-75],则判定手势为闭手掌;若所提取的手势特征值为其他情况,则均判定为无效手势。

基于以上算法设计,手势类型识别效果如14所示,图中以输出对应手势类型表示识别结果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1