一种倾斜测量场景中地物的提取方法与流程

文档序号:12472086阅读:592来源:国知局
一种倾斜测量场景中地物的提取方法与流程

本发明属于电力线路设计的技术领域,具体地涉及一种倾斜测量场景中地物的提取方法。



背景技术:

倾斜摄影三维建模技术及应用是近年来测绘领域关注的热点,由于其数据精度高、地表覆盖全面等突出优点广泛应用于智慧城市、智慧水利、智慧旅游等各方面。

电力线路设计中要求获取线路走廊范围内的房屋、树木、道路等交叉跨越地物信息,测量这些地物到电力线、杆塔等的距离,根据量测结果合理选择杆塔位置、杆塔型号、架线参数等,以保证满足电力线路设计规范的校核要求。然而倾斜测量的原始数据一般采用自动化方式生成三维场景成果,由于其生成机理,得到的模型是一个连续的TIN(不规则三角网)加贴图,即地物、地形等是作为一个整体提供的,并没有根据地物划分为可以单独操作的对象,这种情况下是无法进行距离校核计算的。因此,在电力线路设计中使用倾斜测量场景时首先需要对场景中的房屋、树木等电力线路关心的地物进行单体化处理。

目前市面上大部分倾斜测量场景三维应用中的单体化只是在地物上叠加了配套的矢量面,表面上看起来是单体效果,实际上只是简单地查询了建筑轮廓点矢量面,而非真正意义上的单体分离。而简单的单体化方法只是将场景中的三角面直接区分为地物或场景,但这样的处理会导致地物边界呈现锯齿状,且各精度等级的地物边界不一致,这样的边界极其不美观,并且当需要将地物替换为人工制作的高精度模型时无法与地形场景实现无缝拼接。



技术实现要素:

本发明要解决的技术问题是:克服现有技术的不足,提供一种倾斜测量场景中地物的提取方法,其能够保证将房屋、树木等地物真正与倾斜测量场景分离且地物边缘整齐,可以获取地物图元信息,进行射线碰撞检测、距离计算等操作,并且能够附加地物类别、地物编号、地物名称、选中状态等属性信息,使之满足电力线路设计的使用要求。

本发明的技术解决方案是:这种倾斜测量场景中地物的提取方法,其包括以下步骤:

(1)开始;

(2)设定地物轮廓,用于定义要提取的地物边界线;

(3)采用地物轮廓切割三角网:采用地物轮廓切割场景中的三角形图元,切割后每条轮廓线都有三角的边与之重合,而不存在三角形的边与轮廓线相交;

(4)采用地物轮廓分离出地物图元;

(5)存取地物属性;

(6)结束。

由于本发明采用实际分离原始倾斜测量场景图元的方法进行单体化,实现了真正意义上的单体化,单体化后的地物作为独立个体可以对其单独操作,满足了电力线路设计要求;本发明采用地物轮廓线切割三角形图元的方式,将与轮廓线相交的三角形重新构建为多个三角形的组合,再选取轮廓线内的三角形作为地物数据,不仅保证了地物轮廓的边缘整齐美观,而且方便替换为更高精度、更美观的人工模型;本发明切割原有场景的所有精度等级图元数据,切割后的地物图元数据以图元组形式保留在原场景节点内,通过地物ID标识,地物图元组的精度等级及精度切换策略与单体化之前没有变化,从而保证了较高的地物显示精度与渲染速度,同时保证了在任意缩放状态下地物边界不变;由于本发明保留原始场景数据,所以可以很方便地修改或删除地物,只需对原始场景数据按照修改后的所有相关轮廓重新切割即可;由于本发明保存了所有地物轮廓数据,当需要更换更高精度的场景数据时,只需自动读取所有轮廓数据重新切割即可,不必再次手工设定地物轮廓;因此能够保证将房屋、树木等地物真正与倾斜测量场景分离且地物边缘整齐,可以获取地物图元信息,进行射线碰撞检测、距离计算等操作,并且能够附加地物类别、地物编号、地物名称、选中状态等属性信息,使之满足电力线路设计的使用要求。

附图说明

图1是根据本发明的倾斜测量场景中地物的提取方法的流程图。

图2是根据本发明的三角形被轮廓线切割(三角形内无地物轮廓点)的示意图。

图3是根据本发明的三角形被轮廓线切割(三角形内有部分地物轮廓点)的示意图。

图4是根据本发明的三角形被轮廓线切割(三角形内有全部地物轮廓点)的示意图。

具体实施方式

如图1所示,这种倾斜测量场景中地物的提取方法,其包括以下步骤:

(1)开始;

(2)设定地物轮廓,用于定义要提取的地物边界线;

(3)采用地物轮廓切割三角网:采用地物轮廓切割场景中的三角形图元,切割后每条轮廓线都有三角的边与之重合,而不存在三角形的边与轮廓线相交;

(4)采用地物轮廓分离出地物图元;

(5)存取地物属性;

(6)结束。

由于本发明采用实际分离原始倾斜测量场景图元的方法进行单体化,实现了真正意义上的单体化,单体化后的地物作为独立个体可以对其单独操作,满足了电力线路设计要求;本发明采用地物轮廓线切割三角形图元的方式,将与轮廓线相交的三角形重新构建为多个三角形的组合,再选取轮廓线内的三角形作为地物数据,不仅保证了地物轮廓的边缘整齐美观,而且方便替换为更高精度、更美观的人工模型;本发明切割原有场景的所有精度等级图元数据,切割后的地物图元数据以图元组形式保留在原场景节点内,通过地物ID标识,地物图元组的精度等级及精度切换策略与单体化之前没有变化,从而保证了较高的地物显示精度与渲染速度,同时保证了在任意缩放状态下地物边界不变;由于本发明保留原始场景数据,所以可以很方便地修改或删除地物,只需对原始场景数据按照修改后的所有相关轮廓重新切割即可;由于本发明保存了所有地物轮廓数据,当需要更换更高精度的场景数据时,只需自动读取所有轮廓数据重新切割即可,不必再次手工设定地物轮廓;因此能够保证将房屋、树木等地物真正与倾斜测量场景分离且地物边缘整齐,可以获取地物图元信息,进行射线碰撞检测、距离计算等操作,并且能够附加地物类别、地物编号、地物名称、选中状态等属性信息,使之满足电力线路设计的使用要求。

另外,所述步骤(2)中,通过手工选取轮廓点来设定地物轮廓:通过在倾斜测量场景中逐个选取转角点的方式来设定地物轮廓。

更进一步地,所述步骤(2)中,手工定义好的地物轮廓存入文件后,通过从文件加载来设定地物轮廓。

另外,所述步骤(3)包括以下分步骤:

(3.1)计算地物轮廓线与三角形的重叠折线段,考虑轮廓点在三角形内以及轮廓线与三角形边相交的情况;

(3.2)采用重叠折线段对原三角形进行三角剖分,剖分后一个三角形变为多个三角形的集合。

另外,所述步骤(4)包括以下分步骤:

(4.1)计算三角形水平中心点;

(4.2)采用射线法判定三角形水平中心点是否在地物轮廓内,若中心点在轮廓内,则三角形也在轮廓内;

(4.3)将处于地物轮廓内的三角形从原图元组分离出来。

另外,所述步骤(5)之后还包括:地物操作,对单体化的地物进行各种计算。

更进一步地,所述地物操作包括:

获取指定倾斜测量地物的图元信息,用于保存为模型文件的操作;

射线与倾斜测量地物之间进行碰撞检测,将射线与当前显示节点逐个进行相交计算,以碰撞距离最近者作为命中目标;

其他地物图元集与指定倾斜测量地物图元集距离计算,采用指定精度的地物图元组,线路设计中采用最高精度;

给倾斜测量地物附加属性信息。

更进一步地,所述属性信息包括:地物类别、地物ID、地物名称、是否显示、显示颜色。

下面结合实施例对本发明进行详细的描述。

原始倾斜测量场景采用树状存储结构数据。整个场景为根节点,由多个场景块子节点构成。每个子节点除了拥有自身的三角面图元集,还包含若干个更高精度等级场景块子节点。如此逐层细分下去,直到最高等级子节点。场景节点精度等级越高,其细节越丰富,而面积范围越小。渲染场景时根据节点到摄像机(代表三维场景中的观察者)的距离决定是渲染当前节点图元集还是渲染子节点。

本发明提供的倾斜测量场景地物提取方法,针对以上树状存储结构的倾斜测量场景数据进行地物切割分离操作,参见图1,包括以下步骤:

1)设定地物轮廓

地物轮廓是地物边界线的水平面投影。可采用两种方式设定地物轮廓,一是手工选取轮廓点,二是从文件加载。

1、手工定义地物轮廓

初次提取地物时可通过在三维场景中逐个选取转角点定义地物轮廓。所有轮廓点构成的多边形应为简单多边形,即多边形的任意两条线段之间不存在相交情况。轮廓点的顺序统一为逆时针方向。

一般情况下,定义的轮廓多边形应包围地物水平投影的所有点且尽量小,以保证获取完整且边界正确的地物,但在电力线路设计中为减小地物与电线之间距离的计算量,提高校核速度,也可以仅选取地物中距离线路较近的一部分,这是符合电力线路设计实际情况的。

2、使用已有轮廓数据

手工定义的轮廓数据可以保存到文件中,需要再次使用时从文件加载并直接作用于倾斜测量场景。特别适用于将原有场景数据更换为更高精度场景数据的情况,省去了重新逐个手工定义地物轮廓的繁琐操作。文件中的轮廓数据保存了地物ID,创建时间等信息,重新选取地物时应以上次创建时相同的顺序进行。

2)切割三角形

切割三角形需要将地物轮廓线与场景中的所有三角形逐个进行相交判断。

1、计算轮廓线与三角形相交折线

对于每一个三角形,首先定义一个二维顶点数组对象,用于存储轮廓线与三角形相交的若干折线段,第一维表示折线段,第二维表示每个折线段的顶点。具体执行步骤如下:

(1)创建一个顶点数组,该数组表示轮廓线与三角形相交的一个折线段。将其初始化为空。

(2)判断起始轮廓点是否在三角形内,若是则加入顶点数组。

(3)判断是否取遍所有轮廓点(即上次取的是起始点,这样才能涵盖所有子线段),是则将当前顶点数组添加到二维数组(如果不为空的话),跳转到第(8)步;否则进行下一步。

(4)取下一个轮廓点作为当前点。

(5)判断当前点与上一个点之间的线段是否与三角形的边相交。若相交,将交点加入顶点数组。

(6)判断当前点是否在三角形内,是则加入顶点数组,返回第(3)步;否则进行下一步。

(7)判断顶点数组是否为空,若不为空,将顶点数组添加到二维数组,然后将其清空。返回第(3)步。

(8)若起始轮廓点在三角形内,则将最后一个顶点数组与第一个顶点数组合并为一个折线段(注意:起始点会在这两个顶点数组中各出现一次,应只保留一个)。

根据三角形中包含轮廓点的个数,可将三角形与轮廓线相交分为3种情况,即没有轮廓点在三角形中,有部分轮廓点在三角形中,全部轮廓点都在三角形中,参见图2、3、4左侧图形。

2、三角剖分

将原三角形的3个顶点与上一步获取的若干折线段的顶点构造为三角网。构造三角网可采用比较流行的德洛奈三角剖分法(Delaunaytriangulation)。需要注意的是,要保证各个折线段作为三角形的边出现在新构造的三角网中,这些折线段可以被分割为若干段,但不允许缺失。三角剖分结果,参见图2、3、4右侧图形。

三角形剖分完成后,将原三角形从场景三角网中删除,加入三角剖分生成的所有新三角形。

以上仅为处理一个三角形的情况,需要依次处理当前场景分块的其他所有三角形。再依次扩大到当前精度等级的其他场景分块,其他精度等级的倾斜测量场景数据。

切割时可采用轮廓包围框与场景分块包围框不相交作为快速剔除手段,而不必每个三角形都详细计算。

切割后每个三角网图元组中的三角形边与轮廓线相重叠,或者与轮廓线相接触,或者与轮廓线相分离,而绝不会出现与轮廓线相交叉的情况。

3)分离地物

将当前地物轮廓内的所有三角面提取出来,存储为单独的地物图元分组,并采用地物的ID加以标识。地物分离操作仅用于第2)步中进行过三角剖分的节点,没有进行过三角剖分的节点可直接忽略。在原场景节点中,首先新建一个单独的图元分组,与原场景图元分组并列。此图元分组即为地物在当前场景节点中的图元分组。

对于场景图元分组中的每个三角形,执行如下操作。

1、计算三角形水平中心点

将三角形三个顶点的平面坐标(XY)分别相加再除以3,即可得三角形中心点坐标为

((x1+x2+x3)/3,(y1+y2+y3)/3)

2、判定三角形是否在地物轮廓内

判断上述三角形二维中心点是否在地物轮廓内的基本算法为:构造一条原点为三角形中心点,且方向为(1,0)的射线。计算射线与地物轮廓多边形相交的情况,每当射线与多边形的一条边相交时,就进行一次从内到外地转换或者相反的转换。记录跟踪穿过多边形次数的奇偶性,穿过奇数次说明三角形中心点位于多边形内,偶数次说明位于多边形外。实际计算中还需要考虑多边形的边与射线重叠的情况。根据前述切割结果,不存在与轮廓线交叉点三角形,因此若三角形中心点在轮廓线内,则三角形在地物轮廓内。

3、分离地物图元

如果当前三角形在轮廓多边形内,则将其从场景图元组中移除,并加入到当前地物图元分组中。如果不在轮廓多边形内,则忽略。

依次处理当前场景节点的所有其他三角形。处理完成后原先的一个场景节点中分为一个场景分组和多个地物分组(分别属于多个地物)。地物图元分组用地物ID标记,并可以可通过地物ID进行图元提取或设置颜色等操作。

依次处理当前等级的其他场景节点。同一个地物可能由多个场景节点中的多个地物分组组成。需要提取数据时应该获取所有这些数据的组合。

依次处理其他等级的倾斜测量场景数据。地物分离后的节点图元数据可以保存为新格式的节点文件,以后直接加载处理后的新格式的节点文件即可,而不用每次都重新根据地物轮廓切割分离原始节点数据,从而提高了处理速度。

上述2)3)步骤操作场景节点采用的策略是先对所有节点(采取深度优先或广度优先的搜索策略)执行操作步骤2),再对所有节点执行操作步骤3)。这种方式需要遍历两次树结构,且第一次操作的中间结果需要保留在内存中或者暂存到文件中供步骤3)使用,执行效率较低。实际操作中可以采用另一种处理方式,即只遍历一次树结构,对于每个场景节点,先执行步骤2),紧接着执行步骤3),这样可以省去暂存大量中间结果的开销,提高了执行效率。

4)地物操作

地物操作主要包括获取地物图元数据、距离计算、射线碰撞检测等地物模型相关操作,以及地物属性信息的添加与检索操作。

1、获取图元信息

某些情况下需要使用地物的图元信息,如将地物模型导出为指定格式的文件供别的程序使用等。从三维场景中获取地物图元信息需要指定地物ID以及模型的精度等级。从根节点开始逐级查询,直到到达指定等级的节点。若节点图元数据未加载,则从相应的节点文件加载。根据ID获取指定的图元组,打包为需要的格式,返回到父节点。父节点将各个子节点返回的同一个地物的不同图元组合并为一个图元组,返回给自己的父节点。如此逐级向上,最终到达根节点,在根节点再次组合为一个整体图元组返回给调用者。对于经常使用的地物图元等级,可以将其保存到单独的文件中,需要时直接从文件读取,而不必遍历整个场景。

2、射线碰撞检测

三维线路设计中经常需要用鼠标选中地物以执行其他操作。首先将三维图形窗口中的鼠标点击位置转换为三维空间中的射线,再计算射线与每个地物的交点,碰撞距离(射线起始点到射线与地物碰撞点之间的距离)最短的地物即为被选中的地物。

(1)向场景根节点传入各个参数,包括输入参数射线,输出参数地物ID、碰撞距离(初始化为无穷大)、碰撞点。

(2)根节点遍历各个子节点,对每个节点执行碰撞检测操作。

(3)对于当前节点,首先判断是否可见,不可见则忽略;可见则进行下一步。

(4)采用节点包围球与射线进行碰撞检测,如果碰撞失败,或碰撞距离大于当前输出碰撞距离,则忽略当前节点。采用包围球检测可以快速剔除一些节点。碰撞成功则进行下一步。

(5)判断当前节点是否为可渲染节点(已加载图元组),若是,依次执行射线与当前节点每个图元之间的碰撞检测。对于每一个图元,若当前碰撞距离小于输出碰撞距离,则输出碰撞距离更新为当前碰撞距离,输出碰撞地物ID更新为当前地物ID,输出碰撞点更新为当前碰撞点。执行完毕后返回父节点;若当前节点为不可渲染节点,遍历当前节点的所有子节点,递归执行(3)~(5)。

(6)所有节点遍历完成后,最终返回参数即为被点中的地物ID以及碰撞点、碰撞距离;若返回地物ID为空,则表示未选中任何地物。

3、距离计算

电力线路设计中导入地物的主要目的是计算电力线等带电体与地物之间的距离,并与设计规范中的安全距离作比较以判别当前设计是否合理。由于电气校核要求精度高,因此应该采用地物的最高精度图元计算。本发明采用如下步骤计算电线(或其他物体)与地物的距离。

(1)向场景根节点传入各个参数,包括输入参数电力线图元集、地物ID,输出参数电力线到地物距离(初始化为无穷大)、电力线上的最小距离点、地物上的最小距离点。

(2)根节点遍历各个子节点,对每个节点执行距离计算操作。

(3)对于当前子节点,首先检测是否包含指定地物ID的图元组,若不包含,则忽略当前节点,返回到父节点;若包含,执行下一步。

(4)计算输入图元集包围球与当前节点包围球距离,若大于输出距离,则忽略当前节点,返回到父节点。采用包围球距离可快速剔除一些节点,提高运算速度。若包围球距离小于输出距离,则执行下一步。

(5)遍历当前节点子节点,执行第(3)(4)步操作,直到到达最高精度子节点。

(6)若最高精度子节点不可渲染,则从文件加载图元;否则,执行下一步

(7)计算当前节点指定ID图元组每个三角形图元与输入图元集每个图元的距离。若此距离小于输出距离,则更新当前距离,以及两个最小距离点。返回结果到父节点。

(8)所有节点遍历完成后,最终由根节点返回的参数即为被点中的地物以及碰撞点、碰撞距离。

4、附加属性信息

对于每个地物创建一个属性数据结构,采用地物ID标识。共有属性包含地物类别、地物名称、地物颜色、是否显示等,每种地物的私有属性房屋高度、所有者、树木高度等。地物属性可与地物轮廓合并保存到数据文件中,以便下次读取。

以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。

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