【问题标题】:Clarification on Marching Cubes Algorithm关于 Marching Cubes 算法的说明
【发布时间】:2015-06-02 02:02:21
【问题描述】:

关于Marching Cubes,我对它的算法和实现有一些疑问。我浏览了 Marching Cubes 的 Paul Bourke 的优秀文章以及网站上可用的源代码,但是在理解以及如何以我自己的方式实现算法方面,我仍然遇到了一些问题。问题如下:

  • Gridcell 大小 - 我已阅读到 gridcell 大小会影响生成的 3D 模型的质量。例如,如果我有一堆大小为 (200*200*200) 的 x 射线图像,那么,将由 2 个相邻的图像切片构造一块网格单元。因此,平板中的网格单元总数将为 (200-1)*(200-1),其中每个网格单元角对应于图像的像素值/密度。它是否正确??另外,gridcell如何实现不同大小的?

  • 体素大小 - 我已经阅读了 Marching Cubes 的一些参考资料,但我似乎无法找到算法中如何处理体素大小。如果我错了,请纠正我,在我的情况下,相邻图像层之间的间隙大小为 1 百万;因此,我该如何照顾 Marching Cubes 算法中的那些人,还是死路一条?它是否像 Gridcell 的大小一样被照顾? (假设:xy坐标上一个像素的大小为19微米,而gap/z为25.4微米/1 mil长)

  • 网格单元角的坐标(立方体的顶点坐标) - 我正在尝试通过图像集尺寸 (200*200*200) 的嵌套循环来分配具有索引 i j k 的网格单元角的坐标。它是否正确??有没有更快的方法?

注意:我在 VTK 中看到了 MC 的实现,但我很难理解它,因为它依赖于其他一些 VTK 类。

【问题讨论】:

    标签: c++ algorithm 3d marching-cubes


    【解决方案1】:

    很多问题。我将尝试提供一些指示。 200^3 中的第一个是 ct 的一个非常小的数据集! 1024^3 呢? :)

    行进立方体是为常规网格构建的。所以数据是定义在立方体的顶点还是中心并不重要:只需移动立方体大小的一半!如果您有不规则的数据,请先使用其他数据或重新采样到规则网格。

    您似乎还缺少“行进”部分:我们的想法是找到一个具有表面的立方体并从那里填充填充。全部在外面或全部在里面的多维数据集停止搜索。这样一来,您的巨大常规网格中的大多数立方体甚至都不需要查看。

    缩放到实际单位应该是最后一步。将输入音量视为标准化为 1x1x1。然后将输出顶点缩放到物理单位。你拥有的数据就是你拥有的数据。任何重采样都应该在重建或过滤之前完成。它在几何阶段没有位置。

    我不确定我是否理解最后一个问题,但对于进一步处理来说真正重要的一件事是创建一个连接的索引网格。一个重要的技巧是只保留前一个切片/行/邻居的一种哈希表。因此,您可以快速查找已创建的顶点并重用它们的索引。结果应该是具有唯一顶点的连接网格。然后,您可以将其用于任何类型的几何处理。

    【讨论】:

    • 嗨,是的,给定的图像尺寸非常小,但实际上,我会设置一个尺寸约为 2000*2000*201 的图像。关于网格单元,网格单元的八个角是否由相邻切片的像素值组成(n 切片的 2 个像素 + n+1 切片的 2 个像素)??
    • 非常感谢您的建议,它确实消除了我的一些疑虑。非常感谢
    • @vincent911001:不要介意切片大小。你的立方体总是 x,y,z - x+1,y+1+z+1。因此,在 (x,y)-(x+1,y+1) 处的 z 切片中的 4 个值和在 (x,y)-(x+1,y+1) 处的 z+1 切片中的 4 个值是您的立方体。任何缩放都应该是后期或预处理。
    • 嗨,starmole,感谢您的清晰描述,它确实有帮助。顺便说一句,网格单元的顶点是使用循环计数器索引创建的(例如:用于循环整个体积的 i、j、k)??
    • 一种简单的方法是每当您在立方体 (x,y,z) 加上 (1/0,1/0,1/0) 中创建一个顶点时:在索引为的哈希表中查找它唯一键(x,y,z,0/1,0/1,0/1)。如果它不存在,则创建它,否则使用索引。现在第一个技巧是要意识到,对于每个 x,y,z,您只需要 3 个可能的顶点:向下 x、向下 y、向下 z。第二个窍门是要知道,当您从上到下、从左到右、从前到下遍历游览网格时,该表非常小。您只需检查 (havevertex(x,y,z,down/left/back) ) 是否使用它,否则 addit()。而 hasvertex 只是一个哈希表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多