如何将点云数据转换为曲面和实体

2021年 1月 28日

在实际建模过程中,并不是所有分析项目都以 CAD 模型开始。有时,我们唯一可用的数据仅是一组点,也称为点云。在这篇博客文章中,我们将展示如何将点云数据转换为可在 COMSOL Multiphysics® 软件中进行仿真的几何模型。

什么是点云?

点云是在 xyz 坐标上绘制的三维点集。这些点通常源于使用激光、计量工具或雷达等扫描的物理对象表面。

下图是电脑中一个文本文件的点云数据文件的开始,其中 xyz 坐标以制表符分隔的列排布。

A screenshot of a Notepad text file with lines of point cloud data.
带有点云数据的文本文件。

这是 COMSOL Multiphysics 可以导入的最简单的坐标格式类型之一。在软件中,它被称为电子表格 格式。在这种格式下,我们可以使用可选的%(百分比)字符来代表注释行。值和索引可以用空格、逗号、分号或制表符分隔。导入后,将根据文件中的行号为其指定坐标的索引。由于没有关于这些点之间关系的信息(也称为连通性),因此在这样的点集中经常存在歧义。为了说明可能发生的歧义类型,我们来看一个简单的二维示例。考虑下图中的二维曲线。从图中可以明显看出,点 5、18 和 7 是曲线上的连续点。

A blue line representing a 2D curve with consecutive points labeled with numbers used to demonstrate how to convert point cloud data.
但是,在下图中,它对应于由导入的点云数据表示的曲线,并不是那么明显。也许 5、6和 4 是曲线上的连续点?

A point cloud with numbered points but no lines, showing an inferred but not obvious 2D curve.
点云数据可能具有内在的歧义。点 5、6 和 4 是否已连接?在这种情况下,它们没有连接,这可以从原始曲线看到,但不能从其相对稀疏的采样点云中看到。

如果导入的三维坐标列表带有关联的三角形表面连接性数据(例如 STL,PLY 或 3MF 文件格式),则可以解决这种歧义。我们有一个三角形列表,该列表由点之间的连通性定义,且唯一定义了曲面。例如,在表面三角形数据文件中,诸如

15 17 23

表示索引为 15、17 和 23 的点作为三角形的顶点相连。

另一方面,如果我们只有点云数据而没有连通性信息,那么为了解决这种歧义,我们需要做出其他假设。一种这样的假设可能是:表面数据以 z=f(x,y) 的形式表示,也称为函数面。如果数据不在该表单 z=f(x,y) 上,我们总是可以尝试将其分成几部分,每部分在表单上。这里要注意的是,表格上的数据 y=f(x,z) 或者 x=f(y,z) 进行一些重新排列后同样有用。

可视化点云

可视化点坐标数据的一种简单方法是将其作为表格导入到 多边形 几何对象中,然后使用 转换为点 操作,如下图所示。

The COMSOL Multiphysics UI with point cloud data as geometry point objects in the Graphics window, shown from a side angle.
A front-facing view of the geometry point objects from point cloud data in the COMSOL Multiphysics Model Builder.

点云数据的可视化图,从两个不同的视角看到的几何点对象。

基于此可视化图,我们可以假设点云定义了以 z=f(x,y) 形式表示的函数面。为了以后使用,我们将需要知道点云的范围。获取此信息的一种简单方法是右键单击几何 节点,然后选择测量

A screenshot of the Measure Settings window with the Geometry Type, Selection, and Measurements sections expanded.
测量设置窗口提供了有关点云范围的信息。

由点云范围显示的信息我们可以看到,有 958 个点在 xy 方向上都从 0.5 延伸到 9.5m,在 z 方向上从 -0.2 延伸到 +1.5m。本示例中使用的单位是米(m)。

现在,我们可以尝试使用 转换为曲面 操作将这组点转换为曲面。但是,这不起作用。因为我们没有这些点的连接信息,系统将给出一条错误消息。我们需要以某种方式构造连接性数据。另外,我们需要假设数据在表格上 z=f(x,y)。解会将点云导入为一个非结构化插值曲面。

创建一个插值曲面

下一步,我们在 全局定义 下添加一个插值 函数,并将 数据源 设置为文件。浏览点云文本文件,在此示例中为 C\ COMSOL \ point_cloud.txt,如下图所示。您可以从此博客文章末尾的链接下载此文件。

A screenshot of the Interpolation settings in COMSOL Multiphysics, with the Definition and Interpolation and Extrapolation sections expanded.
由点云定义的 插值函数。

插值 函数将自动猜测该数据在表格 z=f(x,y) 上,文件的前两列分别代表 xy 坐标,第三列代表函数值,我们将其解释为函数曲面的 z 坐标。我们可以从自动设置为2的参数数量中看到这一点,分别对应于xy坐标。函数名称 被自动设置为 int1(可以更改)且 文件中的位置 设置为 1,这表示代表z坐标的函数值为int1xy)将由输入参数列之后的第一列给出。换句话说,列号 2+1=3。在这种情况下,文件只有三列,因此 1 是唯一选择。如果数据采用其他形式,则可以在导入之前使用文本编辑器或电子表格软件(例如 Excel®)重新排列数据。

现在,单击插值设置窗口顶部的绘图创建绘图”按钮来可视化插值函数。绘图 选项将创建一个临时的可视化,创建绘图 选项将创建一个二维网格 数据集和相关的 函数二维绘图组 下的结果

An interpolation function visualized as a Function plot in a rainbow color table and generated from point cloud data.
A screenshot of the Function Settings window with the Data and Expression sections expanded.

结果 及其关联的 设置 窗口下以 函数 绘图的形式显示插值函数。

那么,软件如何仅基于假设 z=f(x,y) 来创建此表面?插值函数在后台创建 xy 坐标的二维三角形网格,然后将函数值关联到每个点,最后在函数值之间执行线性插值。我们可以将其视为在点云上放置一个渔网。请注意,此三角形网格对用户不可见。在插值和外推 部分的 插值设置 窗口中,可以看到设置插值,这是默认设置为线性。另一个选项是 最近邻插值,它创建一个分段常数函数插值,在此处没有用。

本节中的其他设置是外推。这用于猜测函数定义范围之外的值,定义范围由函数的 xy 坐标确定。在这种情况下,点云分布在xy平面的一个圆内。当将数据可视化为函数图时,xy 数据取自矩形栅格 二维 数据集,并且插值函数将以放射状模式分配常数函数值,填充圆和矩形之间的空间(外接点云数据)。如下图所示,我们可以从点云数据中识别出圆形印记。

A top view of the interpolation function in the COMSOL Multiphysics Graphics Window, visualized in a rainbow color table.
内插函数的俯视图,在定义原始点云足迹的圆形区域之外可以看到外推部分。

如何将这个插值函数转换为可用于网格划分,然后进行仿真的几何表示?这是通过使用 参数化曲面 几何对象完成的,您将在后面 看到。

创建参数化曲面

要创建紧跟上述插值函数的几何曲面,请根据下图在几何下添加参数化曲面特征。

A screenshot of the Parametric Surface Settings window, with the Parameters, Expressions, and Advanced Settings sections expanded.
基于点云插值功能的曲面的 参数化曲面设置。

在此设置 窗口中,我们将 s1s2 分别解释为 xy 坐标,将 int1s1s2)解释为 z 坐标。现在,我们需要使用之前通过测量工具获得的信息。我们将 s1 和 s2 的最小值和最大值设置为比点云的测得范围宽一点,以确保我们不会遗漏任何细节。

在这种情况下,将在两个方向上将参数曲面 定义为 0 到 10 之间,以便与我们测得的 0.5 到 9.5 之间的点云数据进行比较。

在内部,COMSOL 软件用 B 样条曲线表面表示参数化表面,该 B 样条曲线表面被计算为近似于 xyz 表达式 定义的数学表面。 B 样条曲面是分段多项式曲面,所使用的分段多项式的数量由 数间接确定。结数越大,分段多项式的数目越多,并且逼近效果越好,但是计算成本更高。B 样条曲面中的结数会自动增加,直到曲面近似值满足“相对容差” 字段中指定的容差 或直到达到“相对容差” 字段中最大结数 字段指定的结数为止。根据相对于参数化曲面的边界框的空间对角线测量容差。

在这种情况下,试错法使我们的相对容差 为 5e-4,而最大结数为 500。(默认值分别为 1e-5 和 20。)下图显示了生成的表面。


参数化曲面几何对象。

我们可以更早就使用同时可视化点云和曲面的技术,如下图所示。


参数化曲面几何对象和点云。

要更好地控制表面可视化的细节级别,可以单击 网格 节点并创建具有适当 单元大小 的网格。下图显示了使用极细化 设置的网格。要获得更高的分辨率,请选择 用户控制网格 选项并设置 定制 单元大小。

A visualization of the meshed point cloud and parametric surface geometry object in the Model Builder Graphics window.
使用网格可视化点云和参数化曲面几何。

修剪表面

原始点云数据具有以 x=5,y=5 为中心,半径为 4.5 的圆形足迹。下图显示了添加一个圆柱体到这些度量的结果,圆柱体的高度覆盖 z 方向的最小值和最大值。

A circular geometry being used to trim the parametric surface geometry generated by the point cloud data.
用于修剪表面的圆柱体。

现在,使用 交集 操作通过选择曲面和圆柱体来修剪曲面,如下图所示。

The model geometry after intersecting the parametric surface with the cylinder.
表面与圆柱相交的结果。

The trimmed surface with the point cloud overlaid over the gray geometry as black dots.
点云和修剪的表面。

在两个曲面之间的空间中创建实体

要在两个内插曲面之间的空间中创建具有圆形足迹的实体,只需重复上述步骤导入第二个曲面即可,如下图所示。

The original parametric surface with another surface above that corresponds to another point cloud.
对应于第二个点云的第二个表面。

然后,创建一个圆柱体以修剪表面,并对所有对象使用 转换为实体 操作,如下图所示。

A screenshot of the Model Builder in COMSOL Multiphysics with a purple geometry made up of a cylinder and two parametric surfaces.
A gray cylindrical geometry in the Model Builder Graphics window.

使用圆柱体修剪两个表面。

我们可以使用 分割对象分割域 操作获得相同的结果。这些操作比转换为实体 更复杂并且允许我们选择圆柱作为要分区的对象或域。然后,可以选择插值曲面作为用于分区的工具对象。在某些情况下,分割域 操作更加通用,因为它允许我们从对象中划分选定的域,并且可以选择在这些平面不与要划分的域相交时自动扩展平面、圆柱或球形工具面。

最后,使用 删除实体 删除不需要的域,如下图所示。

A solid model geometry created by importing and trimming two interpolation surfaces.
通过导入和修剪两个插值曲面得到的实体。

现在可以对该实体进行网格剖分,并用于任何类型的仿真。在这种情况下,我们可以创建仅有六面体的扫掠网格,如下图所示。

A cylindrical solid with a swept mesh.
圆柱形实体的扫掠网格。

生成点云数据进行测试

我们可以通过本页底部的链接下载本博客文章中使用的点云数据和文件。如果我们想生成自己的点云数据,则可以从任何表面开始。在下图中,如上例所示,使用了一个参数化表面,并用圆柱体对其进行了修剪,用于 z 坐标的表达式为:

z = 0.25 * cos(s1)+ 0.2 * cos(1.5 * s2)* exp(-0.1 * s1 + 0.1 * 0.25 * s2)+ 0.1 * s2

实际上,这是用于生成第一个示例中使用的点云数据的表面。

A parametric surface that was created via a mathematical expression and trimmed via a cylindrical object.
由数学表达式给出并由圆柱对象修剪的参数化曲面。

现在,创建一个网格,然后右键单击 网格 节点并选择 绘图结果 下生成一个网格图。接下来,右键单击 网格图>网格,然后选择添加要导出的绘图数据 。在数据设置窗口中,将1用作表达式。由此导出的常量值将不被使用。选择一个文件名,然后单击窗口顶部的导出 将数据写入文件。

A screenshot of the Data Settings window, with the Output section expanded to show the Spreadsheet option for exporting data.
用于以电子表格格式输出数据的输出设置。

如果在文本编辑器或电子表格软件中打开生成的文本文件,则会看到带有注释行和四列的标题。最后一列包含常量表达式1。

A screenshot of exported model data in a Notepad document.

在电子表格软件(例如 Excel®)中,我们可以删除第 4 列,然后将文件再次保存为文本文件格式。生成的文件将采用与前面讨论的示例相同的格式。请注意,标题中的前导注释行是可选的,可以删除。

结束语和拓展阅读

我们可以用多种方式来概括上面介绍的技术。例如,我们可以导入两个以上的曲面以创建更加复杂的结构;可以使用非圆柱体的对象修剪数据;在其他情况下,点云数据可以基于圆柱或球形坐标;可以将以上技术与坐标转换结合使用用于生成圆柱或球形面片。

有关在岩土工程 App 中使用插值数据的真实示例,请参阅此博客文章:将地质模型整合到区域尺度的地下水模型中

有关更多相关示例,请参见此博客文章:如何基于高程数据模拟不规则形状并构建几何模型

动手尝试:转换点云数据

单击下面的按钮,下载这篇博客文章中使用的 MPH 文件和数据文件。您还将找到一个MPH文件,这个文件演示了如何将表达式定义的原始参数曲面与点云定义的参数曲面进行比较。

Microsoft 和 Excel 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。

博客分类


评论 (0)

正在加载...
浏览 COMSOL 博客