一种电容屏点位识别与跟踪的方法及其装置与流程

文档序号:11828270阅读:369来源:国知局
一种电容屏点位识别与跟踪的方法及其装置与流程

本发明涉及一种电容屏点位的识别与跟踪的方法及其装置,尤其涉及一种电容屏多点识别与跟踪的方法及其装置。



背景技术:

随着科学技术的进步,计算机系统已经成为人们生活的一部分,而且计算机系统越来越小型化,给人们生活带来极大的便利性。作为计算机系统常见的输入装置包括:鼠标、键盘、触摸屏以及类似的装置。这些输入装置中,触摸屏凭借着操作简单、功能多样化等优势,深受人们的青睐,触摸屏技术在人们追捧的过程中,也得到了很好的发展、完善。

触摸屏一般包括一个触摸面板、一个控制器和一个软件驱动器,用户或者触笔通过在触摸面板上简单的选择或者移动光标,该触摸动作就可以被触摸面板内的传感器检测,然后通过控制器、软件驱动器反馈至计算机系统;随后基于上述触摸动作执行计算机系统预设的操作。但是随着智能设备的迅猛发展,对触控技术提出了越来越高的要求,从硬件来看,触摸屏开始从自电容屏发展到互电容屏,从多层ITO(IndiumTinOxide,掺锡氧化铟)演变为单程ITO,向着高透光率、高灵敏度和高精确度发展。

例如,在申请号为CN201110087942.4的中国专利申请中,公开了一种多点触摸屏,并且能为多点触摸中的每点触摸产生表示了触摸面板上触摸位置的不同信号;具体地包括:1、接收触摸屏的每个透明电容传感节点数值的原始数据;2、利用中值滤波去除单独噪点;3、产生梯度数据,并且该梯度数据是基于每个数据点的电容值;4、基于梯度数据计算触摸区域的边界,其中计算边界包括确定哪些数据被组合到一起以构成触摸区域;5、计算每个触摸区域的坐标,得出手指或者触笔触摸的精确位置;这种数字信号处理方法又称为梯度法。发明人在实现本发明的过程中发现,梯度法运用图像处理常用的一些方法对电容值分布进行运算,而这种运算方法复杂度较高,在相同的硬件条件下,识别的点数相对较少,难以对多点跟踪以及复杂手势的识别提供支持;并且上述计算方法对于两指比较近的情况无法处理,容易产生很大的计算误差。

为了解决上述技术问题,可以采用分级搜索的方法实现点位的识别;例如, 在中国专利申请号为CN200980141961.1的中国专利申请中,如图1所示,公开了一种触摸屏触摸寻找方法,该搜寻方法首先进行滤波处理,阈值比较,选出疑似触摸区域,然后对单个触摸区域进行8向分级搜索,确定每个区域是否有手指触摸,并确定触摸点数,然后对每个区域利用质心法计算精确坐标。发明人在实现本发明的过程中发现,CN200980141961.1虽然对手指的辨识度较高,但是需要固定的硬件存储单元对每级的节点数据进行分类存储,且识别方法较为复杂,在同等条件的处理速度下,可识别的触摸点数有限,配置不够灵活。

另外,关于电容屏的点位跟踪,目前常用的方式是最短距离更新法。例如,在申请号为CN201110087942.4的中国专利申请中,公开了一种电容屏点位跟踪的方法,具体地,将当前帧和上一帧的坐标进行临时配对,然后按照点间距进行排序,按照间距大小进行配对,将配对成功的点标记为已配对,若遇到重复配对,则将未配对的点重新临时配对排序,直到所有的点都配对成功,每个配对成功的坐标都会分配一个配对号。如图2所示,叉点代表上一帧触摸点,圆点代表当前帧触摸点,首先将上一帧的每个点依次和当前帧的所有点进行距离运算,距离最小的进行临时配对,第一次配对的结果如下:

触摸点214点发生重复配对,所以(202,212)(208,214)配对成功,其他点进行二次配对,配对后发现最大的点距为4.1,若该点距的实际距离小于点位跟踪阈值,则认为配对成功,最终的配对结果如下:

临时配对结束后,若发现当前帧的某个坐标点配对不成功,则该点可以认为是新触摸点,若上一帧某个坐标点没有配对成功,则认为该点所对应的轨迹结束, 将该点对应的配对号删除。

但是发明人在实现本发明的过程中,发现这种点位跟踪的方法中,仍然存在一定的复杂性。



技术实现要素:

为了解决上述技术问题,本发明提供一种准确率高、跟踪及时的电容屏点位识别与跟踪的方法及其装置。

一方面,本发明提供的一种电容屏点位的识别与跟踪的方法,包括:获取电容屏各个点位的电容值;阈值判断,基于所述各个点位的电容值判断出疑似触摸点位;联通区域判定,所述联通区域判定是将所述疑似触摸点位形成的不同触摸区域分别进行标记;局部最大值识别,所述局部最大值识别包括将所述不同触摸区域内点位电容值分别以动态链表的形式进行存储和对动态链表按照电容值的大小进行排序;精确点位计算,根据所述动链表排序后电容值结果,确定最大电容值所在的点位;点位跟踪,根据所述点位计算结果,按照最短距离更新法,确定所述最大电容值所在点位在不同帧之间的变化轨迹。因此,可以用动态链表对联通区域内的点位(也可以称为节点)进行记录并排序,降低查找最大值的复杂度,并且可以提高存储空间利用率,可识别的点数也可以灵活地配置。

优选地,所述局部最大值识别还包括对排序后的动态链表进行筛选,所述筛选是将动态链表中各点位对应的电容值与预定的阈值进行比较,大于该阈值的点位为疑似局部最大值点位。

进一步优选地,所述局部最大值识别还包括对所述局部最大值进行检测,所述检测方法是将所述疑似局部最大值点位与其上下左右四个点位的电容进行比较,如果所述四个点位的电容都小于所述疑似最大值点位的电容,那么可以判定所述疑似局部最大值点位为局部最大值点位。

采用上述优选的技术方案,可以进一步减少需要计算最大值的点位数量,能够快读查找局部最大值。

进一步优选地,当所述动态链表只有一条时,所述阈值设置成所述排序后动态链表中最大值对应点位的电容值的50%;当所述动态链表至少设置有两条时,并且所述至少两条动态链表分别对应至少两个不同的触摸区域,每个动态链表筛选用的阈值分别设置成各自排序后动态链表中最大值对应点位的电容值的50%; 这样可以过滤掉一半的非最大值数据,快速对各个区域的点位分别计算。

优选地,所述局部最大值进行检测的结果可以有一个最大值点位,也可以有至少两个最大值点位。因此,采用本发明提供的技术方案还可以多触摸区域内的多个点位进行准确识别。

优选地,所述阈值判断包括将硬件扫描出的电容值和基值表进行运算得出变化量,变化量超过一定的阈值,则会判定为疑似触摸点位,阈值判断就是将疑似触摸点位标记为新的数值表;标记完成后进行重映射。

优选地,所述联通区域判定运用图像处理中的扩张算法,利用堆栈队列进行邻域扩张搜索。

优选地,所述点位跟踪包括:将当前帧的触摸点和之前帧的点位进行比较,确定当前帧的某个点位和之前帧的某个点位是否属于同一个轨迹;为每个轨迹创建一个环形队列;这样可以在点位跟踪过程中,降低查找点位跟踪的复杂度,并且可以进一步地提高存储空间利用率。

优选地,所述轨迹对应的队列中的有效坐标先经过平滑滤波,然后输出最终的坐标值;因此,可以保证触摸点位轨迹的平滑度和精确度。

另一方面,本发明还提供一种电容屏点位识别与跟踪的装置,其特征在于,包括:数据获取模块,用于获取电容屏各个点位的电容值;阈值判断模块,用于基于所述各个点位的电容值判断出疑似触摸点位;联通区域判定模块,所述联通区域判定模块将所述疑似触摸点位形成的不同触摸区域分别进行标记;局部最大值识别模块,所述局部最大值识别模块按照上述任意一种所述的电容屏点位识别与跟踪的方法,将所述不同触摸区域内点位电容值分别以动态链表的形式进行存储,并对动态链表按照电容值的大小进行排序;精确点位计算模块,所述精确点位计算模块按照上述任意一种所述的电容屏点位识别与跟踪的方法,确定最大电容值所在的点位;点位跟踪模块,所述点位跟踪模块按照上述任意一种所述的电容屏点位识别与跟踪的方法,确定所述最大电容值所在点位在不同帧之间的变化轨迹。

采用上述优选的技术方案,用动态链表对联通区域内的点位进行记录并排序,可以降低查找最大值的复杂度、提高存储空间利用率。进一步地,为每个轨迹创建一个环形队列、输出坐标点之前进行滤波处理,可以保证触摸点位轨迹的平滑度和精确度。

附图说明

图1为现有技术中一种利用分级搜索的点位识别方法的流程图;

图2为现有技术中一种触摸点电容值的矩阵图;

图3为本发明实施例一提供的一种电容屏点位识别与跟踪的方法流程图;

图4a、图4b为本发明实施例一提供的联通区域标记的示意图;

图5为本发明实施例一提供的触摸区域点位电容值矩阵图;

图6为本发明实施例一提供的触摸区域点位动态链表的示意图;

图7为本发明实施例一提供的一种触摸区域点位动态链表疑似局部最大值点位示意图;

图8为本发明实施例一提供的一种电容屏点位识别与跟踪装置的结构框图;

图9为本发明实施例二提供的一种电容屏点位识别与跟踪的流程图;

图10为本发明实施例二提供的触摸区域点位电容值矩阵图;

图11为本发明实施例二提供的触摸区域点位动态链表的示意图;

图12为本发明实施例三提供的一种电容屏点位跟踪环形队列的示意图;

图13为本发明实施例三提供的一种电容屏点位跟踪环形队列配对链表的示意图。

具体实施方式

下面结合附图对本发明的具体实施方式做详细的说明,需要说明的是,这些具体的说明只是让本领域普通技术人员更加容易、清晰理解本发明,而非对本发明的限定性解释。

实施例一

如图3所示,实施例提供的一种电容屏点位的识别与跟踪方法,包括:

S1.点位参数获取,获取电容屏各个点位的电容值。

S2.阈值判断,基于各个点位的电容值判断出疑似触摸点位。

S3.联通区域判定,联通区域判定是将疑似触摸点位形成的不同触摸区域分别进行标记。

S4.局部最大值识别,局部最大值识别包括将不同触摸区域内点位电容值分别以动态链表的形式进行存储和对动态链表按照电容值的大小进行排序。

S5.精确点位计算,根据动链表排序后电容值结果,确定最大电容值所在的点位。

S6.点位跟踪,根据点位计算结果,按照最短距离更新法,确定最大电容值所在点位在不同帧之间的变化轨迹。

采用本实施例中的上述技术方案可以用动态链表对联通区域内的点位(也可以称为节点)进行记录并排序,降低查找最大值的复杂度,并且可以提高存储空间利用率,可识别的点数也可以灵活地配置。

优选地,联通区域判定运用图像处理中的扩张算法,利用堆栈队列进行邻域扩张搜索;将不同的触摸区域内的点位分别标记,为后续的局部最大值识别做准备。

如图4a为本实施例提供的联通区域标记的示意图,该示意图对应经过步骤S2的阈值判断后的疑似触摸点位矩阵,从图4a可以判定有三个疑似触摸区域;图4b为步骤S3联通区域判定后的矩阵。然后可以根据图4b中的标记,通过步骤S4局部最大值识别方法,识别出上述三个疑似触摸区域中每个区域的最大值;可以通过对触摸区域每个点位对应的电容值创建一个链表节点,然后对链表节点进行排序,具体地实现方式,可以通过如下函数来完成:

typedef struct

{

int xPos;

int yPos;

int touch_delta;

struct Pixer*next;

}Pixer;

其中,Pixer是节点的意思,xPos、yPos表示坐标,touch_delta表示该位置的电容值。

图5所示为本实施例提供的触摸区域点位电容值矩阵图,该矩阵图中的数值为对应图4a、图4b中疑似触点区域中每个点位的具体电容值。图6是将图5中三个疑似触摸区域的电容值按照上述局部最大值识别方法进行排序后的示意图;在第一触摸区域有9个点位,其中,坐标(3,3)对应的点位电容值最大为98;第二触摸区域有6个点位,其中,坐标(8,3)对应的点位电容值最大为83;第三触摸区域有9个点位,其中坐标(6,7)对应的点位电容值最大为120。

优选地,步骤S4中的局部最大值识别还包括对排序后的动态链表进行筛选, 筛选是将动态链表中各点位对应的电容值与预定的阈值进行比较,大于该阈值的点位为疑似局部最大值点位。

进一步优选地,当动态链表只有一条时,阈值设置成排序后动态链表中最大值对应点位的电容值的50%;当动态链表至少设置有两条时,并且至少两条动态链表分别对应至少两个不同的触摸区域,每个动态链表筛选用的阈值分别设置成各自排序后动态链表中最大值对应点位的电容值的50%;这样可以过滤掉一半的非最大值数据,快速对各个区域的点位分别计算。在该实施例中优选地,动态链表按照从上到下,依次按照大小顺序排列,所以动态链表中的最大值,就是动态链表的表头;当然动态链表还可以按照从下往上,依次按照大小顺序排列,这样动态链表中最大值就是对应为表尾。

按照上述优选的技术方案,第一触摸区域对应的第一链表选取的第一阈值为49,第二触摸区域对应的第二链表选取的第二阈值为41.5,第三触摸区域选取的第三阈值为60。对三个链表分别进行筛选,大于该阈值的节点最可能成为疑似局部最大值点;如图7所示,第一触摸区域还剩5个疑似局部最大值,第二触摸区域还剩4个疑似局部最大值,第三触摸区域还剩6个疑似局部最大值。

进一步优选地,步骤S4中的局部最大值识别还包括对局部最大值进行检测,检测方法是将疑似局部最大值点位与其上下左右四个点位的电容进行比较,如果四个点位的电容都小于疑似最大值点位的电容,那么可以判定疑似局部最大值点位为局部最大值点位。这样可以进一步减少需要计算最大值的点位数量,能够快读查找局部最大值。具体地,图5中三个区域中局部最大值点分别为(3,3)、(8,3)、(6,7),并且分别与三个点位的上下左右四个点位的电容进行比较之后,这三个点位值的点位分别大于他们上下左右四个点位,所以这三个点位(3,3)、(8,3)、(6,7)认为是手指或者触笔触摸点位。

本实施例中的步骤S6点位跟踪,可以采用现有技术中的最短距离法处理,也可以采用其他更优选的技术方案(下文会有详细的描述)。

如图8所示,本实施例还提供一种电容屏点位识别与跟踪的装置10,包括:数据获取模块1,用于获取电容屏各个点位的电容值;阈值判断模块2,用于基于各个点位的电容值判断出疑似触摸点位;联通区域判定模块3,联通区域判定模块将疑似触摸点位形成的不同触摸区域分别进行标记;局部最大值识别模块4,局部最大值识别模块按照上述电容屏点位识别与跟踪的方法,将不同触摸区 域内点位电容值分别以动态链表的形式进行存储,并对动态链表按照电容值的大小进行排序;精确点位计算模块5,精确点位计算模块按照上述电容屏点位识别与跟踪的方法,确定最大电容值所在的点位;点位跟踪模块6,点位跟踪模块按照上述电容屏点位识别与跟踪的方法,确定最大电容值所在点位在不同帧之间的变化轨迹。并且该电容屏点位识别与跟踪的装置10还设置有检测电容屏上电容大小的传感器,存储上述各种参数的存储模块和对传感器检测到的数据进行滤波以减小噪声的滤波模块。

实施例二

如图9为实施例二提供的一种电容屏点位识别与跟踪的流程图:每一帧的检测由定时器中断发起,定时器的时间间隔控制着电容屏的扫描帧率,若CPU的处理能力较强,可以适当缩短时间间隔,提高帧率,这样有利于提高轨迹跟踪的准确性。当定时器中断发生(步骤201)后,触发硬件(比如传感器)对电容屏进行一次扫描,获取电容值矩阵(步骤202);将扫描出的电容值和基值表进行运算得出变化量(基值是指没有触摸时存储的电容值表),变化量超过一定的阈值;则会判定为疑似触摸区域,阈值判断就是将疑似触摸节点标记为新的数值表(步骤203);标记完成后进行重映射,因为电容屏节点和扫描电路的连接并不确定,需要通过查找表(与硬件对应)重新映射,得出和电容屏分布对应的数值表(步骤204);然后采用与实施例一相同的方法进行联通区域判定(步骤205);再对数值表进行分析(步骤206),如果没有检测到疑似触摸区域,则判定为没有触摸点,直接进行基值表更新(步骤207),退出这次的中断处理(步骤208);如果存在触摸区域,则对触摸区域的面积进行计算,若超过一定的阈值(步骤209),认为是大面积触碰,直接退出(步骤208),若不是,进行下一步处理;接下来采用与实施例一相同的局部最大值识别方法,进行多点点位识别(步骤210),点位计算(步骤211),然后根据点位计算结果,判断是否有触摸点未处理(步骤212),如果有触摸点未处理,回到步骤210重新进行多点点位识别,如果没有触摸点未处理,直接进入到多点跟踪环节(步骤213),然后输出坐标(步骤214),完成点位识别和跟踪之后,直接退出,进入下一帧的处理,如此循环步骤201。

本实施例将会对同一个区域出现大于一个点的情况(几个手指靠的比较近) 进行说明,这个情况采用局部最大值法也可以准确识别,如图10所示,同一个区域中检测出两个触摸点位:(6,7)(4,7)。如图11,最左侧的表格为触摸区域中15个点位的电容值按照大小排序,存储在动态链表中;中间表格是按照实施例一种描述的局部最大值进行检测方法,检测的阈值为125÷2=62.5,这样就只有8个点位可以作为疑似最大值点位;然后将这8个点位的电容值分别与其上下左右的值比较,可以判定只有两个点位(6,7)和(4,7)大于各个上下左右的值,所以可以确定这两个点位为手指或者触笔触摸点位。

由于电容屏的物理栅格间距较大,识别出来的点位需要通过插值计算得出精确的点位,质心法是优选的方法,公式如下:

<mrow> <msub> <mi>x</mi> <mi>centroid</mi> </msub> <mo>=</mo> <mfrac> <mrow> <munderover> <mi>&Sigma;</mi> <mrow> <mi>k</mi> <mo>=</mo> <mi>p</mi> <mo>-</mo> <mn>2</mn> </mrow> <mrow> <mi>p</mi> <mo>+</mo> <mn>2</mn> </mrow> </munderover> <msub> <mi>X</mi> <mi>k</mi> </msub> <msub> <mi>C</mi> <mi>k</mi> </msub> </mrow> <mrow> <munderover> <mi>&Sigma;</mi> <mrow> <mi>k</mi> <mo>=</mo> <mi>p</mi> <mo>-</mo> <mn>2</mn> </mrow> <mrow> <mi>p</mi> <mo>+</mo> <mn>2</mn> </mrow> </munderover> <msub> <mi>C</mi> <mi>k</mi> </msub> </mrow> </mfrac> </mrow>

其中:X为坐标值,p为峰值点坐标;C为对应点位互电容检测值。

实施例三

实施例三与实施例二或实施例一采用相同的点位识别方法,与实施例一和实施例二的区别在于,点位跟踪方法进一步地优化,具体地:点位跟踪包括:将当前帧的触摸点和之前帧的点位进行比较,确定当前帧的某个点位和之前帧的某个点位是否属于同一个轨迹;为每个轨迹创建一个环形队列;这样可以在点位跟踪过程中,降低查找点位跟踪的复杂度,并且可以进一步地提高存储空间利用率。

优选地,轨迹对应的队列中的有效坐标先经过平滑滤波,然后输出最终的坐标值;因此,可以保证触摸点位轨迹的平滑度和精确度。

在实施例二中优选地,将识别出来的点位采用质心法计算之后,对当前帧的所有坐标点计算完成后,每个坐标保存为Coord型结构体,当前帧的所有坐标点保存在Current_Frame_axis数组中。coord_x,coord_y为坐标值,valid标志当前坐标有效性;然后采用下述函数进行计算:

typedef struct

{

int coord_x;

int coord_y;

int valid;

}Coord;

Coord Current_Frame_axis[current_touch_max];

点位识别完成后,点位跟踪主要是将当前帧的触摸点和之前帧的点位进行比较,确定当前帧的某个点位和之前帧的某个点位是否属于同一个轨迹。

Coord Track_fifo[touch_max][deepth_fifo];

如图12,每个环形队列对应一个组数据结构进行维护,“使用(英文用usage表示)”表示环形队列(英文用Track_fifo表示,先进先出的队列)中有效的坐标点数,指针(英文用index表示)表示最新的坐标点指针,还可以用参数“label”表示该轨迹是否有效,参数“match_flag”表示当前帧中是否有坐标点和该轨迹配对成功,并可以用参数“average_coord_x、average_coord_y”表示该轨迹经过平滑滤波处理后的坐标点输出。

如果当前帧的某个坐标点和环形队列(Track_fifo(m),m表示队列的序号)配对成功,则将该点存取队列中,指针(index)加1,使用(usage)加1,如果当前队列已满(usage=队列的深度(depth_fifo)),则将最先保存的坐标覆盖掉,如果当前帧没有坐标和环形队列(Track_fifo(m))配对成功,usage减1,index不变,当usage减到0,该队列被清空,label=0,对应的轨迹结束。

如果当前帧的某个坐标点和现有的Track_fifo都没有配对成功,则有可能是一个新的轨迹开始,将该点保存到一个未使用的队列中(label=0),index和usage递增,若干帧后,usage大于某个阈值(一般是depth_fifo/2)后,将该轨迹队列label置1,对外输出该轨迹坐标,这样可以有效消除单点噪声。

本实施例中采用的最短距离更新法,是将当前帧中所有的坐标点依次和轨迹队列中的最新坐标点进行距离运算,然后将最短距离的配对进行排序,如果最短距离小于阈值且没有重复配对,则配对成功,若存在重复配对,则将最短距离大于重复配对的组合进行重新配对,每一次的临时配对结果保存在Track_Distance数据结构中,并且通过动态链表进行排序。如图13所示,是将图2中的节点按照本实施例中最短距离更新之后的链表。

当前帧的所有点配对完成后,将轨迹队列中的有效坐标经过平滑滤波,输出最终的坐标值,整个点位识别和点位跟踪的流程全部结束,等待下一次的定时器 中断触发新的一帧运算。

本实施例中采用的上述技术方案,在GL6066平台上运行稳定,在CPU运行40M,电容屏控制模块10M的硬件条件下,配合10×15阵列的互电容触控屏,可实现5个点位的实时跟踪,帧率最高可以达到120f/s。

实施例四

本实施例可以提供的电容屏点位识别与跟踪方法中,点位识别可以采用现有技术中的梯度法或者分级搜索方法,而点位跟踪的方法可以采用实施例三提供的技术方案:最短距离更新方法,并为每个轨迹创建一个环形队列。这样也可以在点位跟踪过程中,降低查找点位跟踪的复杂度,并且可以进一步地提高存储空间利用率。

最后需要说明的是,上述说明仅是本发明的最佳实施例而已,并非对本发明做任何形式上的限制。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围内,都可利用上述揭示的做法和技术内容对本发明技术方案做出许多可能的变动和简单的替换等,这些都属于本发明技术方案保护的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1