[0064] 为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
[0065] 请参阅图1到图1,本实施例提供一种手势识别方法,首先是降低待识别图像的分辨率为第一图像。为了加快图像处理的速度,通常会利用缩小图像的方式来减少后续处理时间。一般常用的方法可以分为三种,降低分辨率(Down‑sampling method)、二乘二平均滤波器(2×2average filter method)以及离散小波变换(Discrete Wavelet Transform,DWT),这三种方法都可以降低分辨率达到减少运算量的效果,其中离散小波变换较广为使用,因为它具有极佳的能量集中特质与多重解析的特性,可以将不同的成分分开进行处理,在降低分辨率后仍能大量的保留原始图像的能量特性,不仅可以降低图像分辨率,还可以实现对图像高低频信息的获取。
[0066] 经过离散小波变换处理后,可以得到降级后的图像如图1A所示,其中图1A为低低频信息,图1B为低高频信息也就是垂直纹理,图1C为高低频信息也就是水平纹理。
[0067] 而后根据第一图像做肤色检测处理,获得具有肤色区域的第二图像。肤色对于人来说是十分明显的特征,在区别人体与其他对象上较为容易。肤色识别的方法有很多,不管是黄白黑种人在肤色最主要的差异是在亮度,因此如果舍去亮度不看,各色人种的肤色粒子群是具有相当的群聚性,能达到相当高的识别率,所以本实施例则是使用HSV的色彩空间来识别肤色区块。HSV色彩空间将原始的RGB色彩空间分成了H(Hue)色调、S(Saturation)饱和度、V(Value)亮度三个维度,通过将原始RGB色彩空间转换至HSV色彩空间,将亮度(V)这个影响最大的因素分离出来,并利用H(Hue)、S(Saturation)对应肤色的范围如公式(1)将肤色标记出来。
[0068]
[0069] 如图2A和图2B所示,图2A是分辨率降低后的图像,图2B是根据肤色标记后的图像,其中白色的即为初步得到的肤色区域。可以看出虽然人体代表性特征是肤色,但生活周遭也有许多类肤色的物体,这些类肤色的物体以及噪声将会影响本实施例的实验结果,所以在后续几个步骤的实施例将会对识别到的肤色区块进行修正。
[0070] 而后对第二图像做形态学运算,获得滤波处理后的第三图像。形态学运算的原理是利用图像与结构元素做集合运算来产生新的滤波图像,其优点是经过形态学中的膨胀收缩运算以后可以将不必要的杂点滤除同时将不应相连的物体分离开来。膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞。膨胀的算法:用3x3的结构元素,扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作,如果都为0,结果图像的该像素为0。否则为1。结果:使二值图像扩大一圈。收缩是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。收缩的算法:用3x3的结构元素,扫描图像的每一个像素用结构元素与其覆盖的二值图像做“与”操作如果都为1,结果图像的该像素为1。否则为0。结果:使二值图像减小一圈。如图3所示,通过膨胀收缩的滤波处理后,噪声大大降低了。
[0071] 获取第三图像的前景信息,根据前景信息和第三图像得到具有前景肤色区块的第四图像。为了抓取出前景,本实施例需要一个背景模型做为参考。在建立背景的方法中本实施例采用Codebook背景建模的方式来建立背景模型。Codebook算法不同于以往的背景建构方法,它主要采用量化分群的技术针对复杂场景下的背景模型建模,利用图像序列中的独立像素点为基础,将每一个像素质量化后用Codebook表示,对每一个像素点的颜色和亮度进行取样,与颜色模型中的颜色距离与亮度做相似对比,借此判断像素点是否属于背景。如果判断结果为背景,在量化成各组Codeword,且背景特征以像素点为单位被储存,所有像素点的Codebook构成一个完整的背景。不同于高斯混和的方法要计算概率分布,Codebook只需要计算像素点的颜色距离和亮度范围,因此该计算法复杂度小、使用的内存少,在初始化过程中,能够在有前景运动目标的图像中快速提取出背景,并自适应更新与压缩背景模型,还能够处理局部或全局的光照变化,非常适合实时图像处理,处理后的图像如图4所示。获取到前景信息后,要将属于背景的类人体肤色区块给滤除掉,在经过上述的Codebook算法分离出前景部分后,将前景部分与第三图像的肤色区块做pixel by pixel(像素点间)的逻辑与运算以获得前景肤色区块,如图5所示。
[0072] 以及根据第四图像的水平和垂直纹理信息获取手臂部分所在的图像区域,根据手臂部分所在的图像区域截取手臂部分图像。从实验结果可以发现除开边缘的纹理不看,人脸与手掌内部的纹理特性有相当大的差异。由于人脸内部的水平纹理信息相当的丰富,因此在本实施例将计算连通区块内的水平纹理强度。经过在降低图像分辨率步骤的离散小波变换的处理后,还可以得到低高频和高低频的信息。而这些低高频与高低频的信息分别代表垂直与水平纹理,而脸部纹理中的水平纹理信息较为丰富,垂直纹理则极少,因此后续处理皆对水平纹理作分析。一开始为了避免强度较弱的纹理信息造成干扰,首先本实施例使用公式(3)检查经过离散小波变换过后的高低频信息,若HL(x,y)的值小于阀值Th0则代表水平能量强度较弱,可忽略不看,大于阀值则以HL(x,y)=255表示。再来对于HL(x,y)=255的位置在灰阶图像上使用水平索贝尔算子(Sobel)屏蔽G(2)来做进一步确认,如公式(4)。若经过屏蔽G卷积出来的值大于所设阀值Th1则S(x,y)=1判断为纹理点,最后基于水平纹理应该是连续的,不应该为单独一点,因此对于S(x,y)=1的点,若其S(x,y±1)有其中一个符合上述条件则将Label(x,y)=1标记为强劲水平纹理点,如公式(5),由本实施例的方法可以避免掉许多单一点的纹理点,以获得到更精准的水平纹理信息。
[0073]
[0074]
[0075]
[0076]
[0077] g(x,y)为灰阶图像;HL(x,y)为原始图像经过变换处理后之每一pixel值;S(x,y)为纹理点标记;Label(x,y)为强劲纹理点标记。
[0078] 由于手掌表面由于较为平滑因此纹理信息相对于脸部是较少的,脸部与手部的纹理特性有相当大的差异,因此本实施例通过统计每一连通区块内的强健纹理点个数,利用手部与脸部内的纹理点个数差异来区分手与脸,而为了使识别率更加精准,本实施例根据脸部肤色区块大小与强健纹理点个数的关系建立查表曲线作为阀值。当纹理点个数大于所设阀值,则判断为脸。
[0079] 最后根据手臂部分图像的手指图像信息获取对应的手势信息。在手部识别部分由于输入的手部图像有可能是歪斜的,这将不利于本实施例的判断。可以先将手势做旋转,再来便可以对手势的特征做分析来找出手腕以及手指和手掌的连接处,将手掌以外的部分切除,最后再利用特征分析所得到的特征数据将手指头区别出来进行识别以得到手势识别结果。旋转手臂首先需要知道手臂歪斜的角度,这里本实施例利用的是最小差方法(least squares estimation),假设一条回归线并使所有离散点与回归线的误差平方和最小,当找到该回归线后即可知道斜率与旋转角度。再来只要利用公式(6)将旋转角度带入即可得到旋转后的图形,如图6所示,左半部分是旋转钱,右半部分是旋转后的图像。
[0080]
[0081] 大部分的手势皆由手掌与手指的配合来展现,因此手腕以下的肤色区块是不必要的,所以为了减少运算的复杂度本实施例需要将手腕以下切除,并保留手掌部分,图7A、图7B为人体手掌的示意图,从图7A中可以发现手掌部分有着近正方形的特征,而这个特性将有助于本实施例下一步骤将手掌分离。再从图7A往上延伸到手指部分,如图7B所示,可以发现手指长度与手掌长度是十分相近的,而这个比率大略在1~1.4之间。因此,为了切除手掌以下部分,本实施例必须先知道手指的长度,即图7B中手指的长度(finger length)。想要知道手指的长度首先需要由任一指头往下搜寻图7C,由于手指末端与手指连接的地方在横向的宽度上会突然剧增,通过这个特性来判断手指末端的位置,进而可以得到手指长度,结果如图7D中的第二条线所示。由于手指长度与手腕长度的比例大约是1到1.4之间,因此本实施例以手指末端为基准往下(Finger length×1.2)个pixel作为手腕位置,如图7D中的第三条线所示。
[0082] 经过上述步骤后得到去除手臂的区块,并知道了手腕的宽度、手腕中心点等信息,从图8B的示意图可以发现若以手腕中心点为圆心向上画半径为手掌长度(手指长度1.2倍)的圆可以将手掌区分出来,本实施例将半径提升为手掌长度的1.35倍,如图8C中弧形线所示可以将手指分离出来,但拇指部分却可能出现误差。为此本实施例提出由手腕中心点往左往右各1/4手腕宽度(即手腕底部宽度)的位置来个画半圆,较能避免大拇指被遗漏的情形,如图8C中两个弧形线所示,取其中靠近的内部的两个半弧线。
[0083] 最后根据手指数来识别手势。不同的手指数代表不同的手势,手指数1只可能是手势1;手指数2则可能是手势2、6、7;手指数3则可能是手势3、8;手指数4则可能是手势4、9;手指数5只可能是手势5。因此剩下手指数为2、3、4的样本。首先,先看图9B,当中的弧形上面的区块为分离出来的手指,对于每一个该区块本实施例将会记录他的最高点坐标,再从这些坐标中找到其中的最高点以及最低点,而图中横线则是以半圆的顶点作为高度的限制,弧线则是以手腕的中心点作为左右分割的依据。就手指数2来说,图9A是手势二的示意图,可以看到其中最高点以及最低点都会在黄色线以上;图9B为手势六,最低点必定会在横线以下,且最高点与最低点必会在手掌中心点的左右两侧也就是蓝线左右两侧;图9C是手势七,最低点必会在横线以下,且最高点与最低点必会在同一侧。手指数为3,可能为手势3、手势8。手势3如图9D其中最高点与最低点皆会在横线以上;手势8如图9E其中最高点与最低点会分别在横线两侧。手指数为4,可能为手势4、手势9。手势4如图9F其中最高点与最低点皆会在横线以上;手势9如图9G其中最高点与最低点会分别在横线两侧。
[0084] 本实施例通过标记出的手指顶点坐标,接着将最高点与最低点分别与上步骤所找出的手腕中点以及圆的半径等信息做比对,通过这些信息可以利用相对位置来判别手势,更不会因为距离的远近所改变,可以避免因为距离镜头的远近差距而造成判别错误。
[0085] 最后,采用本发明的方法进行实验。测试图像分辨率为640x480,本实施例分别以500张测试图像来测试脸部与手部识别率,以及9000张测试图像来测试1‑9的手势准确率,实验结果如表一、表二所示。从表二的数据,可以看出人脸识别有相当高的准确率。再看表二与表三,本实施例的手势识别系统不仅快速,且在1‑9的手势识别率都能够达到九成左右。表三详细列出此系统各阶段的执行速度,整个系统执行的速度大约是30fps,可以达到实时的程度。
[0086] 手势 总张数 成功张数 失败张数 识别成功率1 1000 983 17 98.3%
2 1000 991 9 99.1%
3 1000 992 8 99.2%
4 1000 971 29 97.1%
5 1000 973 27 97.3%
6 1000 961 39 96.1%
7 1000 947 53 94.7%
8 1000 980 20 98.0%
9 1000 981 19 98.1%
[0087] 表1:手势识别结果
[0088] 总张数 成功张数 失败张数 识别成功率500 481 19 96.2%
[0089] 表2:人脸识别结果
[0090]
[0091] 表3:执行时间
[0092] 本发明提出了离散小波变换应用于快速区分手部脸部区块,以及稳定的手势识别方式。实验结果表明,本实施例所提出的方法能够大幅降低系统的运算量,并可以准确的区分出脸部与手部区块。在手部识别的部分本实施例提出一个简单稳定的方法将手指手掌区分开,并从实验结果可以发现识别率高达九成。在后续发展方面,本实施例所使用的方法由于没有用到复杂的感测组件,且与本实施例系统结合的离散小波变换,因为运算较为简单,因此在硬件上也就更容易实现。
[0093] 本发明提供一种手势识别装置,包括存储器、处理器,所述存储器上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一项所述方法的步骤。
[0094] 需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。