1

嘿,我目前正在尝试从 3d 数组中提取信息,其中每个条目代表一个坐标,以便从中绘制一些东西。问题是数组非常大(并且有几个),这意味着我实际上无法绘制所有这些。

我想要完成的只是绘制外部坐标的表示,如果您愿意,可以绘制数组的外壳。该数组不完整,可能有大的空白空间,只设置了几个像素,或者有大的像素数据簇组合在一起。我不知道期待什么样的形状(可能是一个简单的立方体,或者一个复杂的凹面网格),并且正在努力想出一种算法来有效地提取边界。该数组有效地将一组点存储在 3d 空间中。

我想创建 6 个 2d 网格(3d 阵列的每一侧一个),并为每个位置获取他们可以找到的最浅点,然后分别绘制它们。然而,正如我所说,这个 3d 形状可能是凹形的,这会给这种方法带来问题。想象一个顶部有一个圆圈的圆锥体(所说的圆圈比圆锥体的底部大)。虽然顶部和侧面的网格会从形状中获得正确的深度信息,但底部的网格会通过垂直线将底座连接到圆形,让我有效地松开圆锥形。

然后我想逐个切片分析数组,并从切片数据创建 2 个网格。我相信这应该适用于任何类型的形状,但是我正在努力寻找一种算法,它可以准确地为我提供每个切片的边界信息。再一次,如果你只是尝试从切片创建高度图,如果它们有任何凹面,你会遇到问题。我也通过了某种边缘跟踪算法,但是数组不提供连续的数据,而且几乎可以肯定每个切片都没有连续的边缘。

我尝试研究用于医学成像等的体积渲染,因为它处理与我所拥有的类似的问题,但实际上找不到任何我可以使用的东西。

如果有人对此类问题有任何经验或任何有价值的意见,请您指出正确的方向。

PS 我更喜欢得到一个封闭的外壳表示,因此我早期的 2d 网格方法。然而,一种简单地给我外壳点的方法,它们之间没有任何联系,这仍然会非常有帮助。

谢谢你,泽

4

3 回答 3

1

Guess, it's a bit late by now to be truly useful to you, but for reference I'd say this is a perfect scenario for volumetric modeling (as you guessed yourself). As long as you know the bounding box of your point cloud, you can map these coordinates to a voxel space and increase the density (value) of each voxel for each data point. Once you have your volume fully defined, you can then use the Marching cubes algorithm to produce a 3D surface mesh for a given threshold value (iso value). That resulting surface doesn't need to be continuous, but will wrap all voxels with values > isovalue inside. The 2D equivalent are heatmaps... You can refine the surface quality by adjusting the iso threshold (higher means tighter) and voxel resolution.

Since you're using Java, you might like to take a look at my toxiclibs volumeutils library, which also comes with sevaral examples (for Processing) showing the general approach...

于 2011-01-24T22:27:55.790 回答
1

我将首先查看您的数据结构。正如您所观察到的,该数组在点之间没有任何明显的空间关系。八叉树是您描述的数据的一个很好的表示。根据您的点集的复杂性,您可能只使用八叉树就可以找到地壳 - 假设您在近点之间有一些连通性。

或者,您可以然后转向更严格的算法,如光线投射或行进立方体。

于 2010-11-10T15:17:48.963 回答
0

想象一个顶部有一个圆圈的圆锥体(所说的圆圈比圆锥体的底部大)。虽然顶部和侧面的网格会从形状中获得正确的深度信息,但底部的网格会通过垂直线将底座连接到圆形,让我有效地松开圆锥形。

即使是这样简单的示例也无法手动重建,更不用说算法了。您的数据表示带有锥形孔的圆柱体的可能性与表示顶部附有圆盘的圆锥体的顶点一样可能。

我不知道期待什么样的形状(可能是一个简单的立方体......

同样,如果没有关于如何生成数据的进一步信息,以立方体形式排列的 8 个顶点也可能代表 2 个交叉正方形。如果您知道数据是由某种旋转 3D 扫描仪生成的,那么这至少是一个开始。

于 2010-11-10T15:44:25.113 回答