基于Potree结构的建筑物激光点云与BIM点云的变化检测

2024-02-28 13:51刘慧刘宇航钟晨
科学技术与工程 2024年3期
关键词:八叉树变化检测网格

刘慧, 刘宇航, 钟晨

(1.北京建筑大学电气与信息工程学院, 北京 102616;2.建筑大数据智能处理方法研究北京市重点实验室, 北京 102616; 3.应急管理部沈阳消防研究所, 沈阳 110034)

建筑信息是在建筑生命周期中了解建筑健康状况的重要参考资料。建筑维护管理人员可通过建筑变化信息的检测了解建筑在使用过程中的健康状态,并根据建筑的健康状态进行适时的维护和修缮,以减少因建筑维护或修缮不及时所造成的危害,避免由此带来的经济损失。建筑变化检测在土地管理、灾害评估、环境监测、城市更新、智慧城市建设等领域能够发挥优势,具有重要意义[1-2]。

在辅助城市规划管理[3]中,建筑变化信息的检测,可以有效帮助维护者做出决策和判断。然而传统的建筑变化信息通过人工方式获取,不仅费时费力,而且经济成本较高。建筑变化检测技术通过现代传感手段,获取建筑的实时状态,并与建筑在不同历史时期的状态进行比对,自动获取建筑当前建筑的变化信息,以便建筑管理者和维护者适时做出恰当的决策,更好地维护和使用建筑。

建筑变化信息检测主要依赖实时获取的建筑三维数据和建设初期规划的建筑信息模型进行比对,来获取建筑的变化信息。经过近十年发展,建筑三维点云采集技术日渐成熟,能获取更为准确三维点云数据用于建筑变化检测。而建筑信息模型(building information modelling, BIM)是建筑领域新兴的表达建筑信息、建筑外观模型等一系列与建筑相关的技术[4-6]。建筑全生命周期中的三维点云数据监测了建筑在不同时期的状态,结合规划的BIM模型,可以为自动化检测建筑变化信息提供有力支持。

建筑物变化检测采用的数据组合主要有三类:建筑规划时期的BIM模型(以下简称“规划BIM”)与当前采用传感手段获取的数据构建的BIM模型(以下简称“获取BIM”)、建筑规划时期的点云数据(以下简称“规划点云”)与当前采用传感手段获取的点云数据(以下简称“获取点云”)和建筑规划时期的BIM与当前采用传感手段获取的点云数据。文献[7]提出BIM网格到BIM网格(BIM-mesh-to-BIM-mesh)方法来对建筑物规划BIM与获取BIM进行变化检测。但建筑物的获取BIM数据获取困难,主要阻碍是数据生成极其耗时。文献[2,3,8-13]采用规划点云与获取点云对建筑物进行变化检测,然而无法兼顾检测结果质量和计算开销。采用规划BIM与获取点云对建筑物变化检测一类,Tamke等[14]研究了一种新颖的高度自动化建筑元素层面处理方法,虽然该方法可以有效管理和编辑庞大数据集,但点云检测精度不足;Tran等[15]提出一种基于BIM与室内环境点云间比较的变化检测方法,该方法能够分辨出室内环境与其BIM间差异,但是这种方法没有使用建筑点云的语义信息;Czerniawski等[16]解决了由点云数据不完整导致的变化检测问题,但仍需要解决如依赖BIM的几何精度、输入到神经网络的格式和语义信息受限等问题;Park等[17]提出了一种高性能算法来检测规划BIM与获取点云间的差异,该算法借助可修改嵌套八叉树(modifiable nested octree, MNO)结构完成变化检测,但对大数据集变化检测时仍有不足;Meyer等[18]提出了一种基于地面激光扫描(terrestrial laser scanning, TLS)的高密度三维点云和体素空间离散化高分辨率变化检测方法,目前BIM-GIS(geographic information system)整合和3D功能增强未实现,若实现则该方法可更广泛地应用。

虽然建筑物的规划BIM数据和点云数据都比较容易获取,但采用两者对建筑物进行变化检测的阻碍是计算时开销大、时间复杂度高。为解决上述问题,提出一种基于Potree[19]结构的建筑物激光点云与BIM点云变化检测方法。本文提出的方法采用规划BIM数据与获取点云数据对建筑物变化检测,可自动地检测出两者间差异;建筑物变化检测结果质量与基于MNO结构的检测方法相当,并且时间复杂度有22.05%的缩减。

1 相关工作

本文所涉及的建筑物变化检测方法主要依托用于点云数据集渲染的数据结构,如MNO结构和Potree结构。

1.1 MNO结构

嵌套八叉树(nested octree, NO)是一种高效的数据结构,可用于渲染点云。嵌套八叉树结构有固有的缺陷,即每次向内部八叉树添加新点或删除现有点时都必须重新构建树结构,导致不必要的计算开销。为弥补上述不足,对原始嵌套八叉树结构做一些更改,即用规则网格替换内部的八叉树。替换后的结构可以有效地插入和删除点,该结构称为可修改嵌套八叉树[20-21](MNO)。嵌套八叉树与MNO的不同之处是嵌套八叉树外部树每个节点都包含一个内部八叉树,在内部八叉树每个叶节点储存插入点;而MNO将从插入点角度出发,直接按照插入点的属性生成子节点,当不需要生成子节点时,MNO将会节省存储空间, 其节点结构如图1所示。

图1 MNO节点结构Fig.1 MNO node structure

嵌套八叉树储存点的方式导致每当新点插入嵌套八叉树结构时,嵌套八叉树内部树结构都必须根据新插入点而调整已存在点的顺序。相反,MNO节点将点储存在规则网格中,只需考虑在每个网格单元仅存放一个点即可,不需要考虑插入点储存顺序。MNO结构插入点时,每个点都先在MNO根节点上根据坐标搜索根节点规则网格的空网格单元。若搜索到的网格单元内不存在点,则储存在该网格单元;若网格单元已经被占用了,则插入当前节点的子节点,再搜索空网格单元直至找到空的网格单元。由此,MNO结构插入点和删除点相较于嵌套八叉树结构更便捷,也更适合管理点云数据。MNO结构是为解决点云数据集渲染问题而提出的,Park等[17]将其应用在点云变化检测上,该方法优异的检测结果证明了该结构能够高效地进行建筑变化检测。

1.2 Potree结构

Potree采用MNO结构的变体,选取不同子采样方法,并将层次结构划分为更小的、可快速流化的块。Potree节点的分辨率由间距(spacing)属性定义,该属性指定插入点间的最小距离。根节点包含原始数据的低分辨率版本,根节点的子节点间距减半,分辨率随之提高了一倍。设置较小的间距导致每个节点中插入点数量较多,节点数量较少,树深度较浅。MNO节点内部采用规则三维网格储存点,该三维网格内嵌于MNO节点,第一个落入网格单元的点将被接受。如果一个点落在已经被占用的单元中,它将向下传递给子节点。这种方法简单而快速,但缺点是没有强制要求点之间最小间隔。高质量采样方法应确保点之间有一定距离。Potree结构在每个节点中采用泊松盘采样,使得每个点与其他点间距离都是最小的。选取泊松盘采样代替网格采样后,每个节点可容纳更多的点,节点数量也就更少,树的深度更浅,便于后续计算。Potree节点结构如图2所示。

图2 Potree节点结构Fig.2 Potree node structure

Potree结构是MNO结构的变体,其初衷是为解决更大的点云数据集渲染问题而提出的。MNO结构已被证明能够迁移到点云变化检测领域,因此Potree结构同样适用于点云变化检测问题。

2 基于Potree结构的建筑物变化检测

基于Potree结构的建筑物变化检测方法可以分为三个模块:Potree结构构建、BIM与Potree结构索引、建筑变化检测。首先依据获取点云进行Potree结构构建;其次将BIM数据索引到Potree结构中;最后计算BIM数据和Potree结构中点云的差异,获得变化信息。

2.1 Potree结构构建

Potree结构依据点云来构建,其步骤如下。

第一步, Potree结构在起始时只建立一个根节点,然后将点云中每个点依次插入当前节点,当点云数量超过该节点所能容纳的最大值,就为该节点生成子节点;在三维点云中,每次组多可能生成个23子节点,即八个子节点,该八个子节点对应空间划分,如图3所示。

图3 Potree八个子节点示意图Fig.3 Eight child nodes of Potree

第二步,根据空间关系判断点云归属哪个子节点,然后将点云中的点插入对应的子节点;当插入的点云与当前节点中存在的点之间的欧式距离小于节点间距(节点间距通常为定义的一个常数值),就为当前节点生成子节点;或当前节点的点数超过该节点所能容纳的最大值,就为当前节点继续生成子节点;当没有点云归属当前节点,就将当前节点省略。

第三步,重复上述操作,直至所有点云归属到某个节点。

2.2 BIM与Potree结构索引

Potree结构建成后,将规划BIM索引到Potree结构中。规划BIM中基本几何单元是三角网格,BIM网格本质上是三角面,由三个顶点和三条边组成。BIM网格与Potree节点间空间关系有:①网格的部分顶点在Potree节点内;②网格的三个顶点均未在Potree节点内但网格三角面穿过节点空间;③网格的三个顶点均未在Potree节点内且网格三角面与节点无空间关联,这种情况与后续工作无关便不再讨论。前两种情况定义为网格与节点相交。

根据规划BIM网格三个顶点的空间坐标初步判断网格与Potree节点的空间关系,若三个顶点有一个顶点在节点所包围空间内,判定网格与该节点相交。若三个顶点均不在节点空间内,则借助射线追踪算法[22]对网格每条边,检测其与Potree节点空间是否相交。当规划BIM网格的任一条边经射线追踪算法检测为与Potree节点相交,则判定该网格与当前Potree节点空间上是相交关系,否则为不相交。通过上述过程,将Potree节点和BIM网格建立起联系,并将这种联系作为Potree节点的一个属性来描述。

2.3 建筑变化检测

具体的建筑变化检测步骤如下:

第一步,遍历所有Potree节点,依次计算节点内每个点云与所有该节点内的BIM网格间的欧氏距离。

第二步,对每个节点,选取节点内每个点云与BIM网格的最小欧式距离作为该点云的位移属性;实际计算过程无需将某点云与所有BIM网格算得的距离进行记录,只需开辟一个存储空间,存储当前最小值,通过更新方法获取全局最小值,这种计算方法能够极大地减少内存开销。

第三步,遍历全部节点完成上述操作后,将每个点的位移与设定的阈值比较;位移大于阈值的点被判定为形变点,反之认为该点没有发生形变。

本文提出方法的流程如图4所示。

3 实验与结果

本实验采用的数据集是中科院自动化研究所模式识别国家实验室发布的一组建筑点云数据集[23]。采用原始数据作为规划BIM数据,将原始数据删除一部分点作为获取点云数据。实验所用设备的配置是英特尔i7-12700U CPU @ 2.10 GHz处理器和32 GB内存。

3.1 实验过程

3.1.1 点云配准

由于每次获取的点云与BIM数据生成的点云存在坐标旋转位移等情况,因此在进行变化检测之前,首先要进行点云的配准。采用迭代最近点法(iterative closest point, ICP)将规划BIM和获取点云配准到同一坐标系。ICP算法是一种精细配准方法[24]。ICP算法通过独立地更新点云间对应点,从而得到的旋转矩阵使两组输入数据间距离最小而达到配准。ICP通过最小二乘法使式(1)最小,计算出坐标旋转矩阵和位移向量来配准BIM生成的点云数据P和获取点云数据Q。

(1)

式(1)中:pi为BIM生成的点云数据P中的一个点;qi为获取点云数据Q中pi的近邻点;E为误差函数;R为旋转矩阵;t为平移参数;n为点云中点的数量。

ICP算法整体流程:首先在BIM生成的点云数据P中随机选取一部分点云M,在获取点云数据Q中寻找与M最近的点作为M的对应点;其次剔除距离大于平均距离的点,保留的点作为最终对应点;再根据对应点计算旋转矩阵及位移向量;最后建立误差评价函数,判断其是否满足精度需求;若满足则停止循环,否则重新选取点云M同时更新目标点云,重复整个流程直到评价函数满足精度需求。获取点云数据及规划BIM数据配准后如图5所示。

图5 规划BIM及获取点云Fig.5 As-planned BIM and as-is point clouds

3.1.2 变化信息检测

根据本文提出的方法,首先依据获取点云数据建立Potree结构,Potree结构的构建过程如图6所示,构建的Potree结构结果如图7所示。其次,将BIM索引到点云的Potree结构,结果如图8所示。最后根据每个节点中储存的网格信息和上一步骤中节点记录的点信息来计算距离获取位移。

图6 Potree结构构建Fig.6 Potree structure construction

图7 Potree结构构建结果Fig.7 Potree structure construction result

图8 BIM索引到Potree结构Fig.8 BIM indexed to Potree structure

获取点云较规划BIM实际发生变化点的数量为16 678。建筑变化检测步骤,各点算得的位移与阈值比较确定差异点,该阈值设定为规划BIM网格与其生成的点云中点间固有误差的均值。获取点云与规划BIM经ICP算法配准后,分别采用蛮力法、基于MNO结构变化检测方法和本文所提出的方法进行变化信息检测,三种方法的变化检测结果如图9所示,其中红色点是获取点云中判定为与规划BIM存在差异的点,其他颜色的点是未被判定为差异的点。蛮力法直接计算点云中每个点到BIM中所有网格的欧式距离。在每个点与所有网格算得诸多距离中选择最小距离作为该点的位移属性。最后将每个点的位移与阈值相比较确定变化信息,其检测结果如图9(a)所示。基于MNO结构的变化检测方法也根据获取点云数据,首先建立MNO结构;再依据MNO结构将BIM中网格分为两类,一类是same_face,另一类是diff_face;最后根据两类分类结果分别计算位移,算得每个点的位移后仍与阈值比较获取变化信息,其检测结果如图9(b)所示。Potree的每个节点所能容纳点的阈值设定为输入点云数量的1/10,根节点的间距设定为获取点云三坐标轴中最大跨度的1/128,各节点单元格的大小为当前节点间距的10倍。基于Potree结构的检测结果如图9(c)所示。

3.2 实验结果比较

为量化评价三种方法检测结果的优劣,采用以下4项评价指标对上述结果进行评价。

(1)完整性Com:

(2)

(2)正确性Cor:

(3)

(3)质量Q:

(4)

(4)F1[25]指标:

(5)

三种变化检测方法结果的4项评价指标数据如表1所示。表1表明,本文提出的方法在检测结果的4项评价指标上均大幅优于蛮力法,且与基于MNO结构的方法相当。

在时间成本方面,三种方法的时间消耗如表2所示。蛮力法完成建筑物规划BIM与获取点云间变化检测需要对获取点云中每个点与规划BIM中每个网格两两计算,需要极大的计算开销,时间复杂度也极高。表2表明在计算位移步骤,基于MNO的方法平均耗时111.48 s,而本文提出的方法仅耗时86.898 s。本文所提出的方法在不损失检测结果完整性、正确性、质量的前提下,较基于MNO结构的方法在时间复杂度上节约22.05%。相较于基于MNO结构的变化检测方法,本文所提出的方法在点采样方面以泊松盘采样代替网格采样。理论上树的每个节点采用泊松盘采样比网格采样可容纳更多的点,因此构建的树深度会变浅,节点数有所缩减,进而所需内存减少。这项改进缩减了计算位移时因多次重复索引BIM网格所增长时间复杂度。

4 结论

本文提出一种基于Potree结构的建筑物激光点云与BIM点云的变化检测方法。该方法能自动地检测获取点云数据与规划BIM数据间存在的差异。本文提出的方法首先依据获取点云建立Potree结构;其次将BIM网格索引到建成的Potree结构中,确定与每个Potree节点相交的BIM网格;随后遍历每个Potree节点计算其中记录的点与BIM网格间位移;最后算得点的位移与阈值相比较,大于阈值的点判定为差异以确定检测结果。本文提出的方法能有效地解决点云与BIM间变化检测计算开销过大的难题。通过与蛮力法及基于MNO结构的方法检测结果对比,本文提出的方法同基于MNO结构的方法在检测结果的4项评价指标上均大幅优于蛮力法;并且在保证检测结果完整性、正确性、质量不损失的情况下,较基于MNO结构的方法节约22.05%的时间消耗。

本文提出的方法局限在于建立Potree结构时,插入点除检测当前节点已存在点数量是否大于点数量阈值,还需检测其所在单元格及已存在的相邻单元格内所有点与插入点间距离是否大于当前节点间距。该步骤计算量庞大,导致建立Potree结构耗时较长。未来的工作可以尝试为节点选取更高效的采样方式,或优化间距检测算法来改善建立Potree结构的计算开销。

猜你喜欢
八叉树变化检测网格
用全等三角形破解网格题
三维十字链表八叉树的高效检索实现
用于遥感图像变化检测的全尺度特征聚合网络
基于多尺度纹理特征的SAR影像变化检测
反射的椭圆随机偏微分方程的网格逼近
基于稀疏表示的视网膜图像对变化检测
基于Landsat影像的黄丰桥林场森林变化检测研究
重叠网格装配中的一种改进ADT搜索方法
基于曲面展开的自由曲面网格划分
散乱点云线性八叉树结构在GPU中的实现