点云到BIM:自动化流程
此演示展示了在允许近乎全自动识别的模型上,从点云到BIM的完整流程。
加载与设置
我们首先使用Docker运行ML服务器——这是语义分割所必需的。ML组件作为一个独立的Docker + Python服务运行,独立于C++ API。接下来,我们启动OdaScan2BimApp,选择“点云到BIM”模式,并加载点云。
阶段 1: 语义分割(可选,基于机器学习)
我们从专用调色板启动语义分割。所使用的模型是 Point Transformer V2 Extended——这是我们目前关注的两个模型之一,另一个是 PointMLP。这两个模型都是根据我们自己的实验选择的,并在 S3DIS(斯坦福 3D 室内场景数据集)和我们自己标注的点云上进行了训练。
语义分割将点云中的每个点标记为墙壁、地板、天花板或其他。这是一个可选步骤,但它能显著提高下游准确性——如果没有它,管道会从点云中的所有物体(包括桌子、椅子、床和散热器)中提取平面区域。这些非结构性物体会产生噪声,在 BIM 识别过程中被误解为错误的墙壁和地板。分割可以及早过滤掉这些噪声。
完成后,应用程序允许与分割结果进行交互:可以有选择地隐藏或显示类别,可以恢复原始点云颜色,并且可以组合不同的可视化模式。
阶段 2: 平面区域计算
此阶段从语义分割的点云中提取平面。它使用超体素聚类和区域生长进行初始过分割(有意避免可能合并不同表面的欠分割),然后使用迭代 RANSAC 平面检测来查找平面,接着使用区域生长进行表面细化。
初始步骤——超体素聚类、区域生长和 RANSAC——使用第三方点云库 (PCL)。此后的所有内容都是 ODA 自己的代码:表面细化和扩展,以及边界识别。边界是通过将 3D 点投影到 2D 图像(俯视图和侧视图投影)、分析 2D 区域并将其映射回 3D 来确定的。
应用程序支持组合不同的可视化模式:仅平面区域、仅点云或组合。
阶段 3: BIM 对象识别
在此测试模型上,识别几乎是全自动的,仅需进行少量参数调整。识别遵循固定顺序:
首先是楼板识别——水平区域被识别为IfcSlabs。附近和共面的楼板会被合并,碎片区域会被连接,小片段会被过滤掉。
接着是墙体识别——将相同的程序应用于垂直区域。墙体被识别、合并、连接和过滤。
接下来是楼板-墙体连接——建立墙体和楼板之间的空间关系,并进行几何调整以使其精确对齐。
然后是斜坡区域的屋顶识别(如果存在)。
最后是开口识别——墙体几何中的空隙被识别为窗户和门。这是机器学习分割发挥作用的第二个地方:由家具(床、书柜、散热器)后面的墙体缺失点引起的明显开口可以被识别为误报并进行过滤。机器学习分割实现了这种过滤——如果没有机器学习,假开口不会被自动过滤。
输出
结果将导出为IFC文件。它可以保存并在任何兼容IFC的查看器中打开,例如ODA的OpenIFCViewer,用于验证和质量评估。
点云到BIM:手动修正
此演示展示了一个真实世界的场景,其中自动化流程需要大量人工干预。它说明了 OdaScan2BimApp 中可用的校正工具以及实践中出现的问题类型。
从已保存的中间结果开始
为了节省时间,我们从语义分割和平面区域计算的预计算和保存结果开始。该应用程序允许保存中间流程状态并稍后从它们恢复——这对于前两个阶段(分割和区域计算)耗时的工作流程至关重要。
挑战:关闭的门
这个特定点云的主要难点在于扫描时几乎所有门都关闭了。在点云数据中,关闭的门与墙壁无法区分,这意味着管道无法检测到应该有门的位置。这是扫描到BIM工作流程中最常见的实际问题之一。
自动步骤
最初的识别步骤仍然是自动的:楼板识别、墙体识别和墙体合并。即使在具有挑战性的扫描中,这些步骤也能很好地工作。
手动校正工作流程
自动连接后,我们会审查结果并开始手动修复。该应用程序提供了几个关键工具:
点云在BIM模型上的叠加——原始点云可以叠加在识别出的BIM几何体上。通过将原始扫描数据与生成的模型进行视觉比较,可以很容易地发现识别错误的地方。
撤销单个操作——在第一个案例中,一个门区域错误地连接到了一个墙区域,从而产生了一堵无效的墙。我们只撤销那个特定的连接(而不是整个操作历史),删除门区域,然后手动连接正确的区域。
墙体调整大小——有几堵墙需要调整:有些更短,有些更长,一堵更宽。在此阶段不需要精确的准确性,因为后续的自动程序(楼板-墙体几何调整)会处理精确对齐。
手动过滤——在自动噪声墙体过滤后,仍有一些错误的墙体。我们手动删除它们。
手动楼板-墙体连接——自动连接无法处理未触及楼板的墙体。这些需要手动连接步骤。
开口识别挑战
几何调整后,我们进行开口识别。由于门关闭问题,自动错误开口移除在此次扫描中表现不佳。我们再次叠加原始点云并手动移除不正确的开口。
有些门洞根本没有被检测到——因为扫描将门捕捉为实体表面,它们看起来像墙壁。这是一个根本性的限制:如果在扫描时物理门是关闭的,任何算法都无法推断出其后面存在开口。
结果
尽管需要手动操作,最终的BIM模型准确地表示了建筑结构。手动校正工具——特别是撤销单个操作、点云叠加和元素调整大小——使得即使对于困难的扫描,该过程也易于管理。
网格转B-Rep
此演示展示了在两个不同复杂度的模型上进行的网格到B-Rep转换管道。这是SDK中的一个独立方向,与点云到BIM管道无关。
网格到B-Rep的作用
目标是将多边形网格(三角化表面)转换为精确的边界表示(B-Rep)——CAD和BIM应用程序使用的标准几何格式。B-Rep模型具有精确的数学表面、清晰的边缘和正确的拓扑结构,使其适用于编辑、测量和下游工程工作流程。
转换过程
该管道分两个阶段工作。首先,网格被分割:曲率分析和锐边检测将其划分为区域,每个区域被归类为规范表面(平面、圆柱体、球体或圆锥体),并且段被扩展以覆盖相邻的一致区域。
其次,B-Rep构建:每个段被转换为其解析表面表示,相邻表面之间的交线定义了边缘,表面被修剪并组装成一个完整的B-Rep实体。所使用的B-Rep引擎是ODA轻量级B-Rep建模器。
模型1:具有非平面特征的简单几何体
第一个模型主要由平面组成,使得平面区域易于识别。然而,它包含圆柱形和圆锥形孔洞,这考验了规范曲面识别能力。系统将这些识别为圆柱体和圆锥体,创建相应的解析曲面,并构建有效的B-Rep几何体,包括孔洞与周围平面之间的交线。
模型2:复杂曲面几何体
第二个模型的三角形数量较少,但更具挑战性——它包含数量显著更多的圆柱形段。当曲率半径较大时,识别圆柱形表面会更困难,因为这些表面看起来几乎是平坦的,容易与平面混淆。此模型展示了系统如何处理这种模糊性。
非规范段问题
无法识别为平面、圆柱体、球体或圆锥体的段是主要挑战。目前,SDK采用暴力回退方法:未识别段中的每个三角形在B-Rep输出中都成为一个独立的平面。这保证了模型的有效性,但增加了面数。实验性的基于样条的曲面拟合方法在有限情况下显示出有希望的结果,但任意段的鲁棒重建仍然是一个开放的研究问题。
DWG导出
结果可以导出为DWG格式,这对于在标准CAD程序中进行验证以及与使用基于DWG工作流的团队共享非常有用。在常用工具中检查B-Rep质量的能力对于验证转换结果至关重要。