一种基于手势的数字输入方法_2

文档序号:9452633阅读:来源:国知局

[0059] 为了通过虚拟界面输入N位数字,需要生成N个虚拟界面,从而形成虚拟界面群。 其中,每个虚拟界面的模板相同,采用操作者熟悉的类似时钟表盘结构。其中,把"12"点定 义为〇,然后沿顺时针方向依次定义1到9,如图1所示,图中,沿顺时针方向,点1和点2之 间所在的弧的中点为A,点2和点3之间所在的弧的中点为B,射线0A和0B围成一个扇形 区域?。显然,选中点2的充分必要条件是手势重心落在区域?所确定的区域内且检测到 操作者的"选中"行为。?的弧越大,选择的出错率就低。
[0060] 数字输入算法:
[0061] 0 :For(i= 1;iN;i++)
[0062] {
[0063] 1.生成第i个虚拟界面Vi;
[0064] 2?操作者在Vi上移动手势;
[0065] 3?如果手势处于静止状态:
[0066] 4.检测到"抓"手势了吗?如果"不是",转步骤4.
[0067] 5.计算手势重心所在位置Pg;
[0068] 6.如果PggQ,转步骤5 ;
[0069] 7?计算f:
[0070] ⑴
[0071] 其中,?f表示虚拟界面Vi上数字f所在的空间扇形区域点集;
[0072] 8.感知f的是否正确,如果选择结果f错误,进入纠错处理;否则,得到Vi的选择 结果f;
[0073] }
[0074] 同时用两个如图2所示的虚拟界面实现双位数字输入,可以用于智能电视频道输 入。例如,操作者欲输入频道48,只需通过一个虚拟界面输入数字"4",再通过另一个虚拟 界面输入数字"8"。
[0075] 2算法的进一步改进
[0076] 考虑到手势运动范围往往有限,且既不能增加操作者的操作负荷,又不能影响交 互的自然性,故虚拟界面的大小往往有所受限,这就决定了相邻两个数字之间的距离比较 小,从而上述算法的选择精准度会受到很大影响,必然加重操作者的操作负荷和认知负荷。 为了解决这个问题,本发明把虚拟界面上〇到9的9个扇形区域分为3个象限(图3-1)。 象限I:0-3所在的扇形区域;象限11:3-6所在的扇形区域;象限111:6-9所在的扇形区域。 如果规定手势从虚拟界面的中心点出发选择象限,则根据手势运动的方向范围,就可以判 断操作者欲选择的象限。例如,规定〇与数字〇确定的射线为起始向量L,沿顺时针方向角 度逐渐增大,手势运动的方向为T,T与L之间的夹角为0 =〈T,L>。于是T所在的象限为
[0077] 0
[0078] 在进行数字选择时,首先把需要的数字所在的象限提取出来放到一个新的虚拟界 面中(手掌沿T方向平移,然后垂直向前推手势,则T所确定的象限被选中并调入相应的虚 拟界面模板形成新的虚拟界面供操作者进一步操作),在新的虚拟界面中,由于只有4个数 字,数字之间的间距比较大(相当于放大了扇形区域的弧长),因此,选择操作的精度得到 提高(图3-2)
[0079] 图3-1中10个数字划分到三个象限中,通过手势运动方向可以利用隐式交互技术 确定操作者的选择象限。图3-2当选中第1象限后,把该象限作为虚拟界面模板生成新的 虚拟界面,从该虚拟界面选择数字的精度将得到提高。
[0080] 本发明采用粒子滤波算法得到手势运动轨迹:
[0081] S1 :初始化。
[0082] 根据手势重心状态的先验分布P(x。)选择粒子集:= …,
[0083] k= 1 ;
[0084] S2 :状态采样。
[0085] S2. 1:Fori= 1ToN
[0086] 根据先验分布;r(X广|义匕,24.)得到样本;
[0087] S2. 3 :求样本的权值:
[0088] Fori= 1ToN
[0089]
[0090] S2. 3 :把权值标准化:
[0091] Fori=IToN
[0092]
[0093] S3 :状态估计:
[0094]
[0095] S4 :重采样:
[0096] 对样本进行重新抽样,产生一组新样本丨;Z"..,,Z丨使得:
[0097]
[0098] 亦即新样本中出现的概率为%
[0099] S5:k=k+1,转S2。
[0100] 手势识别算法:
[0101] 本发明的一种基于形状上下文的手势识别方法,是通过手势图像上手势点对应的 形状上下文特征进行比对,实现手势识别的。
[0102] 首先构建手势数据库。
[0103] (1)选取m种手势,每种手势选取n幅手势图像,m=5、n=10 ;即选取5种手势, 每种手势选取10幅手势图像。
[0104] (2)找出每幅手势图像中的手势点;遍历整幅图像,若为黑色则认为是背景;否则 则认为是手势点,同时记录下手势点的坐标和手势点的个数。
[0105] (3)计算出手势重心以及手势重心与手势点之间的最大距离;
[0106] (4)将该最大距离作为最大半径做圆,然后将该最大半径平均分成k份,以此做k 个同心圆,k取12,相邻的两个同心圆之间形成圆环;统计落在每个圆环内的手势点,然后 计算出每个圆环的中心点,以此作为手势特征点;
[0107] (5)在手势特征点和手势点的基础上提取形状上下文特征,最后将形状上下文特 征写入文本文件存储在手势数据库;手势数据库共有50个文件,每种手势10个文件。
[0108]其中,统计手势点函数void HandsDetection(D2P0INT edgepoint[], BYTE*image, int*HandpointsNO)该函数的主要功能是在分割出来的手势图像基础上统计 手势点,记录其坐标,并返回手势点的个数。
[0109] D2P0INT为结构体类型,该结构体类型的定义为:struct D2P0INT{int x ;int y ;};
[0110] 输入:指向待处理图像的指针image。
[0111] 输出:函数的返回值为存放手势点坐标的edgepoint□和用来记录手势点的
[0112]个数的HandpointsNO。
[0113] 具体步骤:
[0114] ①按照从上到下、从左到右的顺序遍历图像上每个像素点。
[0115] ②若该像素点为黑色,则结束本次循环,然后继续遍历;若不为黑色,则把该像素 的x坐标和y坐标存储在数组edgepoint□中,并使手势点个数HandpointsNO加1。
[0116] ③重复执行步骤②,直到图像遍历结束。
[0117] ④返回手势点个数HandpointsNO。
[0118]统计圆环中心点函数void CountRing(D2P0INT edg印oint[],D2P0INT featuredot[],D2P0INT sumpoints[],int HandpointsNO, int circleno)
[0119] 该函数的功能是计算每个圆环的中心点。
[0120] 输入:存储手势点坐标的edg印oint□,存储手势点个数的HandpointsNO,存储圆 环份数的circleno, circleno的值为12。
[0121] 输出:返回存储圆环中心点坐标的数组featuredot□,存储圆环中心点和手势点 坐标的数组sumpoints[],
[0122] 具体步骤:
[0123] ①由手势点坐标edgepoint□和HandpointsNO的值,求手势的重心坐标weight。
[0124] ②求重心到手势点数组edgepoint□的最大距离maxjuli。
[0125] ③由最大距离maxjuli为最大半径,并将此半径平均分成12份,以此确定12个 圆。
[0126] ④根据半径的范围统计每个圆环内手势点的坐标和落在此圆环内手势点的个数,
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1