面向人机交互的手部信息提取是利用一系列的图像处理及聚类方法, 将图像中的指尖点位置、手指指向等信息准确地识别出来, 是构建人机交互指令的前置步骤[1-2], 其结果直接影响到计算机对当前手势指令的判断.限于计算机视觉技术的发展, 早期国内外学者对指尖点位置的获取往往采用佩戴颜色手套的方法[3], 该方法降低了体验感受的同时, 也限制了基于手势识别的人机交互技术的应用.现有的比较成熟的手指信息检测方法主要有两种:模板匹配方法[4]和轮廓特征识别方法[5].其中模板匹配方法是设定一个通常为类似指尖形状的椭圆形模板, 扫描出二值图像中符合模板形状特征的区域, 从而实现指尖的定位.由于其原理的限制, 扫描高分辨率图像速度较慢[3],同时也存在一定的错检率.轮廓特征识别方法则通过获取二值图像中关于手部轮廓的Freeman链码[6], 遍历轮廓点序列, 按照预设规则计算各点的曲率半径, 选取其中较小的几个点作为指尖的备选点, 再通过向量积或凸包算法筛除部分非指尖点.该方法计算简单, 易于实现, 但对特定手势存在一定的漏检率.
针对上述两种指尖检测方法中的漏检及错检问题, 本文设计并实现了一种新的基于手指部分轮廓的直线特征指尖检测方法, 此方法自适应性强, 能够对不同方向的指尖点及手指直线进行精确高效的识别.经实验验证, 该方法具有较高的准确性和实时性, 可应用于开发相关人机交互系统.
1 轮廓提取及平滑处理本文核心思想是基于手指部分轮廓的直线特征, 利用轮廓图像检测出类直线的区域, 通过对各类直线区域的组合, 实现对指尖点的判定.然而对输入图像进行基于肤色的二值化处理[7]后得到的轮廓Freeman链码[6]质量受光照环境影响比较严重, 边缘信息往往存在大量锯齿形缺陷.其结果并不能很好地反映手指部分的轮廓特征, 因此需对图像中的闭合轮廓进行平滑处理.
中值滤波方法是一种易于实现的非线性平滑方法, 其对轮廓中出现的小范围失真具有较好的平滑效果, 但对于范围相对比较大的轮廓失真, 则效果较差[8].针对本文中的应用, 采用一种改进的Douglas-Peucker(D-P)算法对手部轮廓进行处理.
D-P算法[9]是一种串行的平滑方法, 由特征点选取及轮廓平滑两部分构成.前者是选取闭合手部轮廓序列中任意一点作为起始点P0, 其余特征点记为P1, …, Pn, 则P1, …, Pn满足:
(1) |
其中, Cj为Pi-1位于轮廓序列中的位置; 当步长内所有点距直线Pi-1Cj+Step偏移量的最大值Dmax小于给定最大偏移量D时, Pi定义为Cj+Step; 假如步长内存在偏移量大于D的点时, Pi定义为取得最大偏移量的点Cj+max.
传统D-P平滑算法[10]力求曲线轮廓的平滑性, 但对于人机交互系统中, 以提取指尖点位置、手指指向为目的的手部轮廓预处理并不十分适用.首先, 多数人机交互系统对交互数据提取的实时性要求较高, 这意味着在D-P算法的第二阶段——轮廓平滑中应用的平滑函数不能过于复杂(通常采用Bézier曲线以及B样条曲线等), 且过于复杂的高精度轮廓对于以离散int型像素点坐标为输出的轮廓曲线缺少实际意义.其次, 本文核心思想在于将每一个可检测手指的两侧的直线区域进行聚类, 从而提取目的交互信息, 过于精确的轮廓信息反而对提高该区域识别准确率不利.因此, 本文采取拟合函数与步长(Step)相结合的自适应方式来选取平滑函数的指数.鉴于B样条曲线在拟合中的一些缺陷[10], 本文采用Bézier曲线对手部轮廓进行拟合.同时考虑到该系统的实时性, 手部轮廓平滑算法流程如图 1所示.
对于第i步实现的实际步长Si而言, 平滑函数的指数需满足
(2) |
在算法的平滑阶段采用最高三次Bézier曲线, 并根据第i步的实际步长确定n的取值.平滑结果如图 2所示, 经反复试验选定Dmax=7, Step=70, 图 2c能反映出易于识别的手指部分轮廓几何特征.
经上述基于D-P的轮廓平滑算法处理后, 手部轮廓图像中由于光照、阴影以及噪声带来的轮廓缺陷被较好地修正.从手部轮廓的几何特征来看, 每根手指由两条类直线区域和中间的一段圆弧构成.因此, 如何从轮廓序列中提取所有类直线区域, 成为识别手指区域的关键.
对于直线区域的判定, 考虑采用如下方法定义轮廓上的一段直线区域:对于轮廓序列{An, …, Am}上的任意起始检测点Ai, 给定检测点前跨度lb及检测点后跨度la, 则该序列构成直线区域的条件为
(3) |
其中, α0为给定的容错阈值.实际实现中, 为保证能识别更接近真实长度的直线区域, 跨度lb和la设置为动态值, 即当检测点Ai位于或接近于起点An时, 取lb < la; 当Ai处于轮廓序列{An, …, Am}中段时, 取lb=la; 当Ai位于序列末段时或不满足式(3)时, 取lb>la作为替代检测条件进行再次检测.
由基于Freeman链码获取的轮廓序列性质决定, 当闭合轮廓序列的起始点恰好位于一段直线区域内时, 且当前区域被起始点分隔成的两段直线均不满足给定的最小直线长度Lmin=m-n时, 会造成该区域的漏检.因此, 在实现过程中, 应对轮廓序列进一步处理, 使得更新后轮廓序列起点位置位于图像边缘区域, 且对在此区域检测到的直线进行排除.检测结果如图 3a所示.
在直线检测过程中发现, 由于上述检测方法的限制, 往往在检测直线过程中出现不连续现象, 其原因主要来自于两方面:其一是指关节位置轮廓凸起, 其二是手部轮廓缺陷.然而改变上述直线判定条件并不能杜绝这种情况的发生, 相反, 还会带来一定的识别错误, 即将曲率较大的轮廓部分识别为直线区域.为解决此问题, 需将原本处于同一直线区域由于某种原因出现中断的多条直线进行聚类.
假定在轮廓序列{An, …, Am}中存在满足式(3)的直线集合L={L1, …, Ln}, 那么可以判定L处于同一直线上的条件为
(4) |
(5) |
式(4)为任意两直线夹角约束, β0为给定的夹角最大允许值.式(5)为累计偏转约束, γ0为累计偏转最大允许值.
由于β0和γ0的存在, 基于上述聚类方法得出的直线序列点集合Li={(x1, y1), …, (xn, yn)}中, 首尾两点连线不能较好地反映出该段轮廓序列的特征.因此, 考虑采用计算量较小的最小二乘法对该序列中的点集合进行直线拟合.拟合后直线L′i参数方程为
(6) |
拟合后的直线与轮廓重合的两端点由集合Li中的始末点至L′i的垂足决定.聚类拟合后的直线区域如图 3b所示.
3 手指方向及指尖点判定上述算法得到的基于手部轮廓的直线区域集合Lp={L1, …, Lm}包含手指侧边直线轮廓以及满足式(2)的掌部轮廓.为得到手指指向及指尖点的精确位置, 需将每根手指外侧形成的两条直线进行分离配对.由于该算法为串行, 序列Lp={L1, …, Lm}中, 处于同一手指两侧的直线对Li和Lj需满足如下条件:
1) 两直线位于序列Lp={L1, …, Lm}中的位置相邻.
2) 两直线夹角小于预设值θ0.
3) 对于二值图像, 定义空白区域为0, 手部区域为1, 为过滤手臂, 两直线中点连线所经过的像素点为1的比率高于预设值P, 总数小于Q.
如图 4所示, 经上述条件筛选后的直线配对即为同一手指两侧的直线轮廓, 该对直线的角平分线即为手指所指向的方向.而指尖点则位于两直线所夹的部分手部轮廓序列B中, 检测到的第i根手指指尖Fi=(xi, yi)可用如下方法得出:
(7) |
为验证算法的性能, 采用搭载i7-4790@3.6 GHz处理器的图形工作站, 以Microsoft Visual Studio 2012, OpenCV2.4.11为开发工具, 利用Intel RealSense SR300摄像头对不同手势和手指方向的分辨率为720P的手部图像进行检测.
图 5所示为用于检测的图像序列示意, 其中包括了1~5根手指分别在0°, 45°, 90°, 135°和180°五个不同角度的不同姿势.在表 1所示的参数下, 检测准确率如表 2所示, 在实验室日光灯环境下, 综合准确率达到了93.5%, 其中, 除5根手指以外的检测错误主要来自于未完全握紧的手指, 其在轮廓特征中同样符合本文算法的判定条件.而5根手指的检测错误则主要来自于对拇指的检测失败, 其原因在于, 过于弯曲的拇指往往会造成算法在该区域无法检测出直线区域.
对于算法的实时性, 本文算法的运行速度稳定保持40帧/s以上, 已经满足实时性应用.其中耗时最多的部分是轮廓序列检测, 约10 ms/帧, 轮廓序列平滑部分约2~3 ms/帧, 算法的其余部分则平均耗时10 ms左右.对于手指指向的检测也与预定姿态较为贴近, 平均误差在10°以内.
5 结语本文提出了一种新的指尖及手指指向检测方法.该方法的核心是通过检测手部轮廓序列中的直线区域来实现同时对指尖及手指指向的检测.对于光照等影响带来的轮廓缺陷, 能通过前置的轮廓平滑算法较好地加以修复, 从而为检测结果的高准确率提供保障.与此同时, 所开发的检测系统也满足了实时性要求.
但该算法存在预设参数较多等缺点, 针对不同的光照环境、不同的图像采集设备, 往往需要部分设定不同参数, 为算法的普适性带来阻碍.未来将针对该问题做进一步的研究, 以自适应参数的形式完善该算法.
[1] |
Li K, Zhang X. A new fingertip detection and tracking algorithm and its application on writing-in-the-air system[C]//IEEE International Congress on Image and Signal Processing. Dalian, 2014: 457-462.
|
[2] |
Shih C L, Lee W Y, Ku Y T.
A vision-based fingertip-writing character recognition system[J]. Journal of Computer & Communications, 2016, 4(4): 160–168.
|
[3] |
Wang R Y, Popovic' J.
Real-time hand-tracking with a color glove[J]. ACM Transactions on Graphics, 2009, 28(3): 1–8.
|
[4] |
俞博. 基于手指角度特征的手势识别技术研究[D]. 成都: 西华大学, 2014.
( Yu Bo. Research of gesture recognition based on Finger angle characteristics[D]. Chengdu: Xihua University, 2014. http://cdmd.cnki.com.cn/article/cdmd-10623-1014388609.htm ) |
[5] |
Zabri A B M, Samad R, Pebrianti D, et al. Finger application using K-Curvature method and Kinect sensor in real-time[C]// IEEE International Symposium on Technology Management and Emerging Technologies. Langkawi, 2015: 218-222.
|
[6] |
Azmi A N, Nasien D, Omar F S.
Biometric signature verification system based on Freeman chain code and k-nearest neighbor[J]. Multimedia Tools & Applications, 2016, 1(1): 1–15.
|
[7] |
Grilo F, Figueiredo J, Dias O.
Adaptive method for improvement of human skin detection in colour images[J]. International Journal of Computer Applications in Technology, 2014, 49(1): 1–11.
DOI:10.1504/IJCAT.2014.059091 |
[8] |
刘国宏, 郭文明.
改进的中值滤波去噪算法应用分析[J]. 计算机工程与应用, 2010, 46(10): 187–189.
( Liu Guo-hong, Guo Wen-ming. Application of improved arithmetic of median filtering denoising[J]. Computer Engineering and Applications, 2010, 46(10): 187–189. DOI:10.3778/j.issn.1002-8331.2010.10.059 ) |
[9] |
Saalfeld A.
Topologically consistent line simplification with the Douglas-Peucker algorithm[J]. Cartography and Geographic Information Science, 1999, 26(1): 7–18.
DOI:10.1559/152304099782424901 |
[10] |
程立, 王江晴, 田微, 等.
改进D-P算法在图像轮廓平滑中的应用[J]. 计算机工程, 2012, 38(17): 232–234.
( Cheng Li, Wang Jiang-qing, Tian Wei, et al. Application of improved D-P algorithm in image edge smoothing[J]. Computer Engineering, 2012, 38(17): 232–234. ) |