用于更新动态场景的Voronoi图的方法及设备转让专利

申请号 : CN201210228113.8

文献号 : CN102831628B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 方巍毛天露蒋浩李杨王兆其

申请人 : 中国科学院计算技术研究所

摘要 :

本发明提供了用于更新动态场景的Voronoi图的方法。该方法根据场景变化,确定要执行的基本更新操作序列;然后,对于基本更新操作序列中的每个操作,确定该操作的局部更新范围并对Voronoi图进行更新。每次操作的局部更新范围仅包括该操作能够影响到的Voronoi区域,所以,更新会被限定在一个很小的范围内。针对场景的变化进行局部更新,插入和删除一个基点的效率很高,能够达到毫秒级,其他变化都可以用一次删除紧接一次重新插入实现,速度也会非常快,能够满足实时交互的速度要求。

权利要求 :

1.一种用于更新动态场景的Voronoi图的方法,所述方法包括:步骤1)根据场景变化,确定要执行的基本更新操作序列;所述基本更新操作包括:插入操作和删除操作;

步骤2)对于基本更新操作序列中的每个操作,确定该操作的局部更新范围,所述局部更新范围指所有受到该操作影响的Voronoi区域的集合;

步骤3)计算该局部范围的Voronoi图,并将经计算得到的该局部范围内的Voronoi图拼接回原Voronoi图,以覆盖该局部范围内原有的Voronoi图;

其中,在步骤2)通过下列步骤确定插入操作的局部更新范围:a)计算插入基点的位置覆盖的Voronoi区域的集合,并将其作为该插入操作的初始的候选区域集合;

b)找到候选区域集合中的每个区域的每条边,计算这些边上每个点到插入基点的距离d;

c)当距离d小于该边上某个点到障碍物的间隙值时,将关于该边的邻居区域加入到候选区域集合中;

重复步骤b)和c),直到候选区域集合不再发生变化时,将候选区域集合作为插入操作的局部更新范围。

2.根据权利要求1所述的方法,在步骤1)除插入一个基点和删除一个基点的场景变化之外,其他场景变化均被分解为一次删除操作紧接着一次插入操作。

3.根据权利要求1所述的方法,在步骤2)将要删除的基点所支配的Voronoi区域作为删除操作的局部更新范围。

4.一种用于更新动态场景的Voronoi图的设备,所述设备包括:用于根据场景变化,确定要执行的基本更新操作序列的装置,所述基本更新操作包括:插入操作和删除操作;

用于对于基本更新操作序列中的每个操作,确定该操作的局部更新范围的装置,所述局部更新范围指所有受到该操作影响的Voronoi区域的集合;

用于计算该局部范围的Voronoi图,并将经计算得到的该局部范围内的Voronoi图拼接回原Voronoi图,以覆盖该局部范围内原有的Voronoi图的装置;

其中,所述用于对于基本更新操作序列中的每个操作,确定该操作的局部更新范围的装置还包括用于确定插入操作的局部更新范围的装置,其用于执行:a)计算插入基点的位置覆盖的Voronoi区域的集合,并将其作为该插入操作的初始的候选区域集合;

b)找到候选区域集合中的每个区域的每条边,计算这些边上每个点到插入基点的距离d;

c)当距离d小于该边上某个点到障碍物的间隙值时,将关于该边的邻居区域加入到候选区域集合中;

重复步骤b)和c),直到候选区域集合不再发生变化时,将候选区域集合作为插入操作的局部更新范围。

5.根据权利要求4所述的设备,其中,除插入一个基点和删除一个基点的场景变化之外,其他场景变化均被分解为一次删除操作紧接着一次插入操作。

6.根据权利要求4所述的设备,其中,删除操作的局部更新范围为要删除的基点所支配的Voronoi区域。

7.一种用于动态更新场景的方法,所述方法包括:

获取场景的Voronoi图并记录场景变化;

采用如权利要求1-3之一所述的方法更新该场景的Voronoi图;

基于经更新后的Voronoi图来重建该场景。

说明书 :

用于更新动态场景的Voronoi图的方法及设备

技术领域

[0001] 本发明涉及计算机图形和虚拟现实领域,尤其涉及对场景的Voronoi(沃罗洛伊)图的快速更新。

背景技术

[0002] 由Descartes于400年前提出的Voronoi图是计算几何中一个重要的、基本的多功能计算几何工具。Voronoi图对场景进行特殊的细分,将场景分成许多区域(region)的集合,每个区域是到一个特定的Voronoi基点(site)比到其他基点更近的点的集合并且该区域是由该特定的Voronoi基点支配(govern)的。一个Voronoi基点是一个对象(object)(一个点,线或者多边形),它可能表示一个障碍物,一个形状,人体的一个特征等等。Voronoi边(edge)是Voronoi区域的边界的集合,其上的每个点到相邻的两个基点的距离相等。
[0003] Voronoi图在虚拟现实领域和计算机图形学中有着丰富的应用。其中,Voronoi图的实时更新,尤其是对动态场景的Voronoi图的实时更新,是研究的热点和难点之一。因为,在许多实际的应用中,场景需要被表现为动态变化的,比如形状分析中物体的部分变形,路径规划场景中门的打开和关闭,一场交通事故导致一条路线堵塞、虚拟现实中的实时交互和仿真等等。在许多场景中,会有各种各样类似上述的动态变化,而且变化是频繁发生的。
[0004] 参考文献1提供了计算动态场景的Voronoi图的更新方法(参考文献1:SUD,A.,ANDERSENM,E.,CURTIS,S.,LIN,M.,AND MANOCHA,D.2008.Real-time path planning in dynamic virtual environments using multiagent navigation graphs.IEEE Transactions on Visualization and Computer Graphics 14,526-538.)。但是,在该方法中,只要Voronoi基点发生任何改变都需要重新计算整个Voronoi图,显然这是低效和冗余的。
[0005] 参考文献2也是计算动态场景的Voronoi图的更新方法,但只解决动态场景的Voronoi图更新中某种特殊的操作(参考文献2:WOUTER,V.T.,ATLAS,F.C.I.,AND ROLAND,G.2011.Navigation Meshes for Realistic Multi-Layered Environments.In IEEE/RSJ International Conference on Intelligent Robots and Systems.)。该方法只解决了动态场景计算Voronoi图的删除一个基点的问题,而像插入一个基点,移动一个基点等其他操作,都不能实现,故这样的方法只能限定在层次场景等特定场景中。
[0006] 参考文献3中给出了完整的Voronoi图的局部更新方法(参考文献3:FRANCISCO,D.M.P.,AND CARLA,M.D.S.F.2011.Dynamic Voronoi diagram of complex sites.Vis Comput 27:463–472.)。该方法使用四叉树结构细分和组织动态场景,利用优先队列辅助计算局部更新范围,实现动态Voronoi图的局部更新。但是,该方法每次更新都必须查询和维护一个四叉树结构,实现复杂,而且没法在图形处理单元(Graphic Processing Unit,GPU)上并行实现,效率低。

发明内容

[0007] 因此,本发明的目的在于克服上述现有技术的缺陷,提供一种用于更新动态场景的Voronoi图的方法,实现对动态场景的Voronoi图的快速更新且简单、高效。
[0008] 本发明的目的是通过以下技术方案实现的:
[0009] 一方面,本发明提供了一种用于更新动态场景的Voronoi图的方法,包括:
[0010] 步骤1)根据场景变化,确定要执行的基本更新操作序列;所述基本更新操作包括:插入操作和删除操作;
[0011] 步骤2)对于基本更新操作序列中的每个操作,确定该操作的局部更新范围,所述局部更新范围指所有受到该操作影响的Voronoi区域的集合;
[0012] 步骤3)计算该局部范围的Voronoi图,并将经计算得到的该局部范围内的Voronoi图拼接回原Voronoi图,以覆盖该局部范围内原有的Voronoi图。
[0013] 上述技术方案中,在步骤1)除插入一个基点和删除一个基点的场景变化之外,其他场景变化均可以被分解为一次删除操作紧接着一次插入操作。
[0014] 上述技术方案中,在步骤2)可以通过下列步骤确定插入操作的局部更新范围:
[0015] a)计算插入基点的位置覆盖的Voronoi区域的集合,并将其作为该插入操作的初始的候选区域集合;
[0016] b)找到候选区域集合中的每个区域的每条边,计算这些边上每个点到插入基点的距离d;
[0017] c)当距离d小于该边上某个点到障碍物的间隙值时,将关于该边的邻居区域加入到候选区域集合中;
[0018] 重复步骤b)和c),直到候选区域集合不再发生变化时,将候选区域集合作为插入操作的局部更新范围。
[0019] 上述技术方案中,在步骤2)可以将要删除的基点所支配的Voronoi区域作为删除操作的局部更新范围。
[0020] 又一个方面,本发明提供了一种用于更新动态场景的Voronoi图的设备,包括:
[0021] 用于根据场景变化,确定要执行的基本更新操作序列的装置,所述基本更新操作包括:插入操作和删除操作;
[0022] 用于对于基本更新操作序列中的每个操作,确定该操作的局部更新范围的装置,所述局部更新范围指所有受到该操作影响的Voronoi区域的集合;
[0023] 用于计算该局部范围的Voronoi图,并将经计算得到的该局部范围内的Voronoi图拼接回原Voronoi图,以覆盖该局部范围内原有的Voronoi图的装置。
[0024] 其中,除插入一个基点和删除一个基点的场景变化之外,其他场景变化均被分解为一次删除操作紧接着一次插入操作。
[0025] 又一方面,本发明提供了一种用于动态更新场景的方法,所述方法包括:
[0026] 获取场景的Voronoi图并记录场景变化;
[0027] 采用上面所述的用于更新动态场景的Voronoi图的方法更新该场景的Voronoi图;
[0028] 基于经更新后的Voronoi图来重建该场景。
[0029] 与现有技术相比,本发明的优点在于:
[0030] 针对场景的动态变化,将更新会限定在一个很小的范围内,每次操作的局部更新范围仅包括该操作能够影响到的Voronoi区域。插入和删除一个基点的效率很高,能够达到毫秒级,将其他场景变化用一次删除紧接一次重新插入实现,速度也非常快,能够满足实时交互的速度要求。而且该方法实现简单,既能通过软件实现,又方便通过图形硬件并行计算实现,应用广泛,效率高。

附图说明

[0031] 以下参照附图对本发明实施例作进一步说明,其中:
[0032] 图1为根据本发明实施例的插入一个Voronoi基点的更新过程示意图;
[0033] 图2为根据本发明实施例的删除一个Voronoi基点的更新过程示意图。

具体实施方式

[0034] 为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0035] 在本发明的实施例中,提供一种快速更新动态场景的Voronoi图的方法。该方法包括根据场景变化,确定要执行的基本更新操作序列;然后,对于基本更新操作序列中的每个操作,确定该操作的局部更新范围并对Voronoi图进行更新。
[0036] 更具体地,该方法包括以下步骤:
[0037] 首先,根据场景变化,确定要执行的基本更新操作序列。
[0038] 所述基本更新操作包括:插入操作和删除操作,即插入一个基点(site)和删除一个基点。其他场景变化,比如移动,旋转,缩放一个基点等等,都可以分解为一次删除紧接着一次重新插入实现,也就是可以将其分解为包括一次删除操作和一次插入操作所构成的基本更新操作序列,例如,一次删除操作紧接着一次插入操作。例如,如果场景变化仅是单纯的移动,比如将site从位置A移动到位置B,则可将其分解为删除位置A的site,紧接着在位置B插入该site。又例如,如果场景变化是同时移动并且旋转,比如将site在位置A,面向30度方向,移动到位置B,面向60度方向,则可分解为删除位置A,面向30度方向的site,在位置B插入一个面向60度方向的site。
[0039] 然后,对于基本更新操作序列中的每个基本操作,确定该操作的局部更新范围,并对Voronoi图进行更新。
[0040] 所述局部更新范围是指由某个操作而导致场景发生变化时,所有受到该操作影响的Voronoi区域的集合(也可以将其称为候选区域集合)。其中,受到某个操作影响的Voronoi区域是指:当发生某个操作时,这个区域中至少存在一个点,不再受原支配它的基点支配,而是变为由别的基点支配。删除操作的候选区域集合仅仅包括要删除的基点所支配的Voronoi区域,而插入操作的候选区域集合包括多个与插入基点的位置相邻的区域。
[0041] 图1是根据本发明实施例的在Voronoi图中插入一个基点的过程示意图。附图标记1指示的是一个待插入的Voronoi基点,而附图标记2指示的是受到插入基点影响的基点。曲线是Voronoi边。所有标号为2的基点支配的Voronoi的区域就是受到插入一个基点操作影响的Voronoi区域的集合。如上所述,插入一个基点实际上就是执行一次插入操作,首先需要确定该插入操作的局部更新范围。
[0042] 例如可以通过下列步骤来确定插入操作的局部更新范围:
[0043] 步骤a)计算插入基点的位置覆盖的Voronoi区域的集合,并将其作为该插入操作的初始的候选区域集合。如图1(a)和1(b)所示,每当插入一个基点,首先计算插入基点的位置覆盖(也就是指这个基点的所有点落在哪几个原有的区域上。)的Voronoi区域的集合Rc,在本例中,只有一个Voronoi区域被插入基点1的位置覆盖,因此在该例子中,该插入操作的初始的候选区域集合中仅包括这个区域。
[0044] Voronoi图的基点和其支配的Voronoi边和Voronoi区域之间,天生就存在一种映射关系(在构建Voronoi时会保存这种映射关系),也就是说通过Voronoi图的基点能够定位到该基点所支配的Voronoi区域,进而定位到属于该区域的Voronoi边,即该Voronoi图的基点所支配的Voronoi边。所以正如1(b)所示,通过这种映射关系,采取自内而外的迭代法,计算插入操作的候选区域集合。主要包括以下步骤:
[0045] 步骤b)找到候选区域集合中的每个区域的每条边,计算这些边上每个点到插入基点的最短欧拉距离d。例如,可以将边近似表示成离散化点的集合,通过求点到多边形每条边线段的距离,取其中最小者来作为d。
[0046] 步骤c)当距离d小于该边上某个点到障碍物的间隙值(clearance value)时,说明插入的基点能够支配该边,也就至少能支配关于该边的邻居区域rt的一个点,所以它对rt产生了影响,需要将其加入到候选的区域集合中。其中间隙值是指场景中的点到最近基点的最短欧拉距离值,在构建Voronoi图的过程中,自然就计算和保存了每个点的间隙值,例如,如果用图形硬件实现Voronoi图,则间隙值就保存在深度缓存中。
[0047] 步骤d)重复步骤a)和b),直到候选区域集合不再发生改变。这说明其他的区域离插入的基点理论上不是最近的,插入的基点不能越过更近的区域对他们产生影响,所以,为了保证动态更新的局部性,丢弃这些区域。正如图1(c)所示,已经找到了候选区域的集合,所有标号为2的基点支配的区域就是整个候选区域集合,也就是该插入操作的局部更新范围。
[0048] 然后,可以使用现存的各种成熟的计算Voronoi图的算法重新计算候选区域集合中所有区域构成动态场景的一个局部范围内的Voronoi图(也可以简称为局部范围的Voronoi图)。
[0049] 比如使用CPU计算的增量法(参考文献4:Rolf,K.1989.Concrete and Abstract Voronoi Diagrams.In volume 400 of LNCS.Springer-Verlag.);扫描线方法(参考文献5:Fortune,S.1986.A sweepline algorithm for Voronoi diagrams.In:Proceedings of the Second Annual Symposium on Computa tional Geometry(SCG),pp.313–322.)和分治法(参考文献6:Michael,I.S.,Dan,H.1975.Closest-point problems.In Proceedings of the 16th IEEE Symposium on the Foundations of Computer Science,pages 151–
162);也可使用图形硬件并行算法计算候选的区域的集合区域的局部更新的Voronoi图(参考文献7:Kenneth,H.,Tim,C.,John,K.,Lin,M.,AND Dinesh,M.1999.Fast computation of generalized voronoi diagrams using graphics hardware.In International Conference on Computer Graphics and Interactive Techniques,pp.277-286.)。
[0050] 最后,正如图1(d)所示,将更新后得到的局部Voronoi图,拼接回原Voronoi图,覆盖原局部范围内的局部Voronoi图,就得到了一个更新后的Voronoi图。
[0051] 图2是根据本发明实施例的在Voronoi图中删除一个site的过程示意图。确定删除操作的局部更新范围(候选区域集合)比插入操作要简单,删除操作的候选区域集合仅仅包括被删除的site所统治的Voronoi区域。图2(a)是删除前的Voronoi图,要删除中间的基点1;该删除操作的候选集合是基点1所统治的Voronoi区域。
[0052] 可以使用上文所列出的各种成熟的计算Voronoi图的算法重新计算候选区域集合中所有区域构成动态场景的一个局部范围内的Voronoi图,将更新后的局部Voronoi图,拼接回原Voronoi图,覆盖原局部范围内的局部Voronoi图,就得到了一个更新后的Voronoi图(如图2(b)所示)。
[0053] 在本发明的实施例中提供了局部更新动态场景的Voronoi图的方法,其更新的范围是候选区域集合中的所有区域构成动态场景的一个局部范围,该集合包括且只包括改变的基点能够影响到的Voronoi区域,所以,更新会被限定在一个很小的范围内。该方法能满足动态场景各种变化对Voronoi图的快速更新的需要。插入和删除一个site的效率很高,能够达到毫秒级,其他变化都可以用一次删除紧接一次重新插入实现,速度也会非常快,能够满足实时交互的速度要求。另外,本发明的方法中寻找局部更新范围的方法简单高效,复杂度低。而将更新分解为由插入和删除构成的基本操作序列,不仅可通过软件简单实现,而且更有利于通过图形硬件并行计算实现,应用广泛,效率高。
[0054] 在本发明的又一个实施例中,还提供了一种用于更新动态场景的Voronoi图的设备,所述设备包括:用于根据场景变化,确定要执行的基本更新操作序列的装置,所述基本更新操作包括:插入操作和删除操作;用于对于基本更新操作序列中的每个操作,确定该操作的局部更新范围的装置,所述局部更新范围指所有受到该操作影响的Voronoi区域的集合;用于计算该局部范围的Voronoi图,并将经计算得到的该局部范围内的Voronoi图拼接回原Voronoi图,以覆盖该局部范围内原有的Voronoi图的装置。
[0055] 在本发明的又一个实施例中,还提供了一种用于动态更新场景的方法。该方法首先获取场景的Voronoi图并记录场景变化,同时采用如上文所述的用于更新动态场景的Voronoi图的方法更新该场景的Voronoi图;然后,基于经更新后的Voronoi图来重建该场景。
[0056] 虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所作出的各种改变以及变化。