澄清Marching Cubes算法
关于Marching Cubes,我对它的算法和实现有一些疑问。 我浏览了Marching Cubes的优秀Paul Bourke文章以及网站上的可用源代码,但我仍然遇到了一些理解问题以及如何以我自己的方式实现算法。 问题如下:
网格单元大小 - 我已经读过网格单元大小影响生成的3D模型的质量。 例如,如果我有一堆大小为(200 * 200 * 200)的xray图像集,那么将从2个相邻的图像切片构建一个网格单元格。 因此,板中的网格单元的总数将是(200-1)*(200-1),每个网格单元角对应于图像的像素值/密度。 它是否正确?? 此外,我们如何为gridcell实现不同的尺寸?
体素大小 - 我已经读过几次Marching Cubes的参考资料,我似乎无法找到体素大小如何在算法中照顾。 如果我错了,请纠正我,在我的情况下,相邻图像层之间的间隙大小为1密耳; 因此,我如何照顾那些在Marching Cubes算法或者它是死胡同? 它是否被当作Gridcell的大小来处理? (假设:xy坐标中一个像素的尺寸是19微米,而间隙/ z是25.4微米/ 1密耳长度)
Gridcell角点的坐标(立方体的顶点坐标) - 我试图通过图像集尺寸(200 * 200 * 200)的嵌套循环来分配具有索引ijk的栅格单元角落的坐标。 它是否正确?? 有没有更快的方法来做到这一点?
注意:我已经看到了VT在VTK中的实现,但是我很难消化它,因为它取决于其他一些VTK类。
很多问题。 我将尝试给出一些指示。 首先200 ^ 3是一个非常小的ct数据集! 那么1024 ^ 3呢? :)
行进中的立方体是为规则网格而建造的。 因此,在立方体顶点或中心定义更多数据并不重要:只需移动立方体大小的一半即可! 如果你有不规则的数据使用别的东西或首先重新采样到一个规则的网格。
你似乎也错过了“行军”的部分:这个想法是找到一个立方体的表面,并从那里填充洪水。 全部在外或全部内的立方体停止搜索。 这样,你巨大的规则网格中的大多数立方体都不需要被查看。
缩放到实际单位应该是最后一步。 将输入音量视为标准化为1x1x1。 然后将输出顶点缩放到物理单位。 您拥有的数据是您拥有的数据。 任何重采样都应在重建或过滤之前完成。 它在几何阶段没有位置。
我不确定我是否理解最后一个问题,但是对于进一步处理非常重要的一件事是创建一个连接的索引网格。 一个重要的技巧就是保留一个上一个slice / line / neighbor的哈希表。 因此,您可以快速查找已经创建的顶点并重新使用它们的索引。 结果应该是具有唯一顶点的连通网格。 这可以用于任何类型的几何处理。
链接地址: http://www.djcxy.com/p/6353.html