首页> 中国专利> 一种基于概率统计的任意多边形相交面积计算方法

一种基于概率统计的任意多边形相交面积计算方法

摘要

本发明公开了一种基于概率统计的任意多边形相交面积计算方法,该方法借助于GPU来实现任意多边形的栅格化,将以顶点坐标表示的多边形转换为以栅格表示的多边形栅格图像,再根据栅格图像的相交情况对栅格的位置标示符进行赋值、修正,然后在栅格场中随机选取随机栅格来模拟整个栅格区域以提高时间性能,最后统计随机栅格中相交栅格的数目,再计算相交面积。该方法不受多边形凹凸性的限制,利用了GPU的并行特性,与借助于CPU的计算方法相比,大大提升了处理速度,并且原理简单,实现方便。实验结果表明,本发明的计算方法适用于任意复杂多边形,计算方法很好的避免了传统计算方法所遇到的奇异性问题,从而具有较好的鲁棒性。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-12-10

    授权

    授权

  • 2017-06-16

    实质审查的生效 IPC(主分类):G06T1/20 申请日:20161122

    实质审查的生效

  • 2017-05-24

    公开

    公开

说明书

技术领域

本发明涉及计算机图形图像处理面积计算领域,具体涉及一种基于概率统计的任意多边形相交面积计算方法。

背景技术

平面多边形相交面积的应用非常广泛,在计算机图形学、计算几何学及计算流体力学等领域都需要计算相交多边形共同覆盖区域的面积。

现有的多边形相交面积计算方法一般是是由计算机的通用处理器(CPU)以串行处理方式来实现。近年来,在计算机动画、虚拟现实等领域,为了表现更丰富的细节,现有基于CPU的串行处理方法在多边形相交面积计算应用中已无法满足快速实时的需求。

目前,GPU即图形处理器,以其强大的运算能力在图形处理方面得到了广泛应用,与CPU的串行处理方法不同,GPU的优势在于其并行处理机制,因此在处理速度方面优势明显。但是,现有技术中,针对多边形相交面积计算,尚缺乏基于GPU处理完成多边形相交面积的工程实现方法。

另外,从相交多边形的形状来看,现有的多边形相交面积计算方法大多针对凸多边形的相交面积进行计算,而对于凹多边形的相交,多数计算方法需要先对凹多边形进行三角化或凸化细分。由于细分工作本身较复杂且会带来更多的边做相交测试,这大大增加了计算量,尤其是对于含有较多凹点或交点数量较多的多边形更是如此。因此,现有技术在进行凹多边形相交面积计算时耗时多、工作量大、效率低,与凸多边形相交面积计算相比,对凹多边形相交面积的计算显得力不从心。。

发明内容

本发明的目的是针对上述现有技术的不足,而提供一种基于概率统计的任意多边形相交面积计算方法,既提高多边形相交面积计算的处理速度,又可以不受多边形形状的限制,可以针对任意形状和数量的多边形相交而计算相交面积。

为解决上述技术问题,本发明采用的一个技术方案是:提供一种基于概率统计的任意多边形相交面积计算方法,所述计算方法包括如下步骤:

(1)在栅格场中确定一个栅格区域,并对所述栅格区域初始化,将所述栅格区域内各栅格对应的位置标示符的值均预设为初始值a,a≥0;

(2)在所述栅格区域内生成第一个多边形栅格图像,将以顶点坐标表示的第一个多边形对应转换为由GPU处理的以栅格表示的第一个多边形栅格图像,若所述栅格区域内任一栅格位于所述第一个多边形栅格图像的内部或边线上,则将所述栅格对应的位置标示符的值累加b变为a+b,b≥1,否则,若所述栅格区域内任一栅格位于所述第一个多边形栅格图像的外部,则所述栅格对应的位置标示符的值不作累加;

(3)继续生成第2~n个多边形栅格图像,按照步骤(2)所述方法顺次在所述栅格区域内继续生成其余n-1个多边形栅格图像,n≥2,其中,在生成每一个当前多边形栅格图像时,若所述栅格区域内任一栅格位于所述当前多边形栅格图像的内部或边线上,则将所述栅格对应的位置标示符的值累加b,否则,若所述栅格区域内任一栅格位于所述当前多边形栅格图像的外部,则所述栅格对应的位置标示符的值不作累加;

(4)统计n个多边形栅格图像的相交栅格数count',在所述栅格区域内随机独立选取m个栅格,统计这m个栅格中位置标示符的值为a+nb的栅格的数目count';

(5)计算n个多边形的相交面积S,将所述相交栅格数count'除以所述随机独立选取的栅格数m,然后再乘以所述栅格区域的面积,即得到所述n个多边形的相交面积S。

在本发明另一个实施例中,步骤(1)中的所述栅格区域为所述的整个栅格场,所述栅格场的面积为SArea,则所述n个多边形的相交面积S为:

在本发明另一个实施例中,确定所述n个多边形栅格图像在所述栅格场中所占用的栅格图幅是由GPU处理完成的,具体方法是:确定所述n个多边形在X方向坐标的最大值Vxmax和最小值Vxmin,以及所述n个多边形在Y方向坐标的最大值Vymax和最小值Vymin,则由VxmaxVxminVymaxVymax确定的栅格范围即为所述的栅格图幅;且所述n个多边形在X方向坐标的最小值Vxmin栅格化后位于所述栅格图幅从左至右的第一列,最大值Vxmax栅格化后位于所述栅格图幅从左至右的最后一列,所述n个多边形在Y方向坐标的最小值Vymin栅格化后位于所述栅格图幅从下至上的第一行,最大值Vymax栅格化后位于所述栅格图幅从下至上的最后一行。

在本发明另一个实施例中,所述步骤(4)中统计m个栅格中位置标示符的值为a+nb的栅格的数目由GPU处理完成,或者由GPU通过软件环境OpenGL中的像素读取函数将随机选取的m个栅格及其对应的位置标示符的值传送到CPU后由CPU处理完成。

在本发明另一个实施例中,所述CPU为Inter Core(TM)i5-3337U处理器,所述GPU为NVIDIA GeForce GT 620M,操作系统为Microsoft Windows 7、软件环境OpenGL为OpenGL4.4.0。

在本发明另一个实施例中,所述步骤(2)和(3)中将以顶点坐标表示的多边形对应转换为由GPU处理的以栅格表示的多边形栅格图像的方法为:在OpenGL软件环境中构建转换处理函数,向所述转换处理函数顺次输入所述多边形所有顺序排列的顶点坐标,所述转换处理函数输出的即为所述各顶点坐标按照输入顺序首尾相连构成的所述以栅格表示的多边形栅格图像。

在本发明另一个实施例中,所述栅格场的分辨率包括256×256、512×512、1024×1024、2048×2048,所述随机独立选取的栅格数m为所述栅格场分辨率的40%、50%或者60%。

在本发明另一个实施例中,所述初始值a=0,b=1。

本发明的有益效果是:本发明基于概率统计的任意多边形相交面积计算方法是一种新颖高效的多边形相交面积计算方法,该方法借助于GPU来实现任意多边形的栅格化,将以顶点坐标表示的多边形转换为以栅格表示的多边形栅格图像,再根据图像的相交情况对所有栅格的位置标示符进行赋值、修正,再在栅格区域中随机选取m个随机栅格来模拟整个栅格场,统计m个随机栅格中相交栅格的数目,最后再计算相交面积。该方法的优点如下:

(1)将多边形栅格化,利用栅格数据进行处理,不受多边形凹凸性的限制;另外,由于栅格数据是将几何空间作为整体进行描述,它以规则的阵列来表示空间对象,数据直接记录栅格的显示特征,而所在位置则根据行列号转换为相应的坐标,不受空间对象形状的影响,具体空间对象的复杂程度不影响数据量的大小,因此处理起来也更简便;

(2)利用了GPU的并行特性,与借助于CPU的计算方法相比,大大提升了处理速度,并且原理简单,实现方便;

(3)利用少量随机栅格来模拟栅格区域进一步提高了时间性能。

经过实验结果表明,本发明的计算方法适用于任意复杂多边形,计算方法在相交测试部分很好的避免了传统计算方法所遇到的边界问题,从而具有较好的鲁棒性。

附图说明

图1为本发明基于概率统计的任意多边形相交面积计算方法一实施例的流程图;

图2为本发明基于概率统计的任意多边形相交面积计算方法另一实施例中两个多边形栅格图像相交实施例的示意图;

图3为本发明基于概率统计的任意多边形相交面积计算方法另一实施例中运用的蒙特卡罗计算定积分的原理示意图;

图4为本发明基于概率统计的任意多边形相交面积计算方法另一实施例中实验验证采用的有“洞”多边形示例图。

具体实施方式

为了便于理解本发明,下面结合附图和具体实施例,对本发明进行更详细的说明。附图中给出了本发明的较佳的实施例。但是,本发明可以以许多不同的形式来实现,并不限于本说明书所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容的理解更加透彻全面。

需要说明的是,除非另有定义,本说明书所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是用于限制本发明。本说明书所使用的术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。

图1是本发明基于概率统计的任意多边形相交面积计算方法一实施例的流程图。

首先,需要说明的是,图1所示实施例是基于GPU处理实现对图形图像的处理,而GPU处理直接与图形图像的显示场景密切相关,因此本发明实施例相应涉及到栅格、栅格场等概念。这里的栅格是指对图形图像进行数字化处理后的最小显示单元,每一个栅格对应一个显示像素,众多栅格以纵横阵列形式所构成的显示区域称之为栅格场,因此栅格场通常也是指显示屏幕。例如,像素为248×248的显示屏就对应指有248×248个栅格的栅格场。

另外,本发明实施例的优势还在于栅格场中是对栅格数据进行处理的基础,而栅格数据是一种面向空间的表示方法,栅格数据结构要比矢量数据结构(这里的矢量数据是一种面向实体的表示方法,它是以坐标的形式来表示空间物体)更加适合计算机进行处理。栅格数据是将几何空间作为整体进行描述,它以规则的阵列来表示空间对象,数据直接记录栅格的显示特征,而所在位置则根据行列号转换为相应的坐标,不受空间对象形状的影响,空间对象的复杂程度不影响数据量的大小。而矢量数据结构是通过记录坐标的方式尽可能精确地表示点、线和多边形等具体的空间物体,但是物体越复杂,描述就越困难,数据量也随之增大。因此,比较而言,栅格数据要比矢量数据结构简单得多,基于空间的几何分析也相对容易。

本发明实施例中,将以矢量数据表示的多边形转化为以栅格数据表示的多边形栅格图像的过程即为栅格化。本实施例要利用GPU进行相交面积计算也是基于栅格数据实现的。

如图1所示,该实施例的方法包括如下步骤:

步骤S1:在栅格场中确定一个栅格区域,并对该栅格区域初始化,将栅格区域内各栅格对应的位置标示符的值均预设为初始值a,a≥0。

这里,步骤S1的目的是完成对栅格场的初始化。如上所述,栅格场是指整个显示区域或显示屏幕,而在对图形相交面积计算中,相交图形在显示屏幕上显示并不一定占据整个屏幕,因此只需选定一个合理的区域即可,这个显示区域实际上是由各个相交多边形占有的显示区域共同决定的,在该显示区域内能够包括各个相交多边形,同时这个显示区域尽可能小,这样有利于提高处理速度。这个显示区域就是步骤S1中需要确定的栅格区域。

另外,步骤S1中栅格对应的位置标示符的含义是指在栅格场中的每一个栅格都对应一个位置标识符,该位置标识符属于一种栅格数据。例如,在一个有248×248个栅格的栅格场中,若将左下角顶点的第一个栅格对应的位置标识符表示为rct(0,0),其中第一个0表示横向坐标,第二个0表示纵向坐标,因此临近该顶点栅格的上方一个栅格的位置标识符表示为rct(0,1),而临近该顶点栅格的右方一个栅格的位置标识符表示为rct(1,0),以此类推。对栅格对应的位置标示符进行赋值是为了表示该栅格的显示特征,例如rct(0,0)=0可以表示该顶点栅格没有显示任何内容,即空白显示,而rct(0,0)=1可以表示该顶点栅格有显示内容。优选的,在本发明实施例中我们可以规定若一个栅格位于一个多边形栅格图像所围成的区域内或者在该多边形栅格图像的边线上,则该栅格的位置标识符的值为1或者在原有值的基础上加1,若该栅格位于该多边形栅格图像所围成的区域外部(即不在该多边形栅格图像的内部和边线上),则该栅格的位置标识符的值为0或者对原有值不做任何运算。

步骤S1中只是对确定的栅格区域内各栅格对应的位置标示符的值进行了初始赋值,并且预设为初始值a,a≥0。优选的,a=0。

进一步的,我们可以看出,对于步骤S1,需要确定一个合理的栅格区域,这个栅格区域既可以是整个栅格场,也可以是通过GPU根据待计算相交面积的所有多边形所确定的栅格图幅。这里,栅格图幅为由待计算相交面积的所有这些多边形经过栅格化后在栅格场中所确定的栅格范围。

为此,本发明实施例提供一个确定栅格图幅的优选实施例:首先,对于以矢量数据表示的这些多边形的所有顶点的坐标,确定这些多边形在X方向上坐标的最大值和最小值分别为Vxmax、Vxmin,在Y方向上坐标的最大值和最小值分别为Vymax、Vymin;然后,在这些相交多边形栅格化过程中,X方向坐标的最小值Vxmin栅格化后位于栅格图幅从左至右的第一列,最大值Vxmax栅格化后位于栅格图幅从左至右的最后一列,Y方向坐标的最小值Vymin栅格化后位于栅格图幅从下至上的第一行,最大值Vymax栅格化后位于栅格图幅从下至上的最后一行。

对于该栅格图幅的面积,则为(Vxmax-Vxmin)x(Vymax-Vymin)。

图1中,完成步骤S1后进入步骤S2:对计算任意多边形相交面积的第一个多边形栅格化,在栅格区域内生成第一个多边形栅格图像,即将以顶点坐标表示的第一个多边形转换为由GPU处理的以栅格表示的第一个多边形栅格图像,并修正该多边形栅格图像对应各栅格的位置标示符的值,若该栅格区域内任一栅格位于第一个多边形栅格图像的内部或边线上,则将该栅格对应的位置标示符的值在初始值a的基础上进行一次累加操作变为a+b,b≥1;否则,若该栅格区域内任一栅格位于第一个多边形栅格图像的外部,则该栅格对应的位置标示符的值不变。

步骤S2开始对第一个相交多边形进行处理,包含两个过程,第一个过程是栅格化的过程,即以顶点坐标表示的第一个多边形转化为栅格数据表示的第一个多边形栅格图像,这里,顶点坐标属于一种矢量数据,而栅格数据是指栅格显示的像素特征数据,比如由灰度、亮度、色彩等特征数据;第二个过程是栅格的位置标示符赋值的过程,主要是针对第一个多边形栅格图像的内部(包括边线)和外部加以区分,在其内部的栅格对应的位置标示符进行累加操作而改变这些位置标示符的值,在其外部的栅格对应的位置标示符不进行任何操作而保持另外这些位置标示符的值不变。

这里,第一个栅格化的过程是由GPU处理完成的,实际应用中可以通过图形图像开发软件环境OpenGL中的glBegin()、glEnd()专用函数来实现,其过程是通过这些专用函数将第一个多边形的顶点坐标顺次输入。优选的,这里的多边形是指由同一平面上不同的点首尾顺次连接,任一个顶点都在边上,且任意不相邻的两条边不相交所构成的空间图形,因此包括了凸多边形和凹多边形。这样,经过栅格化之后,第一个多边形就转化为栅格图像,即第一个多边形对应的第一个多边形栅格图像。

优选的,步骤S2中累加操作值b为1,当步骤S1中的a值为0时,则经过步骤S2之后,在第一个多边形栅格图像内部(包括边线)的所有栅格对应的位置标示符的值为1,而在第一个多边形栅格图像外部的栅格对应的位置标示符的值为0。

以下一段处理程序示例是在OpenGL软件开发环境下实现对多边形的栅格化处理:

glBegin(GL_POLYGON);

glVertex2d(pPoint1[0].x,pPoint1[0].y);

glVertex2d(pPoint1[1].x,pPoint1[1].y);

glVertex2d(pPoint1[2].x,pPoint1[2].y);

glVertex2d(pPoint1[3].x,pPoint1[3].y);

glEnd();

其中,glBegin(GL_POLYGON)表示开始栅格化处理,glVertex2d(pPoint1[0].x,pPoint1[0].y)至glVertex2d(pPoint1[3].x,pPoint1[3].y)表示顺次输入多边形所有顺序排列的顶点坐标,可见该示例的多边形是有四个顶点的四边形,glEnd()表示栅格化处理结束。

在OpenGL软件开发环境下,通过上述处理程序示例即可完成对输入的以顶点坐标表示的多边形转换为由GPU处理的以栅格表示的多边形栅格图像,这已经是栅格化的过程。此时,这个经过转化后的四边形栅格图像里面的每一个栅格此时对应的位置标示符都变为了1(传入之前为0)。然后,在后续步骤中可以继续通过glBegin(GL_POLYGON)和glEnd()这样的函数语句传入下一个多边形,如果存在相交,则相交部分的位置标示符的值会不断的累加。

图1中,在步骤S2实现对第一个多边形的处理之后,进入步骤S3完成后续对其他多边形的处理:按照与步骤S2相类似的方法依次对其余n-1个多边形栅格化,继续生成第2~n个多边形栅格图像,n≥2,并修正每个多边形栅格图像对应各栅格的位置标示符的值;其中,在生成每一个当前多边形栅格图像时,若栅格区域内任一栅格位于当前多边形栅格图像的内部或边线上,则将该栅格对应的位置标示符的值累加b,否则,若栅格区域内任一栅格位于当前多边形栅格图像的外部,则该栅格对应的位置标示符的值不变。

步骤S3是顺次对输入的每一个多边形进行栅格化处理和位置标示符的赋值处理,在步骤S2已经对第一个多边形进行了处理,步骤S3是对后续的多边形进行处理,其目的是要计算n个多边形相交的面积,因此步骤S3主要是针对后续n-1个多边形,并且,对其中每一个多边形都是独立处理的。当正在处理其中某一个多边形时,该多边形对应生成的多边形栅格图像即为当前多边形栅格图像。

比如,在生成第2个多边形栅格图像时,如果某一栅格位于第2个多边形栅格图像的内部或边线上将该栅格对应的位置标示符的值做一次累加运算,即累加b,b优选为1,否则,不做累加运算。至于之前该栅格是否在第1个多边形栅格图像内部(包括边线)还是外部,并不影响对第2个多变形栅格图像的处理。因此,上述步骤S2和步骤S3相结合对多个多边形顺次处理的方法保证了对每一个多边形栅格图像处理的独立性,同时也能保证最终对这n个多边形相交面积的计算。

由上述过程可知,在该栅格区域内,如果某一个栅格没有与任何一个多边形栅格图像相交,则其对应的位置标示符的值仍为初始值0,如果某一个栅格只位于任意一个多边形栅格图像的内部或边线上,则其对应的位置标示符的值为1,如果位于任意两个多边形栅格图像的内部或边线上,则其对应的位置标示符的值为2,如果位于任意三个多边形栅格图像的内部或边线上,则其对应的位置标示符的值为3,……由此类推,如果某一个栅格位于n个多边形栅格图像的内部或边线上,则其对应的位置标示符的值为n。需要说明的是,由于本发明的目的是要计算n个多边形的相交面积,那么只有位置标示符的值为n的栅格才是我们要统计计算的。

本步骤的多边形栅格化仍由GPU通过OpenGL中语句glBegin(GL_POLYGON)和glEnd()顺序传入对应的多边形坐标顶点来实现,如果存在相交,则相交部分栅格的位置标示符的值会不断的累加。

以图2中两个多边形相交(即n为2)为例进行说明,如图2所示,假定该图中第一个输入的是一个四边形,第二个输入的是五边形,本实施例中所选的栅格区域为这两个多边形所确定的栅格图幅。具体过程如下:

首先经过步骤S1对栅格区域Screen1进行初始化,各个栅格的位置标示符赋初始值0;

然后经过步骤S2,在该栅格区域Screen1内转化生成的第一个多边形栅格图像T1,即在栅格区域Screen1内传入四边形,通过上述步骤S2中程序示例的方式对该四边形栅格化处理,同时将该栅格图像T1内部或边线上的栅格进行一次累加操作,使其位置标示符的值从初始值0变为1,而四边形栅格图像T1区域外的栅格的位置标示符的值均为初始值0。

再经过步骤S3,在该栅格区域Screen1内转化生成的第二个多边形栅格图像T2,即以同样的方式在栅格区域Screen1内传入五边形,在传入该五边形的过程中,对相关栅格的位置标示符的值进行修正,对处于该五边形栅格图像T2的内部或边线上的栅格进行一次累加操作,由图2可知进行累加操作的栅格分为两部分,一部分是两个图像的相交部分,这部分栅格的位置标示符的值经过了两次累加变为2,另一部分是未与四边形栅格图像T1相交的部分,这部分栅格的位置标示符累加一次变为1,处于该五边形栅格图像T2区域外的栅格不做处理。可以看出,栅格M1对应的位置标示符的值为2,表明该栅格M1的位置标示符经历了两次累加操作,而该栅格M1正好也是第一个多边形栅格图像T1和第二个多边形栅格图像T2相交的栅格。因此,通过栅格的位置标示符的累加后的结果值可以判断多边形栅格图像相交的情况,而且这种判断方法实现简单,也不受多边形是凸多边形或凹多边形等形状的限制,增强了该方法的应用的鲁棒性。

通过以上三个步骤完成了对多边形栅格图像相交的栅格的确定,在此基础上进一步确定相交的面积计算。

将所有多边形栅格化处理以后,进入步骤S4:统计n个多边形栅格图像的相交栅格数count',在栅格区域内随机独立选取m个栅格,m≤RES,RES为栅格区域的分辨率,统计这m个栅格中位置标示符的值为a+nb的栅格的数目,该数目即为n个多边形栅格图像的相交栅格数count'。

通过步骤S2、S3对n个多边形栅格化并对栅格区域内的所有栅格赋值、修正以后,计算n个多边形的相交面积S就转化为计算n个多边形栅格图像相交栅格的总面积。

在统计多边形栅格图像的相交栅格(像素)时,一般情况下是需要在栅格区域(整个栅格场或者栅格图幅)范围内遍历所有栅格。例如对于两个多边形相交,栅格区域为整个栅格场,且栅格场的分辨率RES为256×256=65536的情况,那么该方法就要遍历65536个栅格,统计其中位置标示符的值等于2的栅格的数目,这样的处理方式需要的时间会比较长。

为此,本发明实施例的改进之处在于不必遍历整个栅格区域的所有栅格来统计多边形栅格图像的相交栅格数,而是利用概率统计的原理,仅从该栅格区域内随机选取一定数量的栅格,通过统计这些随机选取栅格中的位置标示符为a+nb的栅格的数目即可。这是一种概率统计方法,即利用少量随机栅格子块来模拟整个栅格场,以提高时间性能。这个方法速率上比采用遍历栅格场或者栅格图幅的方法有提高,但是精确度会有一定降低。

需要说明的是,这里所利用的概率统计的原理是基于蒙特卡罗计算定积分的原理,结合图3,对该原理进行简要介绍。图3中,对于阴影区P11的面积G,该区域是由函数y=f(x)在x∈[a,b]区间所围成的区域,由积分的面积含义有在平面区域Ω=[a,b]×[0,T]上设置一个均匀随机变量ξ,则该随机变量落入阴影区P11的概率产生一个与该随机变量ξ对应的随机点(xi,yi),检验随机点(xi,yi)是否落入阴影区P11内,如果满足条件yi≤f(xi),则记录点(xi,yi)落入阴影区P11内一次,对于N个独立的均匀随机数ξi,(i≤N),记录NS={ξ12...,ξN}中落在阴影区P11中的个数。根据大数定理可得就是对积分的无偏估计,(b-a)T是矩形平面区域Ω的面积值。由此可见,对积分面积的计算可以通过概率统计而近似估计,特别是当随机点数量增多时这种近似估计就越准确。

基于上述蒙特卡罗计算定积分的原理,我们在统计多边形栅格图像的相交栅格数时,不必遍历栅格区域内的所有栅格获得位置标示符为a+nb的栅格数目,而是只需要在该栅格区域内多次随机选取栅格,从这些随机选取的栅格中统计位置标示符为a+nb的栅格数目。这样会带来处理时间复杂度的降低,例如:若栅格区域的分辨率RES为2048×2048,则全部栅格遍历的时间复杂度为ο(2048×2048);若从该栅格区域内随机选取百分之一的栅格,即1%RES=1%×2048×2048=204×204(经过取整处理),随机选取栅格进行统计的时间复杂度为ο(204×204),显然带来了处理速度的提升。

本实施例在图形图像开发软件环境OpenGL中,GPU将所有多边形都栅格化形成对应的栅格图像以后,从这些栅格图像占据的栅格图幅中随机选取m个栅格,m小于或等于该栅格图幅或整个栅格场的分辨率,即m≤RES。然后,由GPU通过OpenGL中的glReadPixels函数将这些随机选取的m个栅格及其对应的位置标示符的值传送给CPU,再由CPU来统计这m个栅格中位置标示符的值为a+nb的栅格的数目count'。这里的glReadPixels函数是由OpenGL提供的,该函数是用来读取像素的,利用该函数可以“把已经被保存到GPU的像素读取到CPU”。在应用该函数时,可以定义一个随机数组result,从GPU中通过glReadPixels函数把result值读出到CPU中,统计等于位置标示符的值为n的个数。

另外,由于在统计相交栅格的数目时需要从GPU中将数据读回CPU,这是比较耗时的,会造成CPU和GPU之间的通信延迟。因此,统计栅格区域内位置标示符的值为n的栅格的数目也可以通过GPU利用遮挡查询方法处理完成,GPU遮挡查询方法是在OpenGL软件开发环境下利用ARB_occlusion_query来实现的,其具体过程如下:

在OPENGL1.5及后续版本以及OpenGL ES 3.0中,ARB_occlusion_query扩展执行GPU遮挡查询的命令,它的查询过程就是由GPU来确定最终在屏幕上可见像素的数量。由于像素在流水线中需要经过各种检验,如alpha测试、模板测试和深度测试等(这些测试都是本领域的常规技术,这里不再赘述),遮挡查询就是将最终通过上述测试的像素的数量进行计数,本实施例所要统计的为位置标示符的值为n的栅格(即像素)的数目,也就是说这里的“通过上述测试的像素”即为“位置标示符的值为n的栅格”。本实施例中GPU直接通过ARB_occlusion_query调用glGetQueryObjectuiv函数统计位置标示符等于n的栅格数,解决了统计相交栅格数时从GPU读数据到CPU需要延迟时间的问题。但该方法有应用局限性,就是必须在OPENGL1.5及后续版本以及OpenGL ES 3.0中,才能通过ARB_occlusion_query扩展执行GPU遮挡查询的命令,只有在这些版本上才能调用glGetQueryObjectuiv函数,如果软件版本达不到,该方法就不可用,此时可根据精度的容忍范围选择由CPU统计处理的方法。

在步骤S4的基础上,以下步骤S5进一步完成相交面积的计算:计算n个多边形栅格图像的相交面积S,将相交栅格数count'除以随机独立选取的栅格数m,然后再乘以所选栅格区域的面积,即得到n个多边形栅格图像的相交面积S。

通过步骤S4得到随机选取的m个栅格中n个多边形栅格图像相交栅格的数目count'以后,结合栅格区域的面积和随机数m,就可以计算这n个多边形栅格图像相交栅格的总面积了。

这里,所选的栅格区域分为两种情况,一种是整个栅格场,另一种是栅格图幅。当所选栅格区域为整个栅格场时,若栅格场的面积为SArea,随机选取的某一栅格位于两相交部分的概率为S/SArea,则n个多边形栅格图像相交面积S的计算公式如下:

同理,当所选栅格区域为待相交多边形确定的栅格图幅时,若该栅格图幅的面积为STexArea,则相交面积S的计算公式如下:

公式(1)、(2)中的m一般是栅格场分辨率RES分别乘以40%、50%或者60%的栅格数,count'是m个栅格中相交栅格的数目。

本发明基于概率统计的任意多边形相交面积计算方法的基本思想来源于上述蒙特卡罗计算定积分原理,该方法是在GPU中实现的,原理更简单,效率更高,而且不对多边形的凹凸性做任何假设,对于凹多边形也可以处理,适用于任意可光栅化的几何图元,该方法的效率较使用CPU的方法提高数百倍。

为了检验本发明方法所得结果是否有效,分别给出以下3个模型并对这些模型进行仿真比较。

实验条件:使用C++与GLSL语言,在Microsoft Windows 7操作系统,OpenGL 4.4.0上实现本发明的计算方法,实验用计算机的CPU采用 Core(TM)i5-3337U,4G内存,GPU为NVIDIA GeForce GT 620M。

模型1,本实验随机选取的两个多边形为P1和P2,这两个多边形的各个定点在平面直角坐标为:

P1={(4,4),(1,13,)(,12,6),(98)}

P2={(11,3),(1,63,)(,18,8),(1,41,2)(98)}。

该模型是通过两个常规的多边形来验证本发明计算方法的正确性。

模型2,选取两个有“洞”的复杂多边形,这里所说的有洞的多边形是指类似于图4(该图为一个简单的单洞多边形示例)的多边形,这样的多边形一般可以表示为一个外环和至少一个内环,该模型用于证明本发明的计算方法既可以针对凸多边形,也能对凹多边形进行处理。

模型3,选取了两个顶点数较多的凸多边形,一个多边形有800个顶点,另一个多边形有358个顶点。该模型用于证明本发明的计算方法对于具有顶点数较多(大数据量)的任意多边形具有较好的处理效果。

表1,表2和表3分别给出了上述3个模型在本发明计算方法下计算相交面积的精度及时间。本实验中的计算方法是分别选取不同随机点数(栅格数),重复相应程序10次所得到的误差值。

表1模型1实验结果

表2模型2实验结果

表3模型3实验结果

以下以模型1为例,进行误差率分析和执行效率对比,具体分析如下:

误差率分析:由表1可知,在分辨率为256×256时,当随机点个数m取依次取40%、50%、60%时,误差率的值分别为2.84、2.1、1.89;分辨率为512×512时,误差率的值分别为0.19、0.09、0.08;分辨率为1024×1024时,误差率的值分别为0.078、0.075、0.067。由上述数据可知,一方面在随机个数相同的情况下,随着分辨率的逐渐提高,该计算方法的误差率会随之越来越小;另一方面在分辨率不变的情况下,随着随机点个数m的逐渐增多,误差率也会越来越小。上述如此数量级别的舍入误差在很多工程和一些大型软件中都是可接受的。

执行效率对比:由表1可知,在分辨率为256×256时,当随机点个数m依次取40%、50%、60%时,执行时间分别为0.002s、0.002s、0.003s;分辨率为512×512时,执行时间分别为0.007s、0.008s、0.011s;分辨率为1024×1024时,执行时间分别为0.024s、0.026s、0.028s。由上述数据可知,虽然随着分辨率的逐渐提高和随机点个数m的逐渐增多,执行时间会有增加,但是增加的幅度非常小。而现有采用CPU的计算方法在分辨率增加一个数量级时,执行时间会成百上千倍地增加。因此,对比来看,本发明的计算方法比现有技术的计算方法效率提升了百倍,数据量越大,加速效果越明显。

表2和表3分别是模型2、模型3采用本发明的方法计算相交面积的精度及时间对比,与模型1类似,这里就不再进行详细的数据对比说明。

另外,从表3可知,对于顶点数较多的多边形,采用现有技术的计算方法即便是花费较长时间也可能计算不出结果。而对于本发明的计算方法,在256×256分辨率下,m依次取40%、50%、60%时,执行时间分别为0.003s、0.003s、0.004s;在分辨率增加到1024×1024时,相应的执行时间也仅为0.027s、0.03s、0.004s、0.032s,效率提升非常大。

本发明提出的任意多边形相交面积计算方法,引入了蒙特卡罗方法,更方便高效,面积误差在工程上是可以接受的,这是一种以精度的适当牺牲换取优异综合性能的方法。实验结果表明,本发明的计算方法适用于多边形数量庞大且任意复杂的多边形,很好的避免了传统计算方法所遇到的奇异性问题(边界问题),比如重叠边、边与边交于边的顶点等情形,从而具有较好的鲁棒性。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构变换,或直接或间接运用在其他相关的技术领域,均包括在本发明的专利保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号