Python中的Marching Cubes算法

2025年1月5日 | 阅读 3 分钟

引言

在本教程中,我们将学习 Python 中的 Marching Cubes 算法。Marching Cubes 算法用于从 3D 体积中提取 2D 表面网格。这可以用于地形图或天气预报的 3D 等值线细节。它的工作原理是遍历整个体积,搜索感兴趣的区域。如果找到这些区域,则会创建一个三角剖分并将其添加到输出网络。结果是一组顶点和一组三角形面。

该算法需要数据量和等值面值之间的平衡。例如,在 CT 图像中,Hounsfield 单位在 +700 到 +3000 之间代表骨骼。因此,可能的输入是 +700 的值,以提取重建的 CT 数据和骨骼或骨骼样密集区域的网格。此实现还可以通过使用不同的 kwargs 在体素间距不均一的各向异性数据集中正常工作。

理解 Python 中 Marching Cube 算法的实现

乍一看,你可能会认为当你经过每个点时,需要在线段的中间画一条线,然后重新开始。然而,这种方法只适用于某些组合。如果你看上面图像右侧的细节,你会发现有些例外情况不能这样处理。

是的,有一个很好的方法可以解决这个问题。通过这种方法,我们试图找到盒子可能出现的所有组合。通过测试所有 28 种可能性而不考虑显示差异的概率,我们可以找到 14 种不同的排列(其中 15 种是空的)。我们还可以通过固定一个二进制位来为每个组合分配一个唯一的代码。每个立方体有八个顶点。因此,我们可以将立方体的并集表示为一个 8 位数字,例如 11000001 = 193。

这个整数值用于表示上一节中的标准立方体。总而言之,我们在表格视图中有 256 种组合(从 0 到 255),可以在其中存储三角形。这使得它非常易于使用,因为我们所要做的就是计算代表每个立方体的数字,并从表格视图中绘制结果三角形。您无需自己构建表格,这需要太多努力。您可以在互联网上找到大多数编程语言的搜索词。以下教程展示了 Marching Cube 算法的一个简单实现。但是,为了使其尽可能易于阅读,它使用的是伪代码而不是完整的示例。

程序代码

现在,我们给出 Python 中 Marching Cube 算法的程序代码。代码如下:

Marching Cube 算法的优化是什么?

首先,您可以通过调整角度来提高三角形的精度,使它们不位于边的中心。起始点之间的距离可能会变化,并且可能每次都不相同。因此,它将决定是将三角形移近还是移远。但这表示您需要更改表格视图,并可能对其进行参数化。这将需要更多的工作来实现。

另一种优化是制作并行线。这对于 Marching Cubes 算法来说非常容易,这也是它如此受欢迎的原因之一。由于所有立方体都是完全独立的,我们可以轻松地并行计算立方体。

结论

在本教程中,我们将学习 Python 中的 Marching Cubes 算法。Marching Cubes 算法在创建具有网格的对象时很有用。我们在这里学习 Marching Cube 算法的实现和优化。此外,我们还在此分享了它的程序代码。