【问题标题】:Getting boundary information from a 3d array从 3d 数组中获取边界信息
【发布时间】:2013-09-05 14:10:40
【问题描述】:

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

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

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

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

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

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

附:我更喜欢得到一个封闭的外壳表示,因此我早期的 2d 网格方法。但是,一种只为我提供 shell 点的方法,它们之间没有任何联系,这仍然会非常有帮助。

谢谢你, 泽

【问题讨论】:

    标签: java 3d mesh edge-detection


    【解决方案1】:

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

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

    【讨论】:

    • 对不起,迟到的评论。我不得不放弃这个问题并保留高度图,同时确保 3d 阵列不会产生任何凹形。从我所做的快速研究来看,我不太确定八叉树方法在这种情况下是否可用,而且我相信光线投射的计算成本太高,无法在每次重新渲染时执行 pe。行进立方体算法似乎正是我想要的。感谢您的意见,至少我可以给之后接手该项目的任何人留个便条。
    【解决方案2】:

    猜猜,现在对您真正有用有点晚了,但作为参考,我想说这是体积建模的完美场景(正如您自己猜测的那样)。只要您知道点云的边界框,就可以将这些坐标映射到体素空间,并为每个数据点增加每个体素的密度(值)。完全定义体积后,您可以使用Marching cubes algorithm 为给定阈值(iso 值)生成 3D 表面网格。生成的表面不需要是连续的,但会将所有体素的值 > 等值包裹在里面。 2D 等效项是heatmaps...您可以通过调整 iso 阈值(越高意味着越紧)和体素分辨率来优化表面质量。

    由于您使用的是 Java,因此您可能想看看我的 toxiclibs volumeutils 库,它还附带了 sevaral examples(用于 Processing)显示了一般方法...

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 感谢您的回复。数据由系统另一部分的算法生成,并在每次迭代中更新。我需要的是一种算法来让我知道数组外层的形状,不管它的形式或它是如何生成的。正如另一个回复所指出的,我相信行进立方体将是解决这个问题的最佳方法。
      猜你喜欢
      • 2018-08-23
      • 2015-03-14
      • 2021-04-22
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2019-10-03
      相关资源
      最近更新 更多