一种基于视频输入的获取隔空手势轨迹的方法
【技术领域】
[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)是该样实现的:[0066] (F1)输入帖数n,n帖图像序列,获取n帖中首帖图像的灰度信息,设为GraylW (j);
[0067](哟获取其他n-1帖图像的灰度信息,设为Gray(i) (j),并判断f油s(Gray(i) (j)-Gray1 (i) (j))<阔值是否成立;
[0068]脚)如果f油s(Gray(i) (_j)-Grayl(;〇 (j)) < 阔值,则Gray(i)(_]?) = 0,否则 Gray(i)(j)保持不变;
[0069] (E4)ZongGray(i) (j) =ZongGray(i) (j)+Gray(i) (j),ZongGray(i) (j)记录叠加 图像对应的各个像素的灰度值;
[0070] (顿判断n帖是否执行完毕,如果否,则返回步骤(F2),如果是,则判断 ZongGray(i) (j) > 255 是否成立,若是,则ZongGray(i) (j) = 255,否则ZongGray(i) (j) =0 ;
[0071] (F6)根据ZongGray(i) (j)的信息生成灰度图;
[0072] (F7)对灰度图进行膨胀;
[0073] (F8)对灰度图进行细化;
[0074] (F9)统计细化后的轨迹的最后白点的坐标X,Y值和统计的点数;
[0075] (F10)记录该n帖处理完成的最后一个白点的坐标;X,Y,即获得当前手势坐标。
[0076] 与现有技术相比,本发明的有益效果是;本发明方法速度快,与现有方法相比较, 降低了时延,缓解了轨迹生成的滞后现象。
【附图说明】
[0077] 图1本发明方法的总体步骤框图。
[0078]图 2 本发明方法中的intGes1:ureTrajecto;ry(intn,BYTE^BG_Buffer[n], doublexxin[],doubleyxin[])函数的执行步骤框图的上部分。
[0079]图 3 本发明方法中的intGes1:ureTrajecto;ry(intn,BYTE^BG_Buffer[n], doublexxin[],doubleyxin[])函数的执行步骤框图的下部分。
[0080]图 4 本发明方法中的voidQirrentCoordinates(intn,BYTE^BG_Buffer[])函 数的执行步骤框图的上部分。
[0081]图 5 本发明方法中的voidQirrentCoordinates(intn,BYTE^BG_Buffer[])函 数的执行步骤框图的下部分。
【具体实施方式】
[0082] 下面结合附图对本发明作进一步详细描述:
[0083] 假设程序一共运行了m帖,要再现该m帖的轨迹;而获取每一次轨迹的点的帖数假 设是n帖,其中地6_8证'61'[11]指的是n帖摄像头捕获的图像数据。
[0084] 其中在实现轨迹时设及到两个函数:
[00化]1)GesturelYajectoir(intn,BYTE*pBG_Buffer[n],doublexxin[],double yxin[])该个最终可W获取该n帖图像的拟合后的白点坐标值和白点数,其中xxin□和 yxin□分别保存的是每次手运动后细化的白点的X,Y坐标
[0086] 2)QirrentCoordinates(n,pBG_Buffer[n])实现每一帖图像的手势坐标X,Y值。
[0087] 总流程如图1所示,具体实现步骤如下:
[008引 (1)输入总帖数m,用摄像头捕获n帖图像的数字序列,并且放到地G_Buffer[n] 中;
[0089] (2)调用函数GestureTrajectory(intn,BYTE*地G_Buffer[n],doublexxin[], doubleyxin[])得到对应手势运动轨迹的白点的坐标集合白点数;
[0090] (3)调用函数QirrentCoordinates(n,pBG_Buffer[n])得到每一帖手势的坐标值 X,Y;
[0091] (4)判断帖数n>=m,如果是,则根据似利用B样条画出轨迹,否则,返回到(1) 继续执行。
[0092] 现有方法是从每个手势图像序列中跟踪得到一个点,所有点组成的位置序列形成 手势轨迹;本发明方法是每次处理多个(n个)手势图像序列,把n个手势图像序列叠加为 一个图,再求该叠加图的"中屯、线",该"中屯、线"就是该n帖手势图像的轨迹。
[009引 关于intGes1:ureTrajecto;ry(intn,BYTE*地G_Buffer[n],doublexxin[], doubleyxin[])函数的说明如下;
[0094] 输入;帖数n,n帖的图像序列
[00巧]输出沿个n帖进行叠加处理后的轨迹点的坐标X,Y
[0096] 其中的n是指每次处理手势运动轨迹的帖数
[0097] 地6_81^'6^11]是指向该n帖的图像序列的指针
[009引 xxin□是指保存该n帖轨迹的细化后的白点集的X坐标
[0099] yxin□是指保存该n帖轨迹的细化后的白点集的X坐标
[0100] 该个函数主要实现画轨迹的,它执行的流程图如图2和图3所示,实现的具体步骤 是:
[0101] (1)获取n帖中首帖图像的灰度信息,假设是Grayl(i)(j)
[010引 似获取其他n-1帖图像的灰度信息假设是Gray(i) (j),并判断f油S佑ray(i) (j)-Grayl(i)a)) <阔值是否成立(阔值设置是38)
[0103] (3)如果f油S(此函数表示求数X的绝对值)(Gray(i) (j)-Grayl(i) (j)) <阔值 则Gray(i) (j) = 0,否则Gray(i) (j)保持不变
[0104] (4)ZongGray(i) (j) =ZongGray(i) (j)+Gray(i) (j)
[01化](5)判断n帖是否执行完毕,如果否,则返回步骤(2),如果是,则判断ZongGray(i) (_]?)> 255,若是,则ZongGray(i) (_]?)= 255,否则ZongGray(i) (_]?)= 0 ;
[0106] (6)根据ZongGray(i) (j)的信息,利用Gr巧Valuetolmage (double ZongGray[] [400])生成灰度图;
[0107] (7)利用如3证3]1巧13]1评6]1拍113]1肖炬¥16*口11]13肖68证'61',;[]11讯;[化11,;[]11:116;[曲1:, intb}ftes化;rLine)对灰度图进行膨胀;
[0108] (8)利用lining炬YTE*pImageBuffer)对灰度图进行细化;
[0109] (9)利用intExtractFittin评oint炬YTE*pImageBuffer,inttempx[],int tempy[])实现获取细化后生成白点的坐标X,Y值,并统计细化后的轨迹的白点的坐标X,Y 值并记下该n帖的白点数。
[0110] 其中ZongGray (i) (j)记录叠加后图像对应的各个像素的灰度值。
[0111] 设及到的其它函数如下:
[0112](1) void Gr巧Valuetolmage (double ZongGray[][400])实现了由得到的灰度信 息来更改新建的灰度文件的头信息,最后生成灰度图像。其中ZongGray[][400]保存的是 该n帖图像处理后相叠加的像素的灰度值信息。
[011引输入;图像叠加处理完后的各个像素点的灰度值
[0114] 输出:由像素的灰度值生成对应的灰度图
[0115] 具体实现步骤:
[0116] ①定义位图文件头、位图信息头和调色板和位图数据信息
[0117] ②新建由灰度值对应的灰度图
[0118] ⑨依次给位图文件头、位图信息头和调色板依次赋值
[0119] ④依次判断图像的灰度值,最后置成二值化即若灰度值是0则为0,否则是255
[0120] ⑥最后将数据信息写入到上面新建的灰度图像
[0121] (2)void
QuanFangXiangPengZhang(BYTE*pImageBuffer,intwidth,intheight, intb^es化rLine)实现的是全方向膨胀。其中,pImageBuffer是指向图像序列的指针, wi化h指图像的宽度,hei曲t指图像的高度,bytes化rLine指图像每行所占的字节数。
[0122] 输入;指向图像序列的指针,宽,高,一行所占的字节数
[0123] 输出;经全方向腐蚀后的图像数据复制到原图的数据区
[0124] 具体实现步骤是:
[0125] ①获得图像的首地址和图像的高和宽
[01%] ②开辟一块内存缓冲区
[0127] ⑨为用到3X3的模块,所W需定义一个一维数组:
[012引 intB[9]= (1,0,1,
[0129] 0,0,0,
[0130] 1,0,1};
[0131] ④为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2列 开始,将指向的目标图像的像素的值赋值给目标点像素点,检查该个像素点,利用结构元素 数组判断该像素点的前一点、后一点、上一点、下一点该四点中是否有相交点,有则将检查 的像素点的灰度值赋值为0,否则保持不变。当然可W定义不同形状的结构元素B来进行膨 胀,方法是检查B中为1所对应的像素点是否与物体相交不为空,是则保留该点,否则置为 255.
[0132] ⑥循环步骤④,直到处理完原图的全部像素点
[0133] ⑧将结果暂存在内存缓冲区中;
[0134] ⑦将结果从内存复制到原图的数据区
[01巧](3)voidThining炬YTE*pImageBuffer)实现由叠加处理的n帖图像的信来实现 提取手势轨迹的骨干。
[0136] 输入;指向图像序列的指针pImageBuffer
[0137] 输出;经细化处理后的内存缓冲区数据复制到原图的数据区
[0138] 具体实现步骤是:
[0139] ①获取图像的首地址及图像的高和宽
[0140] ②开辟一块内存缓冲区,并初始化为0
[0141] ⑨如果当前像素值小于255则跳过该像素
[014引④如果当前像素为255,则是手势轨迹,则定义一个5X5的结构元素,计算5X5的 结构元素中各个位置上的值,为防越界,不处理外围的2行、2列像素,从第3行第3列开始 判断,将s模板中屯、覆盖在欲判断的像素上,如果S模板所覆盖的位置下,像素小于255,则 为背景,则在S同样的位置处置成1,否则置成0。
[0143] ⑥依次判断S模板点是否同时满足4个判断条件,是则删除该点,否则保留像素 点,并置成该点的像素值为255,直至所有的像素点处理完一遍;
[0144] ⑧循环执行⑥直至没有点可W删除为止
[0145] ⑦将结果保存到内存缓存区
[0146] ⑨将结果由内存缓冲区复制到原图的数据区。
[0147] (4)intExtractFittingPoint炬YTE*pImageBuffer,inttempx[],inttempy[]) 实现获取细化后生成白点的坐标X,Y值,其中tempx□和tempy□是用来保存细化的白点 的X,Y坐标集
[0148] 输入;指向细化后图像的指针pImageBuffer
[0149] 输出;输出当前图像的白点的个数
[0150] 具体实现步骤是:
[0151] ①根据当前图像的指针对图像的每行每列进行扫描操作
[0152] ②如果扫描到的像素值时255,则记录下该点的像素坐标,并且白点数加一。
[0153] ⑨依次执行②操作,直到所有的像素值都扫描完为止。
[0154]关于void QirrentCoordinates (int n,BYTE*地G_Buffer[])函数的说明;
[0巧5] 该函数实现显示每帖手势的坐标X,Y值
[0156] 输入;帖数n,n帖图像序列
[0157] 输出;每帖手势运行的坐标X,Y(放在数组中)。
[0158] 函数的流程图如图4和图5所示,实现的具体步骤是:
[0159] (1)获取n帖中首帖图像的灰度信息假设是Grayl (i) (j)
[0160] 似获取其他n-1帖图像的灰度信息假设是Gray(i) (j),并判断f油s(Gray(i) (j)-Gray 1 (i) (j))<阔值是否成立
[01做如果f油s佑ray (i) (j)-Grayl a) (j))<阔值(阔值设置为38)则Gray (i) (j)=0,否则Gray(i) (j)保持不变
[0162] (4)ZongGray (i) (j) = ZongGray(i) (j)+Gray(i) (j)
[0163] (5)判断最后是否ZongGray(i)(j)> 255,若是则ZongGray(i)(j)= 255,否则 ZongGray(i)(j) =0
[0164](6)根据ZongGray (i) (j)的信息生成灰度图 [01化](7)对灰度图进行膨胀
[0166](8)对灰度图进行细化
[0167] (9)统计细化后的轨迹的最后白点的坐标X,Y值和统计的点数。
[0168] 其中ZongGray(i) (j)记录叠加图像对应的各个像素的灰度值。
[0169]关于VoidBSpline(PT*pw,intn,CDOpdc)函数的说明
[0170] 该函数用实现的是由已知点的信息进行曲线的拟合,实现方法是S次B样条曲 线。
[0171] 输入;拟合的点集的坐标pw,拟合点数n,当前窗口的指针pdc
[0172] 输出进行曲线的逼近绘制而再现手势的轨迹
[0173]B样条曲线定义:给定m+n+1个平面或空间顶点Pi(i= 0,1,…,m+n),称n次参 数曲线段:
[0174]
,tG[0,U为第k段n次B样条曲线段化=0,1,…,m),该些曲线段的全体称为n次B样条曲线。其中,基函数Gi,"(t)定义为:
[0175] te [0, 1]
[0176] 主要思想;B样条曲线是在贝齐儿曲线的基础上发展而来的,主要区别再与他们 的混合函数不同,其中n为控制点个数减1,k为控制曲线连续性的阶。B样条曲线主要由 控制点位置、参数kW及所给定的节点值ti来决定。
[0177] 具体实现步骤为:
[0178] (1)首先使得端点处的导数和端点的两个控制点的连线平行,该样的要求端点值 确定,根据白点的坐标来更新第一个点和最后一个点的坐标X,Y,间隔取t= 1. 0/1000
[0179] (2)每两个点进行均等插值,根据S次B样条的基函数的公式来计算基函数a,b, c,d
[0180] (3)由给定的数据白点的坐标X,Y和基函数根据B样条插值曲线的公式分别计算 出插值点的坐标X,Y,其中用到了S次B样条曲线的公式,利用上面的公式,取n= 3,则有 S次B样条曲线的基函数如下:
[0181]
[0182] (4)由计算出的X,Y值进行连线
[018引 妨如果所有的白点都遍历完成,结束,否则执行步骤(2)。
[0184] 上述技术方案只是本发明的一种实施方式,对于本领域内的技术人员而言,在本 发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本 发明上述【具体实施方式】所描述的方法,因此前面描述的方式只是优选的,而并不具有限制 性的意义。
【主权项】
1. 一种基于视频输入的获取隔空手势轨迹的方法,其特征在于:所述方法包括: (1) 输入总帧数m,用摄像头捕获η帧图像的数字序列,并且放到η帧摄像头捕获的图 像数据 pBG_Buffer[n]中; (2) 获取对应手势运动轨迹的白点的坐标集合白点数; (3) 获取每一帧手势的坐标值X,Y ; (4) 判断帧数n >=m,如果是,则根据(2)利用B样条画出轨迹,然后转入步骤(5); 否则,返回到(1)继续执行; (5) 结束。2. 根据权利要求1所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述步骤(2)是这样实现的: (21) 获
取η帧中首帧图像的灰度信息,设为Grayl (i)(j); (22) 获取其他n-1帧图像的灰度信息,设为Gray⑴(j),并判断fabs (Gray (i) (j)-Grayl (i) (j)) <阈值是否成立; (23) 如果 fabs(Gray(i) (j)-Grayl(i) (j)) <阈值则 Gray(i) (j) = 0,否则 Gray(i) (j)保持不变; (24) ZongGray (i) (j) = ZongGray (i) (j)+Gray (i) (j),ZongGray (i) (j)记录叠加后图 像对应的各个像素的灰度值; (25) 判断η帧是否执行完毕,如果否,则返回步骤(22),如果是,则判断Z〇ngGray(i) (j) > 255 是否成立,若是,则 ZongGray (i) (j) = 255,否则 ZongGray (i) (j) = 0 ; (26) 根据ZongGray (i) (j)的信息生成灰度图; (27) 对所述灰度图进行膨胀; (28) 对灰度图进行细化; (29) 获取细化后生成白点的坐标X,Y值,并统计细化后的轨迹的白点的坐标X,Y值, 并记下这η帧的白点数,然后进行B样条拟合。3. 根据权利要求2所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述步骤(26)是这样实现的: (Al)输入图像叠加处理完后的各个像素点的灰度值,定义位图文件头、位图信息头和 调色板和位图数据信息; (A2)新建由灰度值对应的灰度图; (A3)依次对位图文件头、位图信息头和调色板进行赋值; (A4)依次判断图像的灰度值,最后置成二值化,即若灰度值是0则为0,否则是255 ; (A5)将经过(A4)处理后的各个像素点的灰度值写入到(A2)所建的灰度图中。4. 根据权利要求3所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述步骤(27)是这样实现的: (BI)输入指向图像序列的指针,宽,高,一行所占的字节数获得图像的首地址和图像的 高和宽; (B2)开辟一块内存缓冲区; (B3)定义一个一维数组: int B[9] = {1,0,1, 〇,〇,〇, 1,0,1}; (B4)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2列开 始,将指向的目标图像的像素的值赋值给目标点像素点,检查这个像素点,利用结构元素数 组判断该像素点的前一点、后一点、上一点、下一点这四点中是否有相交点,如果有,则将检 查的像素点的灰度值赋值为〇,否则保持不变,或者定义不同形状的结构元素来进行膨胀, 即检查结构元素中为1所对应的像素点是否与物体相交不为空,如果是,则保留该点,否则 置为255 ; (B5)循环步骤(B4),直到处理完原图的全部像素点; (B6)将经过(B5)处理后的结果暂存在内存缓冲区中; (B7)将结果从内存缓冲区复制到原图的数据区。5. 根据权利要求4所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述(28)是这样实现的: (Cl)输入指向图像序列的指针plmageBuffer,获取图像的首地址及图像的高和宽、 5X5相邻区域像素值S模板; (C2)开辟一块内存缓冲区,并初始化为0 ; (C3)如果当前像素值小于255则跳过该像素; (C4)如果当前像素为255,则是手势轨迹,则定义一个5X5的结构元素,计算5X5的 结构元素中各个位置上的值,为防越界,不处理外围的2行、2列像素,从第3行第3列开始 判断,将S模板中心覆盖在待判断的像素上,如果S模板所覆盖的位置下,像素小于255,则 为背景,则将S模板同样的位置置为1,否则置成0 ; (C5)依次判断S模板点是否同时满足4个判断条件,如果满足以上4个条件,则删除该 点,否则保留像素点,并置该点的像素值为255,直至所有的像素点处理完一遍; (C6)循环执行(C5)直至没有需要删除的点为止; (C7)将结果保存到内存缓存区; (C8)将结果由内存缓冲区复制到原图的数据区。6. 根据权利要求5所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述步骤(C5)中的4个判断条件为: 条件 1 :2 <= N(S[2] [2]) <= 6 ; 条件 2:T(S[2][2]) = 1 ; 条件 3 :S[1] [2]*S[2] [1]*S[2] [3] = 0 同时 T(S[1] [2]) ! = 1 ; 条件4:5[1][2]*5[2][1]*5[3][2]=0同时1'(5[2][1])!=1; 其中,N(S[2] [2])表示以S[2] [2]为中心的3X3领域内目标像素的个数;取其中的 3 X 3领域以S [2] [2]为中心点,则T (S [2] [2])表示序列S [2] [2]周围8领域元素首尾相接 形成序列中从〇到1的变化次数,其它依此类推。7. 根据权利要求6所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述步骤(29)中的获取细化后生成白点的坐标X,Y值是这样实现的: (Dl)输入指向细化后图像的指针plmageBuffer,根据当前图像的指针对图像的每行 每列进行扫描操作; (D2)如果扫描到的像素值是255,则记录下该点的像素坐标,并且将白点数加一; (D3)依次执行(D2)的操作,直到所有的像素值都扫描完为止; (D4)输出当前图像的白点的个数。8. 根据权利要求7所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述步骤(29)中进行B样条拟合是这样实现的: (Fl)首先使得端点处的导数和端点的两个控制点的连线平行,根据白点的坐标来更新 第一个点和最后一个点的坐标X,Y,间隔取t = 1. 0/1000 ; (E2)每两个点进行均等插值,根据三次B样条的基函数的公式来计算基函数a,b,c, d ; (E3)利用给定的白点的坐标X,Y和基函数,根据B样条插值曲线的公式分别计算出插 值点的坐标X,Υ,其中用到了三次B样条曲线的公式,利用上面的公式,取η = 3,则有三次 B样条曲线的基函数如下:(Ε4)将计算出的X,Y值进行连线; (Ε5)如果所有的白点都遍历完成,则结束,否则返回步骤(Ε2)。9. 根据权利要求8所述的基于视频输入的获取隔空手势轨迹的方法,其特征在于:所 述步骤(3)是这样实现的: (Fl)输入帧数η,η帧图像序列,获取η帧中首帧图像的灰度信息,设为Grayl (i) (j); (F2)获取其他n-1帧图像的灰度信息,设为Gray⑴(j),并判断fabs (Gray (i) (j)-Grayl (i) (j)) <阈值是否成立; (F3)如果 fabs (Gray (i) (j)-Grayl (i) (j)) <阈值,则 Gray (i) (j) = 0,否则 Gray (i) (j)保持不变; (E4) ZongGray (i) (j) = ZongGray (i) (j)+Gray (i) (j),ZongGray (i) (j)记录叠加图像 对应的各个像素的灰度值; (F5)判断η帧是否执行完毕,如果否,则返回步骤(F2),如果是,则判断Z〇ngGray(i) (j) > 255 是否成立,若是,则 ZongGray (i) (j) = 255,否则 ZongGray (i) (j) = 0 ; (F6)根据ZongGray(i) (j)的信息生成灰度图; (F7)对灰度图进行膨胀; (F8)对灰度图进行细化; (F9)统计细化后的轨迹的最后白点的坐标X,Y值和统计的点数; (FlO)记录这η帧处理完成的最后一个白点的坐标:X,Y,即获得当前手势坐标。
【专利摘要】本发明提供了一种基于视频输入的获取隔空手势轨迹的方法,属于计算机人机交互界面领域。所述方法包括:(1)输入总帧数m,用摄像头捕获n帧图像的数字序列,并且放到n帧摄像头捕获的图像数据pBG Buffer[n]中;(2)获取对应手势运动轨迹的白点的坐标集合白点数;(3)获取每一帧手势的坐标值X,Y;(4)判断帧数n>=m,如果是,则根据(2)利用B样条画出轨迹,然后转入步骤(5);否则,返回到(1)继续执行;(5)结束。
【IPC分类】G06K9/00, G06F3/01
【公开号】CN104881119
【申请号】CN201510279504
【发明人】冯志全, 冯仕昌
【申请人】济南大学
【公开日】2015年9月2日
【申请日】2015年5月27日
转载请注明原文地址:https://www.famiwei.com/read-8138948.html