手势识别跟踪算法
对于手势的提取主要的目的是将手势从较为复杂的环境中提取出来,由于环境复杂直接采取灰度图像二值化一帮无法取得较好的效果。虽然通过颜色手套的方法来解决这个问题能取得较好的效果,但是又引入了不必要的麻烦.
经过综合考虑,在设计中我们采用肤色提取手势轮廓的方法,经过实验,该方法效果较为明显,在大多数的情况下都能取得较为满意的效果。对于手势的跟踪则采取预测和重定位的形式,在以往的实验中,有人采用光流法进行跟踪,由于其易受环境的影响,效果并不明显,还有就是采用 camshift 跟踪算法 + kalman 滤波算法对随机物体进行跟踪,但是它对于高速运动的物体,或运动不具有线性性质的物体跟踪存在很大的弊端,不具有很好的适应性,对此我们采用了更高级的跟踪算法,基于卡拉曼滤波的粒子滤波算法,该算法对于随机运动的物体的跟踪具有优良的效果,同时可以跟踪多个物体,可以满足手势识别的需求。
对于手势的识别我们采用了先对指尖进行定位的方式,简单的采取以指尖数作为静态特征的方法,该方法准确度高且基本没有错误,另外一个方法就是采用提取特征向量通过支持向量机的形式对手势进行分类,经过实验,该方法识别的手势较多,如果输入标准,可以高达二十多种,但是对环境的要求要高些,然而,在我们的系统中由于对静态手势的种类的要求并不复杂,故采用了前一种方法。
动态手势的识别,根据目前的情况,并不需要太复杂的功能识别,只需完成对手势质心的追踪即可,相邻两帧图像中的有效轮廓质心位置取差即可获得动态特征向量。
项目中两个最为关键的部分:
- 手势轮廓的准确完整的提取和分离
- 对定位的手势轮廓进行高效准确的跟踪
1. 相关的基础知识
图片在计算机中的数据表示形式:
- 像素的格式
- 图片文件的格式较为多样,如 jpg,bmp,png,gif
- 图片的存储格式 :矩阵
- 图像的文件格式: 图像头 ,信息头 ,颜色板 ,图像具体信息(像素)
矢量的格式 图像放大具有保真性
颜色空间的两种种主要的表示方法:
- RGB
- HSV (色调(hue),饱和度 (saturation),亮度 (value)
2. 图像预处理
在对图像中的皮肤部分进行提取之前为了能够得到更好的效果,需要对图像进行必要的图像处理,去掉椒盐噪声,并且使图像的颜色接近的区域更加连续。在提取图像中的之前,有必要使得图像的边缘更加清晰,这样不仅可以提高识别的准确度 而且可以保证算法的稳定性。
两种主要的处理方法:
- 中值滤波
- 高斯滤波
高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,人们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教 材会在很早的时候介绍 Gauss 滤波器,用于得到信噪比 SNR 较高的图像(反应真实信号)。与此相关的有 Gauss-Laplace 变换,其实就是为了得 到较好的图像边缘,先对图像做 Gauss 平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积空域卷积。
3.根据肤色提取手势轮廓, 对图片进行形态学处理 (腐蚀与膨胀 开运算与闭运算)
人类的肤色颜色空间 HSV 范围:
- H (0, 40) U (150,180) - S (30, 170)
- V (30,256)
4. 提取轮廓,计算轮廓的各种特征(本身特征)
- 轮廓的质心
- 轮廓的最短最长径长
- 轮廓的外接圆(圆心和半径)
- 轮廓的周长和面积
- 轮廓在图像中的矩形框位置
- 轮廓的矩形框长宽比和质心到长向的距离比(去除伪轮廓时需要);
- 轮廓的基于质心向外等间距的九维特征向量
- 轮廓的外包络点集合
- 轮廓的点集合
- 轮廓的角点检测(角点集合)
- 轮廓的各阶矩
- 轮廓的有效的特征向量的提取
- 手指指尖的定位
5. 定位跟踪
6. 静态手势识别
- 采用根据特征向量,支持向量机的形式分类
- 根据指尖的个数(目前此种方法准确度较高)
7. 动态手势识别
目前尚不需要实现过于复杂的功能(只需获得当前轮廓的质心即可),相邻帧间的轮廓的质心位置变化可得动态特征向量。如果需要扩展,有两种可供选择的方式:
- 统计并保存有效轮廓质心的位置,形成轨迹,与模版进行对比,或者采用与文字识别同样方式取得轨迹特征向量,以支持向量机的方式进行分类识别。
- 根据动态特征向量,转换为角度的方式进行动态特征编码,采集编码序列,通过 Hmm 方式进行识别或者采用取间隔的动态特征编码作为特征向量,采用支持向量机的形式进行识别。
手势识别之静态手势识别及手势跟踪展示: