手势作为人们常用的表达方式之一,可以快速简单地实现人机交互,代替传统的键盘、鼠标等人机交互设备。成熟的手势识别系统可以识别出多种复杂的手势,已应用于工业机器人控制、聋哑人手势识别、虚拟现实、智能家居等领域[1-3]。
手势识别的应用中,较多使用手部的几何特征进行识别,包括手指、手指方向、指尖数目、手部轮廓等。因此指尖检测是手势识别中的关键技术之一,对手势识别的准确率有重要的影响。最早的检测都要借助一定的辅助设备如数据手套,通过佩戴数据手套来采集手部的数据,实现指尖识别。这些设备往往检测范围小并且价格昂贵。
目前普遍使用的指尖检测方法是通过摄像头获取视频信息,提取出图像中的手势轮廓,然后根据指尖处的曲率很大的特征,通过设定阀值来判断指尖。但该方法手势分割一般边缘不是很平滑,局部会有缺陷,这样就会造成指尖定位错误,误判点增多,同时也存在无法在复杂背景下准确分割手势轮廓的问题。
针对上述问题,本文提出采用基于YCbCr[4]颜色空间的肤色模型和背景差分法相结合来提取手部轮廓的方法。首先采集图像求均值作为背景,利用背景和每帧图像的像素值差值来提取手部轮廓;再通过肤色模型获取完整的手部轮廓,排除背景中类肤色的干扰;在此基础上采用形态学滤波进行过滤,使手部轮廓边缘更平滑,然后通过手部轮廓的凸包信息计算出手掌掌心的坐标,通过手指的几何特征和凸包缺陷深度以及曲率特征来排除指尖近似点。
1 肤色分割方法 1.1 颜色空间在手指检测系统中,首先要解决的问题是如何在视频采集图像中分割出手部。一般采用肤色模型来识别出肤色区域,再进行筛选提取手部轮廓。将采集到的图像从RGB(红、绿、蓝3个通道的像素值)颜色空间转换到YCbCr颜色空间来建立肤色模型,因为RGB颜色空间中的肤色容易受光照影响,而YCbCr颜色空间通过亮度(Y)、蓝色亮度(Cb)与亮度差、红色亮度(Cr)和亮度差来描述颜色,可以把图像的亮度通道分离出来,不易受光照影响。YCbCr颜色空间相比于其他颜色空间(HSV、HIS、归一化RGB)具有如下优点[5]:
(1) RGB颜色空间到YCbCr颜色空间转换是线性的,转换容易,算法效率高;
(2) 在YCbCr颜色空间可以把亮度信息分离出来,通过Cb、Cr两个变量来确定肤色;
(3) 在YCbCr颜色空间中肤色聚类性较好。
1.2 肤色模型肤色检测中常用的肤色模型有:阀值限定法、椭圆模型法、单高斯模型法[6]。阀值限定法通过肤色在颜色空间中的具体范围来分割肤色区域,即摄像头采集的图像上每个点的像素值P(x, y)在该范围内,即为肤色。阀值限定法的优点是简单直接,能快速分割出视频中的肤色区域;缺点是有误判点,对于复杂背景效果不好。高斯模型通过计算像素的概率值构成连续的数据信息并得到一个肤色概率图,根据图像待测点像素值与肤色的相似度进行判断。高斯模型较复杂,所以其处理时间较长。前人在研究YCbCr空间时,发现肤色在CbCr平面上分布的形状类似于椭圆,于是提出了椭圆模型[6]。其原理是将待测点的Cb、Cr分量的像素值看作该点的坐标,如果该点在椭圆模型内部则为肤色,否则不是肤色。椭圆模型也存在误判点,并且耗时比阀值模型分割长。
本文考虑肤色分割效果和指尖检测系统的实时性,采用YCbCr颜色空间和简单的阀值分割方法建立肤色模型。根据前人实验研究,在YCbCr颜色空间中,当Y分量像素值在[40, 140]区间内,肤色的Cb与Cr分量像素值基本保持在一个范围内。根据阀值限定法建立如式(1) 所示的肤色模型:
| $ P\left( {x,y} \right) = \left\{ {\begin{array}{*{20}{c}} \begin{array}{l} 1,Y\left( {x,y} \right) \in [40,140] \cap \\ \;\;\;\;\;\;\left| {{C_{\rm{r}}}\left( {x,y} \right)/{C_{\rm{b}}}\left( {x,y} \right)} \right| \in \left[ {{Y_{\min }},{Y_{\max }}} \right] \end{array}\\ {0\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;} \end{array}} \right. $ | (1) |
式(1) 中,P(x, y)为待测点(x, y)经过肤色模型二值化后的像素值,Y(x, y)、Cb(x, y)、Cr(x, y)分别为待测点(x, y)在YCbCr颜色空间中3个通道的像素值,Ymin、Ymax为|Cr(x, y)/Cb(x, y)|取值范围的最小值和最大值。
首先把摄像头拍摄的图像从RGB空间转换到YCbCr空间,然后将其分离成3个通道的图像,根据式(1) 肤色模型分割肤色区域。当待测点(x, y)的Y分量像素值在[40, 140]范围内,并且Cb与Cr分量比值的绝对值在[Ymin, Ymax]范围内时,将其像素值置为1,其他范围时置为0。则图像中白色区域即为肤色区域,黑色为背景。
2 手部轮廓提取虽然YCbCr肤色模型可以较好地提取出肤色区域,但是当背景中出现很大面积的类肤色区域时,就会干扰手部轮廓的提取,无法准确提取手部轮廓。采用肤色模型和背景差分法相结合的方法来提取手部轮廓,可以有效地解决此问题。首先采用背景差分法过滤掉背景中的类肤色区域,然后利用YCbCr肤色模型提取准确的手部轮廓,同时背景不断累加更新。
2.1 背景差分法背景差分法是利用视频中每帧的图像与背景模型的差异来检测运动的物体,通过设定阀值来判断运动区域。首先把摄像头采集到的前5帧图像转换为灰度图像,然后求其平均值作为背景差分法的背景模型[7]如式(2) 所示:
| $ {G_{\rm{b}}}\left( {x,y} \right) = \sum\limits_{i = 1}^n {{G_i}\left( {x,y} \right)/n} $ | (2) |
式(2) 中,Gb(x, y)是背景模型的灰度图像,Gi(x, y)是其中的第i张灰度图像,n为采集的图片数量。
将当前帧转换到YCbCr颜色空间,然后将每帧图像的Y分量值与式(2) 求得的背景灰度值相减,再设定阀值来判断待测点是否为前景,如果大于阀值就认为该待测点是前景,小于阀值则认为是背景。计算公式如下:
| $ D\left( {x,y} \right) = \left| {Y\left( {x,y} \right) - {G_{\rm{b}}}\left( {x,y} \right)} \right| $ | (3) |
式(3) 中,D(x, y)为Y分量图像和背景灰度图像的像素值差值,Y(x, y)为当前帧的Y分量图像像素值。
| $ R\left( {x,y} \right) = \left\{ {\begin{array}{*{20}{c}} {1,D\left( {x,y} \right) > T}\\ {0,D\left( {x,y} \right) \le T} \end{array}} \right. $ | (4) |
式(4) 中,R(x, y)为二值化后的前景图像,T为设定的阀值,根据式(1)~(4) 可以求得YCbCr肤色模型和背景差分法结合的模型,如式(5) 所示。
| $ P\left( {x,y} \right) = \left\{ {\begin{array}{*{20}{c}} \begin{array}{l} 1,Y\left( {x,y} \right) \in [40,140] \cap \left| {{C_{\rm{r}}}\left( {x,y} \right)/{C_{\rm{b}}}\left( {x,y} \right)} \right|\\ \;\;\;\;\;\; \in \left[ {{Y_{\min }},{Y_{\max }}} \right] \cap D\left( {x,y} \right) > T \end{array}\\ {0\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;} \end{array}} \right. $ | (5) |
背景通常会随着时间进行变化,例如,白天到黑夜光线会发生变化,而且背景中物体也可能移动或者有新的物体进入背景,因此需要不断地更新背景模型。由式(6) 更新背景模型[7]:
| $ {C_a}\left( {x,y} \right) = \alpha \times {C_{a - 1}}\left( {x,y} \right) + \left( {1 - \alpha } \right) \times F\left( {x,y} \right) $ | (6) |
式中,Ca(x, y)为当前的背景模型;Ca-1(x, y)为前一时刻的背景模型;F (x, y)为当前帧的图像;α为学习率, 它定义了当前值对平均值的影响程度,该值越大,对背景的适应速度越快,但是也容易进行误判,即将前景误认为背景,对前景的提取造成干扰。经过多次实验测试得出:α=0.03时,背景变化后可以较快地(1~2 s)更新背景。
2.3 提取手部轮廓通过上述肤色模型获得手部轮廓后,再对其进行形态学滤波处理,即腐蚀和膨胀。腐蚀一般用来消除图像中的噪声,膨胀则用来弥补手势部分中的不连续部分。进行滤波处理后,求出所有连通区域的外部轮廓,因为有噪声和类肤色背景的干扰,要对轮廓进行筛选,找到连通区域面积最大的轮廓即为手部轮廓。
3 基于凸包的指尖检测 3.1 凸包算法给定平面上的一些点,用最少的点连成一个凸多边形,使得平面内所有点皆在此多边形内或此多边形上,这个凸多边形就是给定点的二维凸包。最常用的凸包算法是Graham扫描法,主要通过排序、扫描来实现,但是其所需时间较长。本文采用一种快速凸包算法,利用递归的方法逐步排除凸包内部的点。具体算法流程如下:
(1) 如图 1所示,遍历轮廓上的每个点,根据坐标判断求出两个极端点A、B,将整个凸包划分为上、下两个凸包;
|
图 1 凸包算法 Fig.1 Convex hull algorithm |
(2) 为了剔除凸包内部的干扰点,分别对AB上方和下方的点求凸包,进行递归;
(3) 递归过程为,找到距离直线AB最远的点C,连接AC和BC,再对A、C作为极端点的凸包进行递归,依次循环下去,直到无法找到两极端点对应的凸包,则最远点即为凸包顶点。
3.2 手掌掌心坐标计算求出手部轮廓的凸包后,通过凸包缺陷包含的信息计算手掌掌心的坐标,如图 2所示,点A1、A2、P1形成的封闭区域即为凸包缺陷。凸包缺陷包括4个信息:起始点A1、终止点A2、最远距离L1、最远点P1。
|
图 2 手部凸包缺陷 Fig.2 Convexity defects of hand shape |
手掌掌心坐标算法流程如下:
(1) 求出所有凸包缺陷中起点A1(x, y)、终点A2(x, y)、最远点P1(x, y)坐标的平均值,作为掌心坐标粗略估算值R(x, y);
(2) 依次求出凸包缺陷中的起点、终点、最远点到掌心点R(x, y)的距离d,并存储到集合Dn中(n为所有凸包缺陷中起点、终点、最远点的个数总和)。
(3) 对集合Dn中的值从小到大进行排序,取前3个值所对应的3个点M1、M2、M3;
(4) 通过M1、M2、M3的坐标计算出过3点的圆心坐标和半径;
(5) 由于噪声的干扰,掌心坐标波动较大,故取10个掌心坐标和半径求平均值,作为最终的掌心坐标C(x, y)和半径R。
通过掌心坐标C(x, y)和半径R可以实时追踪手掌的位置,并粗略估计手掌的大小。
3.3 指尖检测凸包的凸顶点都是指尖近似点。指尖检测的难点是如何筛除误判点,一般通过凸包缺陷深度来过滤指尖近似点。因为两个指尖之间的凸包缺陷深度值比其他的凸包缺陷深度值大,因此本文在此基础上提出一种根据手部凸包缺陷与掌心之间的几何关系及指尖点曲率值检测指尖的方法,来提高算法的准确性。
如图 3所示,指尖点A、D和其中间的凸包缺陷最远点B构成一个三角形ABD,A、B及掌心点C构成三角形ABC,点B靠近掌心圆的圆周或在圆周上。根据手指的特征,AB和BD过短时,A、D不是指尖点;AC和BC长度接近时,A不是指尖点;AB和BD长度接近时,A、D为指尖点。
|
图 3 指尖所在凸包缺陷 Fig.3 Convexity defects of finger tips |
经过实验测试具体的指尖筛除条件如下:
(1) 当AC>BC时,0.1R≤BC≤1.3R;当AC < BC时,0.1R≤AC≤1.3R;
(2) MIN(BC, AC)/MAX(BC, AC)≤0.8;
(3) AB≥10,BD≥10,MAX(AB, BD)/MIN(AD, BD)≥0.8。
将满足以上条件的指尖点存储到点集Ap中,然后以Ap中的点Pi为原点,在手部轮廓中各取Pi之前和之后的j个点,并计算这2j个点的K曲率值,即向量AiAi-j与AiAi+j之间的夹角的余弦值。若点Pi的K曲率值小于60°,并且是2j个点中K曲率值最小的点,则其为准确的指尖点。
4 结果与讨论 4.1 肤色模型验证为了验证本文提出方法的可靠性和准确性,进行了实验验证。实验条件如下:Intel(R)CoreTMi5-4200H CPU @2.80 GHz笔记本、USB接口的高清摄像头。摄像头每秒采集30帧图像,图像分辨率为640×480。为了验证本文算法的鲁棒性,相比于以往经常采用的单一的背景,采用有强光照射和少部分类肤色背景作为干扰环境进行实验。
首先验证式(5) 提出的肤色模型,以测试其能否有效消除类肤色背景的干扰。其中参数取值为Ymax=1.25,Ymin=0.90,阀值T=22。实验结果如图 4所示。由图可以看出,本文采用的肤色模型在光照较强的环境下能够很好地去除背景类肤色的干扰,具有较强的鲁棒性。
|
图 4 肤色模型和本文方法效果图 Fig.4 Results of the skin model and the method described in this paper |
分别采用曲率算法和本文方法进行指尖检测,其效果如图 5所示,可以看出本文提出的算法检测到的指尖误判点更少。
|
图 5 曲率算法和本文方法检测效果对比 Fig.5 Results of the curvature calculation method and the method described in this paper |
针对用表示数字0~5的6种手势进行指尖检测,实验环境为灯光照射的复杂背景。为了排除不同实验者手部差别的影响,邀请了5位不同的受试者进行指尖检测实验,每个人分别作0~5个指尖的6种手势,每种作30次,共收集了900帧图像。文中取其中2人,实验结果如表 1和图 5所示,图中方框为提取的手部区域,圆圈为指尖。
| 下载CSV 表 1 指尖检测结果 Table 1 Results of finger recognition |
由表 1可以看出本文算法检测的的准确率达到98.78%,每一帧处理平均耗时0.063 s。表 2为本文算法与现有的指尖检测算法的性能对比。文献[8]利用曲率和距离相结合的方法进行指尖检测,而曲率检测仍然会存在误判;文献[9]利用手指的径向对称特征进行指尖检测,但是该方法要求背景单一,在背景颜色较深的情况下指尖检测效果不佳。
| 下载CSV 表 2 指尖检测性能对比 Table 2 Comparison of fingertip detection performance of different methods |
|
图 6 不同受试者不同手势识别效果 Fig.6 Recognition of simple number hand gestures |
针对肤色模型提取手部轮廓存在类肤色背景干扰的问题,本文采用背景差分法和肤色模型结合的方法提取手部轮廓,解决了肤色模型在较复杂的环境下无法准确提取手部轮廓的难点。采用曲率和凸包相结合的方法快速、准确地检测指尖的位置,有效减少求取手部轮廓凸包的时间,能够满足指尖检测实时性的要求;通过不同实验者在有复杂背景干扰的条件下进行指尖检测的准确率达到98.78%。实验结果表明本文算法可以准确检测和定位指尖,能够应用于手势控制扫地机器人与工业机器人领域。后续研究将尝试利用图像深度信息解决手指有重叠情况下的指尖检测,并利用指尖检测的结果进行手势识别和动作识别。
| [1] |
Chen Y T, Tseng K T. Developing a multiple-angle hand gesture recognition system for human machine interactions[C]//Proceeding of the 33rd Annual Conference of the IEEE Industrial Electronics Society. Taipei, China, 2007:489-492.
|
| [2] |
Suk H I, Sin B K, Lee S W. Hand gesture recognition based on dynamic bayesian network framework[J]. Pattern Recognition, 2010, 43(9): 3059-3072. DOI:10.1016/j.patcog.2010.03.016 |
| [3] |
关然, 徐向民, 罗雅愉, 等. 基于计算机视觉的手势检测[J]. 计算机应用与软件, 2013, 30(1): 155-159. Guan R, Xu X M, Luo Y Y, et al. Hand gesture recognition based on computer vision[J]. Computer Applications and Software, 2013, 30(1): 155-159. (in Chinese) |
| [4] |
黄秀常. 基于改进YCbCr空间的肤色检测模式分析[J]. 计算机仿真, 2010, 27(7): 222-225. Huang X C. Skin color detection mode based on improved YCbCr[J]. Computer Simulation, 2010, 27(7): 222-225. (in Chinese) |
| [5] |
沈常宇, 许潘园. 肤色建模和肤色分割的人脸定位研究[J]. 光电工程, 2007, 34(9): 103-107. Shen C Y, Xu P Y. Localization of human face based on skin module and skin color segmentation[J]. Opto-Electronic Engineering, 2007, 34(9): 103-107. (in Chinese) |
| [6] |
严秋锋, 王红茹, 季鸣. 基于颜色均衡化和椭圆模型的手势图像分割[J]. 计算机仿真, 2015, 32(4): 172-175. Yan Q F, Wang H R, Ji M. Elliptical image segmentation based on color balance and elliptical model[J]. Computer Simulation, 2015, 32(4): 172-175. (in Chinese) |
| [7] |
卢章平, 孔德飞, 李小蕾, 等. 背景差分和三帧差分结合的运动目标检测算法[J]. 计算机测量和控制, 2013, 21(12): 3315-3318. Lu Z P, Kong D F, Li X L, et al. Moving objects detection based on background difference and three frame difference[J]. Computer Measurement and Control, 2013, 21(12): 3315-3318. (in Chinese) |
| [8] |
Lee D, Lee S G. Vision-based finger action recognition by angle detection and contour analysis[J]. ETRI Journal, 2011, 33(3): 415-422. DOI:10.4218/etrij.11.0110.0313 |
| [9] |
梅萍华, 李斌, 朱中的, 等. 基于径向对称变换的实时指尖检测算法[J]. 中国科学技术大学学报, 2011, 41(2): 101-107. Mei P H, Li B, Zhu Z D, et al. Real time fingertip detection using radial symmetry transform[J]. Journal of University of Science and Technology of China, 2011, 41(2): 101-107. (in Chinese) |



