点云到BIM:自动化流程
此演示说明了在一个允许近乎完全自动识别的模型上,完整的点云到BIM流程。
加载和设置
我们首先使用Docker运行ML服务器——这是语义分割所必需的。ML组件作为一个独立的Docker + Python服务运行,独立于C++ API。接下来,我们启动OdaScan2BimApp,选择“点云到BIM”模式,并加载点云。
阶段1:语义分割(可选,基于ML)
我们从专用调色板启动语义分割。使用的模型是 Point Transformer V2 Extended——这是我们目前关注的两个模型之一,另一个是 PointMLP。这两个模型都是根据我们自己的实验选择的,并在 S3DIS(斯坦福 3D 室内场景数据集)和我们自己标注的点云上进行了训练。
语义分割将点云中的每个点标记为墙壁、地板、天花板或其他。这是一个可选步骤,但它能显著提高下游准确性——如果没有它,管道会从点云中的所有物体(包括桌子、椅子、床和散热器)中提取平面区域。这些非结构化物体会产生噪声,在 BIM 识别过程中被误解为错误的墙壁和地板。分割功能可以及早过滤掉这些噪声。
完成后,应用程序允许与分割结果进行交互:可以有选择地隐藏或显示类别,可以恢复原始点云颜色,并且可以组合不同的可视化模式。
阶段 2:平面区域计算
此阶段从语义分割的点云中提取平面。它使用超体素聚类和区域生长进行初始过分割(有意避免可能合并不同表面的欠分割),然后使用迭代 RANSAC 平面检测来查找平面,最后使用区域生长进行表面细化。
初始步骤——超体素聚类、区域生长和 RANSAC——使用第三方点云库 (PCL)。之后的一切都是 ODA 自己的代码:表面细化和扩展,以及边界识别。边界是通过将 3D 点投影到 2D 图像(俯视图和侧视图投影)、分析 2D 区域并将其映射回 3D 来确定的。
应用程序支持组合不同的可视化模式:仅平面区域、仅点云或组合。
阶段 3:BIM 对象识别
在此测试模型中,识别几乎是全自动的,仅需进行微小的参数调整。识别遵循固定序列:
首先是楼板识别——水平区域被识别为IfcSlab。相邻且共面的楼板被合并,碎片区域被连接,小段被过滤掉。
然后是墙体识别——对垂直区域应用相同的程序。墙体被识别、合并、连接和过滤。
接下来是楼板-墙体连接——建立墙体和楼板之间的空间关系,并进行几何调整以使其精确对齐。
然后是屋顶识别,针对倾斜区域(如果存在)。
最后是开口识别——墙体几何中的空隙被识别为窗户和门。这是机器学习分割发挥作用的第二个地方:由家具(床、书柜、散热器)后面缺失的墙体点引起的明显开口可以被识别为误报并被过滤。机器学习分割实现了这种过滤——如果没有机器学习,虚假开口不会被自动过滤。
输出
结果将导出为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 质量的能力对于验证转换结果至关重要。