2 动态手势识别系统设计
2.1 图像预处理
图像预处理是手部检测中关键的一步,图像预处理效果好坏会影响到后面的手部检测的精度与速度,图像预处理包括图像的灰度化处理与滤波处理二部分。具体流程图如图3所示。

图3 图像预处理流程图
2.1.1灰度化处理
通过使用海康RGB-D感知相机MV-EB435i采集的图像是RGB彩色图像,它的每一个点的像素是由R、G、B三分量组成,其包含了大量的图像信息,如果直接对RGB彩色图像进行手部检测则带来很大的计算量,就无法做到实时动态手部识别。所以,本系统采用灰度化处理RGB彩色图像,将采集的RGB彩色图像都转化为灰度图像。将RGB彩色图像转换成GRAY(灰度)图像的方法有许多种,其中最常用的是加权平均法。其转换关系如公式1所示,也是一种线性转换。其转化效果如图4所示。


图4 手部某点的RGB/GRAY值
2.1.2中值滤波
在图像的采集、传输过程中,无法避免的会受到噪声影响,得到的图像画质会因噪声而在不同程度上出现畸变与污点。因此我们必须首先对图像进行滤波操作,过滤掉部分的噪声影响。其中常用的滤波方法有均值、中值和高斯滤波等等。综合相机的表现性能、滤波效率与稳定性等多因素,本系统决定采用中值滤波处理。
中值滤波过程是通过一个可移动的窗口遍历图像,将属于窗口内的所有像素值进行排序并取中间数作为当前窗口中值滤波的结果,尺寸为3*3的窗口工作原理如图5所示,其滤波效果如图6所示。

图5 中值滤波工作原理

图6 中值滤波效果
2.2
手部目标检测
手部检测方法有很多方法,许多研究者提出了许多的检测方法,比如通过基于肤色法,基于特征点法与及基于卷积神经网络方法。现如今,基于卷积神经网络检测方法逐渐成为手势检测的主要方法。因此,本文采用级联分类器目标检测的方法进行手部检测,并且采用裁剪跟踪方式减少检测区域,从而提高检测效率,因此,其检测速度基本能达到实时检测。
2.2.1级联分类器
级联分类器(Cascade Classifier)是一种基于Haar特征的对象检测算法,最早由Paul Viola和Michael Jones在2001年的论文中提出。级联分类器主要用于人脸检测,但也可以用于识别其它物体。级联分类器具有高检测精度和快速检测速度的特点。使用OpenCV官方的训练工具生成手部检测级联分类器xml文件,其xml文件信息描述如图7所示。

图7 手部检测xml文件
2.2.2手部检测
首先通过OpenCV库函数中Load函数调用训练好的级联分类器,接着配置好检测的基本参数,通过detectMultiScale函数对已经预处理后的图片进行搜索目标,从而输出手部目标的在图片的位置信息。其检测效果如图8,9所示。

图8 简单场景检测效果图

图9 曝光检测效果图
其检测性能较佳,鲁棒性较强,能够适应在不同的场景与光照强度进行检测。但是每次都要进行对整幅图像进行检测,其效率太低。因此,为了提高效率,通过裁剪跟踪的方法来提高检测效率,即假设当前帧检测到手部后,记录当前帧手部的位置,并对下一帧图像进行裁剪,减少检测区域,如果裁剪的区域如果没有检测到,才对整帧图像进行检测。其过程步骤如图10所示。

图10 手部检测的流程图
2.3
运动轨迹图
建立运动轨迹图主要记录手部运动的状态。因此,为了识别手部的运动情况,必须建立好运动轨迹图,并且其轨迹图能够直观反映手部的运动情况。因此,本文基于运动历史图的理论基础上来建立运动轨迹图,其方法简单与直观,能够通过简单的几何方法就可以将手部的运动信息提取处理。
2.3.1运动历史图
运动历史图(MHI)最初是由Bobick 和 Davis提出的。在此之前,Bobick 和 Davis 首先提出了二值的运动能量图(Motion Energy Image,MEI),通过描述物体如何移动和运动在空间中发生的位置,来进行基于运动的物体识别。运动能量图显示了运动的轮廓和能量的空间分布。在运动能量图的基础上产生了运动历史图(Motion History Image,MHI)。运动历史图是一种基于视觉的模板方法,通过计算时间段内同一位置的像素变化,将目标运动情况以图像亮度的形式表现出来。它是这样的一种图像:其每个像素的灰度值表示了在一组视频序列中该位置像素的最近的运动情况。最后运动的时刻越接近当前帧,该像素的灰度值越高。因此,MHI图像可以表征人体在一个动作过程中最近的动作情况,这使得MHI被广泛应用于动作识别领域。
设H为MHI中像素的灰度值,Hσ(x,y,t)可由公式2计算得出:

式中,(x,y)为像素点的位置;t为时间即当前帧的帧数;σ是人为给定的像素值,从帧数的角度决定了运动的时间范围,若σ小于动作持续的帧数,就有可能丢失部分运动信息;δ为衰退参数,对于图像序列中的一个像素点,若其运动形态没有发生改变或者运动形态转为静止,则MHI中该点的灰度值减少δ,在传统的MHI的计算过程中的取值一般为1,但在不同的应用场景中的值会影响MHI携带的关键信息量,因此需要研究者通过不断的实验选取适当当前场景的δ值;ψ(x,y,t)为更新函数,有多种定义方法:光流法,帧间差分,图像差分,最常用的是帧间差分法,计算公式如下:

其中,

式中,I(x,y,t)为图像序列第t帧中像素点(x,y)的灰度值,为实验确定的差异阈值ξ,不同的应用场景需要不同的值,Δ为两帧图像间的间隔。
2.3.2运动轨迹图
基于运动历史图理论基础上,将函数D(x,y,t)进行重新定义,将其定义为是否检测到手部区域,当手部区域面积不等于0,则D(x,y,t)的值为1,反之D(x,y,t)的值为0。因此,更新函数ψ(x,y,t)表达式修改如式5所示。

并且为了更好的直观反应轨迹,对Hσ(x,y,t)进行修改。由于σ为动作持续的帧数,通过测试当σ为6~9范围内其效果最佳,反应速度最适宜,σ值越小则轨迹量小,σ值越大虽然轨迹量多,但可能会反应较慢,需要很差时间的移动才能建好轨迹图。因此,本文σ取值为8,δ衰退参数取经典值1。综上所示,其修改后的Hσ(x,y,t)表达式如式6所示。

由于人眼无法辨别差值为1的灰度值。因此,对式6进行线性拉大。Hσ(x,y,t)在0到255区间进行拉大。其表达式如式7所示。

根据前面的理论公式的推导,通过代码实现运动轨迹图的建立,其不同的移动方向的轨迹图如图11、12、13、14、15、16所示。

由于级联分类器只能检测到人手的区域,但无法体现出人手的形状。因此,为了更加直观显示人手的移动的情况,对检测到的人手区域进行肤色提取,从而分割出手部,去除无关背景。
2.4 运动方向检测
运动方向检测主要是判断手部运动的方向,通过对运动轨迹图进行分析从而得到手部运动的方向。对于历史运动轨迹图像,常用的检测方法是图像梯度算法,因梯度算法计算较为复杂,需要巨大计算开销,有可能造成实时性较差。因此,通过对比不同的运动方向的轨迹图,可以发现这些轨迹图的几何特征有所不同,所以采用几何的方法进行分析手部的运动方向,从而减少计算量,反应灵敏。
2.4.1轮廓几何特征
轮廓的几何特征有许多特征,比如轮廓的周长、面积、圆形度、边界框几何信息、几何矩等特征。可以选择合适的几何特征进行组合,进而更好地区分不同的轮廓。为了更好的选择合适的几何特征来区分运动方向,并且这些几何特征尽可能具有平移、旋转和尺度不变性的特性,这些才能保证无论任何尺寸的手部在任意位置都不影响效果的好坏。因此,对不同移动方向的轨迹图提取轮廓并进行分析几何特征。
实验一对不同的移动的方向依次顺序取出每一帧的轮廓,观察轮廓的面积变化。

图17 不同移动方向轮廓的归一化面积变化
通过图17得出结论,只有前后运动其归一化面积会增大或减小,其他的运动归一化面积没太大的变化。因此,可以通过判断归一化面积的变化推断是否是前后运动还是其他运动。
实验二对固定八帧时间内将每一帧的手部区域融合成运动轨迹图,提取不同的移动的方向的运动轨迹图的轮廓,观察轮廓最小外接矩形的边长比。

图18不同移动方向轮廓的最小外接矩形的边长比
通过图18得出结论,左右运动、上下运动与前后运动的轮廓的最小外接矩形的边长比都占各自的区间,并且区间都相互独立。因此,可以通过设定轮廓的最小外接矩形的边长比的阈值来区分不同的运动方向。
2.4.2方向检测
通过前面的实验测试,决定采用轮廓的面积的变化与轮廓最小外接矩形的边长比来区分运动方向。为此,为每个运动方向都规定了对应的规则。运动方向的规则如表1所示。
表1 运动方向判断规则

当轨迹图的轮廓宽长比R在1.1到1.9区间,则判断轮廓的面积Area变化,当首帧轮廓的面积Area首大于2倍的末帧轮廓的面积Area末时,则判断当前操作为向前移动的动作。其移动过程如图19所示。

图19 向前移动过程

图20 向前移动的面积变化
当轨迹图的轮廓宽长比R在1.1到1.9区间,则判断轮廓的面积Area变化,当首帧轮廓的面积Area首小于末帧轮廓的面积Area末的一半时,则判断当前操作为向左移动的动作。其移动过程如图21所示。

图21 向后移动过程

图22 向后移动的面积变化
当轨迹图的轮廓宽长比R大于1.85时,则判断像素值V的变化,当轮廓左侧的像素值V左大于2倍右侧的像素值V右时,则判断当前操作为向左移动的动作。其移动过程如图23所示。

图23 向左移动过程
@B~[T]1$GG9N5[I2P$2W.png)
图24 向左移动的轨迹图
当轨迹图的轮廓宽长比R大于1.85时,则判断像素值V的变化,当轮廓的左侧的像素值V左小于右侧的像素值V右一半时,则判断当前操作为向右移动动作。其移动过程如图25所示。

图25 向右移动过程

图26 向右移动的轨迹图
当轨迹图的轮廓宽长比R小于1.15时,则判断像素值V的变化,当轮廓的上侧的像素值V上小于下侧的像素值V下的一半时,则判断当前操作为向上移动动作。其移动过程如图27所示。

图27 向上移动过程

图28向上移动的轨迹图
当轨迹图的轮廓宽长比R小于1.15时,则判断像素值V的变化,当轮廓的上侧的像素值V上大于2倍的下侧的像素值V下时,则判断当前操作为向下移动动作。其移动过程如图29所示。

图29向下移动过程

图30向下移动的轨迹图