一种基于视频输入的获取隔空手势轨迹的方法
【技术领域】
[0001] 本发明属于计算机人机交互界面领域,具体设及一种基于视频输入的获取隔空手 势轨迹的方法。
【背景技术】
[0002] 在像平面上,每帖手势有一个重屯、位置,当手运动时,各帖手势重屯、位置形成一个 轨迹,该轨迹就是手势轨迹。目前获取手势轨迹主要方法是采用卡尔曼滤波器或粒子滤波 器等跟踪器跟踪每帖手势重屯、位置,进而得到手势轨迹。该方法存在的主要问题是;它们需 要逐帖处理,所W速度慢,延迟严重,影响手势轨迹的实用性。
【发明内容】
[0003] 本发明的目的在于解决上述现有技术中存在的难题,提供一种基于视频输入的获 取隔空手势轨迹的方法,利用摄像头输入用户手势,获取手势重屯、位置在像平面上形成的 二维轨迹。
[0004] 本发明是通过W下技术方案实现的:
[0005] 一种基于视频输入的获取隔空手势轨迹的方法,包括:
[0006] (1)输入总帖数m,用摄像头捕获n帖图像的数字序列,并且放到n帖摄像头捕获 的图像数据地G_Buffer[n]中;
[0007] (2)获取对应手势运动轨迹的白点的坐标集合白点数;
[000引 (3)获取每一帖手势的坐标值X,Y;
[0009] (4)判断帖数n>=m,如果是,则根据似利用B样条画出轨迹,然后转入步骤 妨;否则,返回到(1)继续执行;
[0010] (5)结束。
[0011] 所述步骤(2)是该样实现的:
[001引 (21)获取n帖中首帖图像的灰度信息,设为Grayia)U);
[0013] (22)获取其他n-1帖图像的灰度信息,设为Gray(i) (j),并判断化bs(Gray(i) (j)-Gray1 (i) (j)) <阔值是否成立;
[0014]似)如果f油s(Gray(i) (_j)-Grayl(;〇 (j)) < 阔值则Gray(i) (_]?) =0,否则 Gray(i) (j)保持不变;
[0015] (24)ZongGray(i) (j) =ZongGray(i) (j)+Gray(i) (j)'ZongGray(i) (j)记录叠加 后图像对应的各个像素的灰度值;
[0016] 侦)判断n帖是否执行完毕,如果否,则返回步骤(22),如果是,则判断 ZongGray(i) (j) > 255 是否成立,若是,则ZongGray(i) (j) = 255,否则ZongGray(i) (j) =0;
[0017](26)根据ZongGray(i)(j)的信息生成灰度图;
[0018](27)对所述灰度图进行膨胀;
[0019] (28)对灰度图进行细化;
[0020] (29)获取细化后生成白点的坐标X,Y值,并统计细化后的轨迹的白点的坐标X,Y 值,并记下该n帖的白点数,然后进行B样条拟合。B样条拟合是通过计算机图形学技术实 现的,通过B样条进行拟合可W使隔空手势运动轨迹平滑。
[0021] 所述步骤(26)是该样实现的:
[0022] (A1)输入图像叠加处理完后的各个像素点的灰度值,定义位图文件头、位图信息 头和调色板和位图数据信息;
[0023] (A2)新建由灰度值对应的灰度图;
[0024] (A3)依次对位图文件头、位图信息头和调色板进行赋值;
[0025] (A4)依次判断图像的灰度值,最后置成二值化,即若灰度值是0则为0,否则是 255;
[0026] (A5)将经过(A4)处理后的各个像素点的灰度值写入到(A2)所建的灰度图中。
[0027] 所述步骤(27)是该样实现的:
[002引炬1)输入指向图像序列的指针,宽,高,一行所占的字节数获得图像的首地址和图 像的高和宽;
[0029] 炬2)开辟一块内存缓冲区;
[0030] 炬3)定义一个一维数组:
[003UintB巧]=(1,0,1,
[0032] 0,0,0,
[0033] 1,0,1};
[0034] 炬4)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2 列开始,将指向的目标图像的像素的值赋值给目标点像素点,检查该个像素点,利用结构元 素数组判断该像素点的前一点、后一点、上一点、下一点该四点中是否有相交点,如果有,贝U 将检查的像素点的灰度值赋值为0,否则保持不变,或者定义不同形状的结构元素来进行膨 胀,即检查结构元素中为1所对应的像素点是否与物体相交不为空,如果是,则保留该点, 否则置为255 ;
[0035] 炬5)循环步骤炬4),直到处理完原图的全部像素点;
[0036] 炬6)将经过炬5)处理后的结果暂存在内存缓冲区中;
[0037] 炬7)将结果从内存缓冲区复制到原图的数据区。
[003引所述(28)是该样实现的:
[0039] (C1)输入指向图像序列的指针pImageBuffer,获取图像的首地址及图像的高和 宽、5X5相邻区域像素值S模板;
[0040] 似)开辟一块内存缓冲区,并初始化为0 ;
[0041] (C3)如果当前像素值小于255则跳过该像素;
[00创 (C4)如果当前像素为255,则是手势轨迹,则定义一个5X5的结构元素,计算5X5 的结构元素中各个位置上的值,为防越界,不处理外围的2行、2列像素,从第3行第3列开 始判断,将S模板中屯、覆盖在待判断的像素上,如果S模板所覆盖的位置下,像素小于255, 则为背景,则将S模板同样的位置置为1,否则置成0;
[0043] (C5)依次判断S模板点是否同时满足4个判断条件,如果满足W上4个条件,则删 除该点,否则保留像素点,并置该点的像素值为255,直至所有的像素点处理完一遍;
[0044] (C6)循环执行(C5)直至没有需要删除的点为止;
[0045] (C7)将结果保存到内存缓存区
[0046] (C8)将结果由内存缓冲区复制到原图的数据区。
[0047] 所述步骤攸)中的4个判断条件为:
[0048]条件1 ;2<=N(S巧][2])<=6 ;
[0049]条件2 ;T(S巧]凹)=1 ;
[0050] 条件 3 ;S山巧]*S[2] [1]*S[2]巧]=0 同时T(S[1]巧])! = 1 ;
[0051] 条件4 ;S[1] [2]巧巧]山巧巧][2] =0同时T(S巧]山)! = 1;
[0052] 其中,N(S巧]凹)表示WS巧][2]为中屯、的3X3领域内目标像素的个数;取其中 的3X3领域WS凹凹为中屯、点,则T(S凹巧])表示序列S凹凹周围8领域元素首尾 相接形成序列中从0到1的变化次数,其它依此类推。
[0化3] 所述步骤(29)中的获取细化后生成白点的坐标X,Y值是该样实现的:
[0054] 值1)输入指向细化后图像的指针pImageBuffer,根据当前图像的指针对图像的 每行每列进行扫描操作;
[0055] 值2)如果扫描到的像素值是255,则记录下该点的像素坐标,并且将白点数加一;
[0化6] 值3)依次执行值2)的操作,直到所有的像素值都扫描完为止;
[0057] 值4)输出当前图像的白点的个数。
[0化引所述步骤(29)中进行B样条拟合是该样实现的:
[0059] 巧1)首先使得端点处的导数和端点的两个控制点的连线平行,根据白点的坐标来 更新第一个点和最后一个点的坐标X,Y,间隔取t= 1. 0/1000 ;
[0060] 巧2)每两个点进行均等插值,根据S次B样条的基函数的公式来计算基函数a,b, c,d;
[0061] 巧3)利用给定的白点的坐标X,Y和基函数,根据B样条插值曲线的公式分别计算 出插值点的坐标X,Y,其中用到了S次B样条曲线的公式,利用上面的公式,取n= 3,则有 S次B样条曲线的基函数如下:
[0062]
[0063] 巧4)将计算出的X,Y值进行连线;
[0064] 巧。如果所有的白点都遍历完成,则结束,否则返回步骤巧。。
[00化]所述步骤(3)是该样实现的:
当前第1页
1 
2 
3 
4