发明名称 一种基于特征向量的静态手势识别方法
摘要 本发明一种基于特征向量的静态手势识别方法,可概括为:首先在YCbCr颜色空间中用肤色特性对手势进行分割处理,然后选取特征向量描述手势,进行长度和角度归一化处理,根据特征向量确定手势中指尖的位置,最终用指尖和手势中心的相对位置对手势进行识别。该方法具有旋转不变性和缩放不变性,有很好的实时性,满足人机交互应用要求。
申请公布号 CN101901350A 申请公布日期 2010.12.01
申请号 CN201010238368.3 申请日期 2010.07.23
申请人 北京航空航天大学 发明人 毛峡;姜磊
分类号 G06K9/62(2006.01)I;G06T7/00(2006.01)I 主分类号 G06K9/62(2006.01)I
代理机构 代理人
主权项 一种基于特征向量的静态手势识别方法,其特征在于,包括下述几个步骤:步骤1:手势分割采用Logitech QuickCam Pro9000摄像头采集图像,获得图像尺寸为320×240,图像格式为JPEG,拍摄背景无类似肤色的区域,被拍摄的用户穿非肤色长袖衣服;对得到的图像,首先从RGB颜色空间转化到YCbCr颜色空间,之后选择Cb、Cr分量的中心值和阈值,其中Cb分量中心值Cbmid=115,Cr分量中心值Crmid=145,阈值lthres=15,对输入图像的各像素计算其Cb、Cr值与中心值的欧式距离dist: <mrow> <mi>dist</mi> <mo>=</mo> <msqrt> <msup> <mrow> <mo>(</mo> <mi>Cb</mi> <mo>-</mo> <msub> <mi>Cb</mi> <mi>mid</mi> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <mi>Cr</mi> <mo>-</mo> <msub> <mi>Cr</mi> <mi>mid</mi> </msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> </msqrt> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>若dist小于相应的阈值lthres,则将该像素的值设为1,否则将其值设为0,从而将输入图像转化为二值图像;对得到的二值图像进行一次腐蚀膨胀处理,并假定图像中最大连通区域为手势所在区域;步骤2:获得手势的中心、方向和边缘将手势图像转化为二值图像后,通过计算获得手势的中心、方向,并提取手势的边缘;由式(2)和式(3)计算手势中心点坐标x和y: <mrow> <mi>x</mi> <mo>=</mo> <mfrac> <mrow> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </msubsup> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </msubsup> <mi>jB</mi> <mo>[</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>]</mo> </mrow> <mrow> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </msubsup> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </msubsup> <mi>B</mi> <mo>[</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>]</mo> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow> <mrow> <mi>y</mi> <mo>=</mo> <mfrac> <mrow> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </msubsup> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </msubsup> <mi>iB</mi> <mo>[</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>]</mo> </mrow> <mrow> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </msubsup> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </msubsup> <mi>B</mi> <mo>[</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>]</mo> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>式中,B[i,j]表示图像中第i行第j列的值,图像的大小为n×m;手势方向θ的计算式如下: <mrow> <mi>&theta;</mi> <mo>=</mo> <mfrac> <mn>1</mn> <mn>2</mn> </mfrac> <msup> <mi>tan</mi> <mrow> <mo>-</mo> <mn>1</mn> </mrow> </msup> <mo>[</mo> <mfrac> <mrow> <mn>2</mn> <msub> <mi>&mu;</mi> <mn>11</mn> </msub> </mrow> <mrow> <msub> <mi>&mu;</mi> <mn>20</mn> </msub> <mo>-</mo> <msub> <mi>&mu;</mi> <mn>02</mn> </msub> </mrow> </mfrac> <mo>]</mo> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>式中,μ11、μ20、μ02为图像的二阶中心矩;用Canny算子从二值图像中提取手势的边缘;步骤3:选取特征向量计算手势中心点和边缘各点连线的角度,找出角度与手势方向角最接近的点,以该点为起始点,对手势边界进行n等分,得到边界上的n个点;以手势中心点为起始点,边界上的n个点之一为终止点构造向量,用这n个向量来表征该手势;为消除输入图像中手势的尺寸对识别的影响,选取特征向量中长度最长的向量,将其长度设置为100,将其它向量的长度归一化到(0,100);采用n=60;步骤4:定位指尖位置将步骤3得到的特征向量视为一个首尾相连的向量组,消除起始点选择对向量组的影响,保证特征向量对旋转不敏感;从向量组中求出局部极大值和局部极小值,其中局部最大值对应的点为指尖点候选点,而其相邻的两个局部极小值点的角度差为手指所在区域的角度;选定手指长度阈值lth和角度阈值θth,用指尖到手势中心的长度l和手指所在区域的角度θ与设定阈值相比较来判定指尖候选点是否为指尖;当l>lth且θ<θth时,则该特征向量的终点所在位置为指尖位置,否则该点为非指尖;采用lth=53,θth=1.87;步骤5:手势识别根据步骤2和步骤4得到手势中心点和指尖位置,构造一组以手势中心点为起点,指尖位置为终点的向量;找出这些向量中两两间最大的夹角,以夹角最大的两个向量中的一个为起始向量,将其角度设置为0,在保证各向量相对角度不变的前提下,使其它向量与起始向量的逆时针夹角和之和最小,得到唯一的归一化结果;得到角度归一化的向量组后,则确定了手势包含的手指数;根据手指的相对位置和长度信息,对包含相同手指数的不同手势进行区分。
地址 100191 北京市海淀区学院路37号