一种在投影交互系统中提升线条绘制速度的方法

文档序号:10724306阅读:199来源:国知局
一种在投影交互系统中提升线条绘制速度的方法
【专利摘要】本发明涉及一种在投影交互系统中提升线条绘制速度的方法,包括:从鼠标按下时刻开始,在窗体上绘制第一个采样点;在前一时刻绘制的基础上,进行增量式绘制;结合最近一次采样点的位置,对当前时刻鼠标所在位置是否应该采样进行判断;根据当前采样点,与前一个采样点的欧氏距离,判断当前时刻是否需要刷新,对窗体内容进行更新;计算最新的线条对应的重绘区域,在窗体上该重绘区域内进行重新绘制,更新窗体内容;鼠标弹起,本次线条的绘制结束。本发明在线条绘制过程中,只需要绘制少量数目的采样点,并且尽量降低刷新频率和刷新面积,使得系统的计算量降低到极致,从而给用户带来了流畅的感觉,用户体验明显提升。
【专利说明】一种在投影交互系统中提升线条绘制速度的方法
[0001]
技术领域
[0002]本发明涉及基于计算机视觉技术的人机交互技术领域,尤其是一种在投影交互系统中提升线条绘制速度的方法。
[0003]
【背景技术】
[0004]人机交互技术是计算机科学中至关重要的一个领域,其发展历史基本上代表了计算机的发展历史。从最早的大型机上的笨拙的开关系统,到早期键盘和鼠标的出现,以及当下流行的触摸屏,人机交互技术的发展速度日新月异。近年来,由于计算机视觉技术的飞速发展,以及新的传感器,比如深度相机Kinect、LeapMot1n等的出现,使得各种便捷式的人机交互方式层出不穷。由于目前Kinect等深度相机在距离精度和空间分辨率上,都明显不足,利用Kinect等深度相机直接与计算机进行交互,并不能达到进行精细操作的目的,不能直接在利用投影仪投射在墙壁上的显示区域内进行便捷而灵敏的操作。
[0005]利用光笔和摄像头组合形成的投影交互系统,对投影图像进行操作,是最近出现的一种新技术,该系统不仅安装方便,使用便捷,而且成本也在可以接受的范围以内,因此很适合作为在教室内与会议室内进行演示和讲解的工具。利用投影交互系统进行演示和讲解的过程中,绘制线条和写字是最常见的操作。利用光笔或者手指直接在墙壁上或者白板上,对投影内容进行各种批注和绘制,可以显著提高演示和讲解的效果,加强观众的印象和理解。但是,常见的线条绘制方法并没有考虑如何降低绘制过程中的系统负载,不仅每一个时刻点都需要对当前画面中的所有的线条,所有点的采样点进行绘制,而且在每个时刻点,都对画面整体进行刷新,造成了大量的重复绘制和刷新。因此,常见的方法很容易给用户造成画线不流畅、系统不灵敏的感觉,带来了很差的用户体验。
[0006]

【发明内容】

[0007]本发明的目的在于提供一种能够减小被绘制的线条的复杂程度,提高线条绘制的速度;降低刷新频率和系统负载,提高线条绘制的流畅程度的在投影交互系统中提升线条绘制速度的方法。
[0008]为实现上述目的,本发明采用了以下技术方案:一种在投影交互系统中提升线条绘制速度的方法,该方法包括下列顺序的步骤:
(1)从鼠标按下时刻开始,在窗体上绘制第一个采样点;
(2)在前一时刻绘制的基础上,进行增量式绘制:将最新出现的几个采样点,以及其对应的线条,叠加到前一时刻绘制的结果上,得到当前时刻的绘制内容;
(3)结合最近一次采样点的位置,对当前时刻鼠标所在位置是否应该采样进行判断;
(4)根据当前采样点,与前一个采样点的欧氏距离,判断当前时刻是否需要刷新,对窗体内容进行更新;
(5)计算最新的线条对应的重绘区域,在窗体上该重绘区域内进行重新绘制,更新窗体内容;
(6 )鼠标弹起,本次线条的绘制结束。
[0009]所述采样点是指,在鼠标的移动过程中,每一个时刻对应一个鼠标坐标位置,由于鼠标的位置刷新速度快,一秒钟有几十个坐标位置,对这几十个坐标位置进行抽样,选择其中的一部分来进行绘图,这些被选中的鼠标坐标位置即为采样点。
[0010]在步骤(2)中,所述采样点的选取方法如下:
2a)设置用于存储所有采样点的采样点队列和用于存储候选采样点的候选队列;
2b)将第一个鼠标点位置加入到采样点队列中;
2c)计算第二个鼠标点到第一个采样点的欧氏距离,如果该欧氏距离大于采样距离阈值Th_sample_dist,则将第二个鼠标点加入采样点队列;反之,将第二个鼠标点暂时记录在候选队列中;
2d)从采样点队列中提取出前一个采样点坐标Pl,然后计算当前点P与Pl之间的欧式距离,将该欧氏距离与采样距离阈值Th_samp I e_d i s t进行比较:
2dl)若前者大于后者,则从候选队列中提取候选点;若候选点不存在,将当前点P加入到采样点队列中;若存在候选点P2,则计算由P、P2、P1组成的以P2为顶点的三角形的夹角,若夹角接近平角,说明此时当前点P与候选点P2,以及前一个采样点Pl在同一条线上,清空候选队列,将当前点P加入到采样点队列;若夹角非接近平角,说明当前点P与候选点P2、前一个采样点Pl非在一条直线上,此时将候选点P2加入到采样点队列,当前点P取代候选点P2成为候选点;返回步骤2d),进入循环;
2d2)若前者小于后者,则从候选队列中提取候选点;若候选点不存在,将当前点P加入到候选队列中去,成为候选点;若存在候选点P2,则计算由P、P2、P1组成的以P2为顶点的三角形的夹角;如果夹角接近平角,则用当前点P代替候选点P2;若夹角非接近平角,则将候选点P2加入采样点队列,使当前P成为候选点;返回步骤2d),进入循环。
[0011]在步骤(2)中,所述增量式绘制的方法如下:
2e)将当前窗体上的显示内容,全部都保存到内存中,存储在一幅称为历史图像的图像中;
2f)将历史图像中的绘制内容复制出来,然后绘制最新的采样点及其对应的线条,将新绘制内容与复制的历史图像内容进行累加融合,得到当前内容;
2g)将当前内容绘制到缓存中,该缓存是双缓存机制的第一块缓存;
2h)将缓存中的当前绘制内容,绘制到窗体上,并且对窗体进行刷新;
2i)用当前绘制内容更新历史图像,为下一次绘制做准备。
[0012]在步骤(4)中,判断某一个时刻是否需要刷新,判断其与前一个刷新点的欧式距离,若两个刷新点之间的欧氏距离小于刷新距离阈值Th_refresh_dist,则不进行刷新,否贝IJ,进行刷新。
[0013]在步骤(5)中,所述重绘区域是指被重新绘制的区域,只针对增量式绘制时当前区域新出现的线条对应的外接矩形区域进行重绘,用小矩形序列来代替线条的外接矩形,覆盖原来的重绘区域,所述小矩形队列的计算方法如下: 5a)先设定矩形队列中的小矩形的最大边长阈值和小矩形数目上限;
5b)计算当前线段的线条长度和方向角;
5c)比较线条长度与小矩形最大边长阈值:
5cl)若前者小于后者,则继续增加后续线条,分析总体外接矩形的尺寸,如果该尺寸依然小于阈值,则继续增加新的线条,直到外接矩形尺寸大于最大边长阈值时,用此时的几条线条的外接矩形进行重绘;
5c2)若前者大于后者,则判断外接矩形中较短一边与最大边长阈值的大小关系,如果外接矩形中较短一边小于最大边长阈值,则直接用线条外接矩形作为重绘区域进行重绘;如果外接矩形中较短一边大于最大边长阈值,则计算小矩形边长与数目阈值的乘积,将外接矩形中较短一边与该乘积进行比较,若外接矩形中较短一边大于乘积,则将线条长度按照数目阈值进行等分,根据等分线条对应的位置得到小矩形队列;若外接矩形中较短一边小于乘积,则参照最大边长阈值对线条进行均分,得到相应的小矩形队列;
5d)利用小矩形队列对画面区域进行重绘。
[0014]由上述技术方案可知,本发明在线条绘制过程中,只需要绘制少量数目的采样点,并且尽量降低刷新频率和刷新面积,使得系统的计算量降低到极致,从而给用户带来了流畅的感觉,用户体验明显提升。常规的绘制线条的方法,由于采样点没有精选,容易导致局部区域采样点过于密集,线条形状出现锯齿状的现象,本发明适度减低了密集区域的采样点,使得线条的形状更加平滑,视觉效果更好。
[0015]
【附图说明】
[0016]图1为本发明的方法流程图;
图2为本发明中增量式绘制方法流程图;
图3为本发明中采样点选取方法流程图;
图4为本发明中线条重绘区域的计算的方法流程图;
图5为现有技术中线条的重绘区域示意图;
图6为用系列小矩形代替线条的重绘区域示意图。
[0017]
【具体实施方式】
[0018]如图1所示,一种在投影交互系统中提升线条绘制速度的方法,该方法包括下列顺序的步骤:
(1)从鼠标按下时刻开始,在窗体上绘制第一个采样点;
(2)在前一时刻绘制的基础上,进行增量式绘制:将最新出现的几个采样点,以及其对应的线条,叠加到前一时刻绘制的结果上,得到当前时刻的绘制内容;
(3)结合最近一次采样点的位置,对当前时刻鼠标所在位置是否应该采样进行判断;
(4)根据当前采样点,与前一个采样点的欧氏距离,判断当前时刻是否需要刷新,对窗体内容进行更新;
(5)计算最新的线条对应的重绘区域,在窗体上该重绘区域内进行重新绘制,更新窗体内容;
(6 )鼠标弹起,本次线条的绘制结束;
所述采样点是指,在鼠标的移动过程中,每一个时刻对应一个鼠标坐标位置,由于鼠标的位置刷新速度快,一秒钟有几十个坐标位置,对这几十个坐标位置进行抽样,选择其中的一部分来进行绘图,这些被选中的鼠标坐标位置即为采样点。在鼠标的移动过程中,每一个时刻,都会有一个鼠标坐标位置;鼠标的位置刷新速度很快,一秒钟有几十个坐标位置;对着几十个坐标位置进行抽样,选择其中的一部分来进行绘图。这些被选中的坐标位置,就是采样点。鼠标点是指每一个时刻的鼠标坐标位置,是原始的,没有经过任何筛选;而采样点已经经过筛选了,是鼠标点的一个子集。一秒钟如果有50个鼠标点,那么采样点的数目可能只有10个。
[0019]如图3所示,在步骤(2)中,所述采样点的选取方法如下:
2a)设置用于存储所有采样点的采样点队列和用于存储候选采样点的候选队列;候选采样点就是当前还不能确定是否应该采样点的位置点;
2b)将第一个鼠标点位置加入到采样点队列中;
2c)计算第二个鼠标点到第一个采样点的欧氏距离,如果该欧氏距离大于采样距离阈值Th_sample_dist,则将第二个鼠标点加入采样点队列;反之,将第二个鼠标点暂时记录在候选队列中;
2d)从采样点队列中提取出前一个采样点坐标Pl,然后计算当前点P与Pl之间的欧式距离,将该欧氏距离与采样距离阈值Th_samp I e_d i s t进行比较:
2dl)若前者大于后者,则从候选队列中提取候选点;若候选点不存在,将当前点P加入到采样点队列中;若存在候选点P2,则计算由P、P2、P1组成的以P2为顶点的三角形的夹角,若夹角接近平角,说明此时当前点P与候选点P2,以及前一个采样点Pl在同一条线上,清空候选队列,将当前点P加入到采样点队列;若夹角非接近平角,说明当前点P与候选点P2、前一个采样点Pl非在一条直线上,此时将候选点P2加入到采样点队列,当前点P取代候选点P2成为候选点;返回步骤2d),进入循环;
2d2)若前者小于后者,则从候选队列中提取候选点;若候选点不存在,将当前点P加入到候选队列中去,成为候选点;若存在候选点P2,则计算由P、P2、P1组成的以P2为顶点的三角形的夹角;如果夹角接近平角,则用当前点P代替候选点P2;若夹角非接近平角,则将候选点P2加入采样点队列,使当前P成为候选点;返回步骤2d),进入循环。
[0020]线条绘制的过程中,并不是每一个时刻的鼠标位置都需要进行绘制,只需要对其中部分时刻进行采样即可,这样可以有效降低系统负载,同时又不影响线条的外观。
[0021]如图2所示,在步骤(2)中,所述增量式绘制的方法如下:
2e)将当前窗体上的显示内容,全部都保存到内存中,存储在一幅称为历史图像的图像中;
2f)将历史图像中的绘制内容复制出来,然后绘制最新的采样点及其对应的线条,将新绘制内容与复制的历史图像内容进行累加融合,得到当前内容;
2g)将当前内容绘制到缓存中,该缓存是双缓存机制的第一块缓存;
2h)将缓存中的当前绘制内容,绘制到窗体上,并且对窗体进行刷新;
2i)用当前绘制内容更新历史图像,为下一次绘制做准备。
[0022]在每一次绘制线条的操作结束之后,都将绘制的内容保存下来,称为历史图像。当系统获取到新的采样点之后,首先将历史图像重新复制出来,然后只需要对最新的采样点,及其连线进行绘制即可,并且将新绘制的内容,累积到历史图像上,从而得到当前的画面内容。在将历史图像绘制到窗体上时,为了消除快速刷新时造成的闪烁效应,采用双缓存机制。先将所有的画面内容统一绘制到内存画板上,然后将内存画板一次性绘制到窗体上。最后再更新历史图像,以备下一个时刻使用。
[0023]在步骤(4)中,判断某一个时刻是否需要刷新,判断其与前一个刷新点的欧式距离,若两个刷新点之间的欧氏距离小于刷新距离阈值Th_refresh_dist,则不进行刷新,否贝1J,进行刷新。在完成鼠标点采样之后,还需要对采样点进行进一步的筛选,以决定在哪些时刻进行刷新,可以保证在不影响画线流畅性的前提下,降低计算量,提高用户体验。假设I秒钟鼠标点的数目是60个,从鼠标点中选择10个作为采样点,而从这10个采样点中再选择5个作为刷新点。刷新点是在采样点中选择的,是采样点的子集。
[0024]如图4所示,在步骤(5)中,所述重绘区域是指被重新绘制的区域,只针对增量式绘制时当前区域新出现的线条对应的外接矩形区域进行重绘,用小矩形序列来代替线条的外接矩形,覆盖原来的重绘区域,所述小矩形队列的计算方法如下:
5a)先设定矩形队列中的小矩形的最大边长阈值和小矩形数目上限;在进行实际重绘时,小矩形尺寸不能过大,否则增加了计算量;此外,在进行每一轮执行重绘操作时,矩形框的数目也不能太多,否则也会降低系统效率;
5b)计算当前线段的线条长度和方向角;
5c)比较线条长度与小矩形最大边长阈值:
5cl)若前者小于后者,则继续增加后续线条,分析总体外接矩形的尺寸,如果该尺寸依然小于阈值,则继续增加新的线条,直到外接矩形尺寸大于最大边长阈值时,用此时的几条线条的外接矩形进行重绘;
5c2)若前者大于后者,则判断外接矩形中较短一边与最大边长阈值的大小关系,如果外接矩形中较短一边小于最大边长阈值,则直接用线条外接矩形作为重绘区域进行重绘;如果外接矩形中较短一边大于最大边长阈值,则计算小矩形边长与数目阈值的乘积,将外接矩形中较短一边与该乘积进行比较,若外接矩形中较短一边大于乘积,则将线条长度按照数目阈值进行等分,根据等分线条对应的位置得到小矩形队列;若外接矩形中较短一边小于乘积,则参照最大边长阈值对线条进行均分,得到相应的小矩形队列;
5d)利用小矩形队列对画面区域进行重绘。最终计算得到的重绘区域如图6中的矩形所不O
[0025]Windows操作系统在显示窗体时,经常会出现窗体的各种变化,此时需要重新绘制显示内容。但是windows不是对所有的窗体都进行重绘,也不是重绘该窗体的所有内容,而是重新绘制一部分局部区域就行了,这样可以节约时间。这个被重新绘制的区域,就叫重绘区域。一般重绘区域都是一个矩形。
[0026]图5是一幅线条的图像,常规情形下,会直接利用该线条的最小外接矩形进行重绘,如图中的虚线框所示,这种重绘区域,存在大量的空白部分,因此效率很低。
[0027]在线条的绘制过程中,传统的重绘方式,是直接对整个画面进行重绘,这导致所有的内容都需要重绘,消耗了大量的计算资源。本发明中的重绘区域,只针对增量式绘制时当前区域新出现的线条对应的外接矩形区域进行重绘,从而极大地降低了重绘面积。除此之夕卜,为了进一步降低重绘区域面积,用一系列小矩形的组合来代替线条的外接矩形,覆盖原来的重绘区域,从而将计算量降低到极致。在子矩形的数目上,需要加以一定的控制,以保证刷新面积与重绘次数的平衡。
[0028]综上所述,本发明在线条的绘制过程中,采用增量绘制的方法降低运算量,即每次只在前一次绘制的基础之上,绘制最新出现的几个采样点,从而避免每个时刻点都需要对线条整体进行重绘的高计算量操作;在绘制过程中,对每个时刻,当前鼠标点是否需要采样的策略进行优化,在保持线条形状不受到影响的同时,尽量降低采样点的数目,从而减低被绘制的线条的复杂程度,起到提高线条绘制速度的目的;在绘制过程中,对每个时刻,当前图像内容是否需要刷新的判断机制进行优化,在不影响人眼观看效果,不造成明显的延迟感觉的前提下,尽量降低刷新频率,降低系统负载;在绘制过程中,对每个时刻,新绘制的线条的重绘区域进行优化,保证在重绘次数尽量少的情形下,使总的重绘面积降低到最少,从而提高线条绘制的流畅程度。
【主权项】
1.一种在投影交互系统中提升线条绘制速度的方法,该方法包括下列顺序的步骤: (1)从鼠标按下时刻开始,在窗体上绘制第一个采样点; (2)在前一时刻绘制的基础上,进行增量式绘制:将最新出现的几个采样点,以及其对应的线条,叠加到前一时刻绘制的结果上,得到当前时刻的绘制内容; (3)结合最近一次采样点的位置,对当前时刻鼠标所在位置是否应该采样进行判断; (4)根据当前采样点,与前一个采样点的欧氏距离,判断当前时刻是否需要刷新,对窗体内容进行更新; (5)计算最新的线条对应的重绘区域,在窗体上该重绘区域内进行重新绘制,更新窗体内容; (6 )鼠标弹起,本次线条的绘制结束。2.根据权利要求1所述的在投影交互系统中提升线条绘制速度的方法,其特征在于:所述采样点是指,在鼠标的移动过程中,每一个时刻对应一个鼠标坐标位置,由于鼠标的位置刷新速度快,一秒钟有几十个坐标位置,对这几十个坐标位置进行抽样,选择其中的一部分来进行绘图,这些被选中的鼠标坐标位置即为采样点。3.根据权利要求1所述的在投影交互系统中提升线条绘制速度的方法,其特征在于:在步骤(2)中,所述采样点的选取方法如下: 2a)设置用于存储所有采样点的采样点队列和用于存储候选采样点的候选队列; 2b)将第一个鼠标点位置加入到采样点队列中; 2c)计算第二个鼠标点到第一个采样点的欧氏距离,如果该欧氏距离大于采样距离阈值Th_sample_dist,则将第二个鼠标点加入采样点队列;反之,将第二个鼠标点暂时记录在候选队列中; 2d)从采样点队列中提取出前一个采样点坐标Pl,然后计算当前点P与Pl之间的欧式距离,将该欧氏距离与采样距离阈值Th_samp I e_d i s t进行比较: 2dl)若前者大于后者,则从候选队列中提取候选点;若候选点不存在,将当前点P加入到采样点队列中;若存在候选点P2,则计算由P、P2、P1组成的以P2为顶点的三角形的夹角,若夹角接近平角,说明此时当前点P与候选点P2,以及前一个采样点Pl在同一条线上,清空候选队列,将当前点P加入到采样点队列;若夹角非接近平角,说明当前点P与候选点P2、前一个采样点Pl非在一条直线上,此时将候选点P2加入到采样点队列,当前点P取代候选点P2成为候选点;返回步骤2d),进入循环; 2d2)若前者小于后者,则从候选队列中提取候选点;若候选点不存在,将当前点P加入到候选队列中去,成为候选点;若存在候选点P2,则计算由P、P2、P1组成的以P2为顶点的三角形的夹角;如果夹角接近平角,则用当前点P代替候选点P2;若夹角非接近平角,则将候选点P2加入采样点队列,使当前P成为候选点;返回步骤2d),进入循环。4.根据权利要求1所述的在投影交互系统中提升线条绘制速度的方法,其特征在于:在步骤(2)中,所述增量式绘制的方法如下: 2e)将当前窗体上的显示内容,全部都保存到内存中,存储在一幅称为历史图像的图像中; 2f)将历史图像中的绘制内容复制出来,然后绘制最新的采样点及其对应的线条,将新绘制内容与复制的历史图像内容进行累加融合,得到当前内容; 2g)将当前内容绘制到缓存中,该缓存是双缓存机制的第一块缓存; 2h)将缓存中的当前绘制内容,绘制到窗体上,并且对窗体进行刷新; 2i)用当前绘制内容更新历史图像,为下一次绘制做准备。5.根据权利要求1所述的在投影交互系统中提升线条绘制速度的方法,其特征在于:在步骤(4)中,判断某一个时刻是否需要刷新,判断其与前一个刷新点的欧式距离,若两个刷新点之间的欧氏距离小于刷新距离阈值Th_refresh_dist,则不进行刷新;否则,进行刷新。6.根据权利要求1所述的在投影交互系统中提升线条绘制速度的方法,其特征在于:在步骤(5)中,所述重绘区域是指被重新绘制的区域,只针对增量式绘制时当前区域新出现的线条对应的外接矩形区域进行重绘,用小矩形序列来代替线条的外接矩形,覆盖原来的重绘区域,所述小矩形队列的计算方法如下: 5a)先设定矩形队列中的小矩形的最大边长阈值和小矩形数目上限; 5b)计算当前线段的线条长度和方向角; 5c)比较线条长度与小矩形最大边长阈值: 5cl)若前者小于后者,则继续增加后续线条,分析总体外接矩形的尺寸,如果该尺寸依然小于阈值,则继续增加新的线条,直到外接矩形尺寸大于最大边长阈值时,用此时的几条线条的外接矩形进行重绘; 5c2)若前者大于后者,则判断外接矩形中较短一边与最大边长阈值的大小关系,如果外接矩形中较短一边小于最大边长阈值,则直接用线条外接矩形作为重绘区域进行重绘;如果外接矩形中较短一边大于最大边长阈值,则计算小矩形边长与数目阈值的乘积,将外接矩形中较短一边与该乘积进行比较,若外接矩形中较短一边大于乘积,则将线条长度按照数目阈值进行等分,根据等分线条对应的位置得到小矩形队列;若外接矩形中较短一边小于乘积,则参照最大边长阈值对线条进行均分,得到相应的小矩形队列; 5d)利用小矩形队列对画面区域进行重绘。
【文档编号】G06F3/038GK106095139SQ201610389333
【公开日】2016年11月9日
【申请日】2016年5月30日 公开号201610389333.7, CN 106095139 A, CN 106095139A, CN 201610389333, CN-A-106095139, CN106095139 A, CN106095139A, CN201610389333, CN201610389333.7
【发明人】汪俊锋, 邓宏平
【申请人】安徽慧视金瞳科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1