发明名称 基于光流法的手势运动方向识别方法
摘要 基于光流法的手势运动方向识别方法,通过VGA分辨率的普通摄像头获取计算机前的图像序列并进行预处理;肤色样本在CbCr平面上较为集中地分布在近似椭圆的区域中,通过像素点在CbCr平面上是否落在此椭圆域来确定是否肤色;对肤色检测后的二值图像进行形态学重建,采用形态学中的闭运算;对各个白色连通区域进行标记并求面积,然后按照面积从大到小排列,保留三个最大的连通区域;降低图像的分辨率,并使用金字塔LK光流法获取肤色区域的光流运动矢量;对光流运动矢量做方向判断;每隔两帧判断一次方向,两次一致才给出结果;在熟悉并掌握本发明的手势运动操作规律后,在摄像头前进行手势的上下左右四个方向的运动,本发明可以完成实时交互并且手势运动方向识别正确率可在95%以上。
申请公布号 CN104331151A 申请公布日期 2015.02.04
申请号 CN201410535947.2 申请日期 2014.10.11
申请人 中国传媒大学 发明人 杨盈昀;茹家馨;姜秀华
分类号 G06F3/01(2006.01)I;G06K9/60(2006.01)I;G06T7/20(2006.01)I 主分类号 G06F3/01(2006.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 沈波
主权项 基于光流法的手势运动方向识别方法,其特征在于该方法的实施流程如下:步骤1、通过VGA分辨率的普通摄像头获取计算机前的图像序列并进行预处理,包含GrayWorld彩色均衡处理与高斯平滑操作;先计算图像的R、G、B三分量各自的平均值avgR、avgG、avgB,获得图像的平均灰度值avgGray=(avgR+avgG+avgB)/3,然后对于图像中的每个像素,调整其R、G、B分量成为R=R·avgGray/avgR,G=G·avgGray/avgG,B=B·avgGray/avgB,最后将各像素的R、G、B值调整到可显示范围,若分量值大于255,调整为255;在GrayWorld处理后,对图像进行高斯平滑操作来消除摄像头采集过程中产生的随机噪声;步骤2、YCbCr域椭圆肤色检测;肤色样本在CbCr平面上较为集中地分布在近似椭圆的区域中,所以可以通过像素点在CbCr平面上是否落在此椭圆域来确定是否肤色;肤色椭圆区域由式(1)表示,其中c<sub>x</sub>=109.83,c<sub>y</sub>=152.02,=2.53,ec<sub>x</sub>=1.60,ec<sub>y</sub>=2.41,a=25.39,b=14.03,x与y的取值由式(2)所示;<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mfrac><msup><mrow><mo>(</mo><mi>x</mi><mo>-</mo><msub><mi>ec</mi><mi>x</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><msup><mi>a</mi><mn>2</mn></msup></mfrac><mo>+</mo><mfrac><msup><mrow><mo>(</mo><mi>y</mi><mo>-</mo><msub><mi>ec</mi><mi>y</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><msup><mi>b</mi><mn>2</mn></msup></mfrac><mo>=</mo><mn>1</mn><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000585226850000011.GIF" wi="1087" he="165" /></maths><maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mfenced open='(' close=')'><mtable><mtr><mtd><mi>x</mi></mtd></mtr><mtr><mtd><mi>y</mi></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><mi>cos</mi><mi>&theta;</mi></mtd><mtd><mi>sin</mi><mi>&theta;</mi></mtd></mtr><mtr><mtd><mo>-</mo><mi>sin</mi><mi>&theta;</mi></mtd><mtd><mi>cos</mi><mi>&theta;</mi></mtd></mtr></mtable></mfenced><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mi>C</mi><mi>b</mi></msub><mo>-</mo><msub><mi>c</mi><mi>x</mi></msub></mtd></mtr><mtr><mtd><msub><mi>C</mi><mi>r</mi></msub><mo>-</mo><msub><mi>c</mi><mi>y</mi></msub></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000585226850000012.GIF" wi="1145" he="172" /></maths>在计算过程中,由图像像素点的Cb、Cr值算出x与y值,当x与y值落在式(1)所表示的椭圆区域,则令图像像素值为1,否则为0,这样可以得到肤色像素点为白色,非肤色像素点为黑色的二值图;步骤3、对肤色检测后的二值图像进行形态学重建,采用形态学中的闭运算;在数学形态学中,腐蚀是将边界的像素点缩小至目标物体内部的一个像素点子集,消除图像中目标物体的边界;膨胀是将图像中的目标物体的像素点扩大至周围的一个像素点子集,使周围的像素点的值与该像素点保持一致;单独对图像膨胀或者腐蚀都或多或少对图像造成损害,将膨胀和腐蚀结合在一起可以降低对图像造成的损害,闭运算是对图像进行先膨胀后腐蚀,可以填补图像中的空洞,连接细小的挨在一起的物体;对步骤2得到的二值图像进行闭运算可以得到人脸与人手是两个白色清晰连通区域的图像;步骤4、对各个白色连通区域进行标记并求面积,即计算各个白色连通区域含有多少个像素点,然后按照面积从大到小排列;如果画面中有较大的类肤色物体,例如与黄种人肤色几乎一致的棕黄色家具,也会形成一个较大的连通区域且其像素数量未知,所以需要保留像素数量排行前三位的连通区域,代表着人脸、人手与面积未知的干扰区域,其余所有连通区域全部作为无关信息进行剔除;步骤5、降低图像的分辨率,并使用金字塔LK光流法获取肤色区域的光流运动矢量;Lucas‑Kanade光流法的公式如式(3)所示:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mfenced open='{' close=''><mtable><mtr><mtd><mi>A</mi><mo>=</mo><msup><mrow><mo>[</mo><mo>&dtri;</mo><mi>I</mi><mrow><mo>(</mo><msub><mi>x</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mo>&dtri;</mo><mi>I</mi><mrow><mo>(</mo><msub><mi>x</mi><mi>n</mi></msub><mo>)</mo></mrow><mo>]</mo></mrow><mi>T</mi></msup></mtd></mtr><mtr><mtd><mi>W</mi><mo>=</mo><mi>diag</mi><mo>[</mo><mi>W</mi><mrow><mo>(</mo><msub><mi>x</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>W</mi><mrow><mo>(</mo><msub><mi>x</mi><mi>n</mi></msub><mo>)</mo></mrow><mo>]</mo></mtd></mtr><mtr><mtd><mi>b</mi><mo>=</mo><mo>-</mo><msup><mrow><mo>(</mo><msub><mi>I</mi><mi>t</mi></msub><mrow><mo>(</mo><msub><mi>x</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><msub><mi>I</mi><mi>t</mi></msub><mrow><mo>(</mo><msub><mi>x</mi><mi>n</mi></msub><mo>)</mo></mrow><mo>)</mo></mrow><mi>T</mi></msup></mtd></mtr><mtr><mtd><mi>v</mi><mo>=</mo><msup><mrow><mo>[</mo><msup><mi>A</mi><mi>T</mi></msup><msup><mi>W</mi><mn>2</mn></msup><mi>A</mi><mo>]</mo></mrow><mrow><mo>-</mo><mn>1</mn></mrow></msup><msup><mi>A</mi><mi>T</mi></msup><msup><mi>W</mi><mn>2</mn></msup><mi>b</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000585226850000021.GIF" wi="1196" he="331" /></maths>其中,W(x)表示窗口权重函数,它使邻域中心部分对光流约束产生的影响比外围部分更大,v=(u,v)<sup>T</sup>是要求解的光流运动信息,I(x,y,t)是图像点(x,y)在时刻t的照度,u和v是该点光流的水平和垂直分量,代表着运动信息,<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mi>u</mi><mo>=</mo><mfrac><mi>dx</mi><mi>dt</mi></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000585226850000022.GIF" wi="182" he="137" /></maths><maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><mi>v</mi><mo>=</mo><mfrac><mi>dy</mi><mi>dt</mi></mfrac><mo>,</mo><msub><mi>I</mi><mi>x</mi></msub><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>I</mi></mrow><mrow><mo>&PartialD;</mo><mi>x</mi></mrow></mfrac><mo>,</mo><msub><mi>I</mi><mi>y</mi></msub><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>I</mi></mrow><mrow><mo>&PartialD;</mo><mi>y</mi></mrow></mfrac><mo>,</mo><msub><mi>I</mi><mi>t</mi></msub><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>I</mi></mrow><mrow><mo>&PartialD;</mo><mi>t</mi></mrow></mfrac><mo>,</mo><mo>&dtri;</mo><mi>I</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><msup><mrow><mo>(</mo><msub><mi>I</mi><mi>x</mi></msub><mo>,</mo><msub><mi>I</mi><mi>y</mi></msub><mo>)</mo></mrow><mi>T</mi></msup><mo>;</mo></mrow>]]></math><img file="FDA0000585226850000023.GIF" wi="1242" he="144" /></maths>金字塔Lucas‑Kanade光流法采用常用的LK光流法算法加入高斯金字塔迭代方法,即构造图像序列的一个金字塔,高层是低层图像的下采样形式,图像分解到一定层数时,相邻帧之间的运动量就会变得足够小,满足LK光流法的局部约束条件;在金字塔的最高层计算光流,然后将得到的运动估计结果作为下一层金字塔的起始点,重复迭代这个过程一直到金字塔的底层,即具有原始分辨率的图像,这样可以实现对更快更长的运动跟踪;步骤6、对光流运动矢量做方向判断;光流运动矢量可以分为水平运动分量u和垂直运动分量v;对相邻两帧图像做光流法操作获得的各像素的u与v值做这样的判定:式(4)~(7)分别表示像素点向右、左、上、下运动;当运动方向一致的像素数量超过一定的阈值,则可以判定手部的运动方向;u&gt;10 &amp; ‑10&lt;v&lt;10   (3)u&lt;‑10 &amp; ‑10&lt;v&lt;10   (4)v&gt;10 &amp; ‑10&lt;u&lt;1   (5)v&lt;‑10 &amp; ‑10&lt;u&lt;10   (6)将运动方向一致的像素数的阈值设定为图像像素总数的二十分之一,在QVGA分辨率下这个阈值为3840,例如运动方向判定为向左的像素数超过了3840,而其他方向的像素数远少于3840,则判定手部运动方向为左移;步骤7、每隔两帧判断一次方向,两次一致才给出结果。
地址 100024 北京市朝阳区定福庄东街1号