三维重建移动立方体法(Marching Cubes Algorithm)的查找表的构造

来源:互联网 发布:知乎的回答可以删除吗 编辑:程序博客网 时间:2024/05/01 05:32

最近在做基于CT的三维重建,准备用Marching cubes算法,实现该算法的难点之一就是查找表的构造,建表我采用了笨办法,即是一点一点的手动建立,我相信肯定有很多巧办法来建表,我没采用的原因是第一,我不想浪费脑细胞在这样的无关产品性能及算法优劣的次要方面上;第二,我觉得用手动一点一点的建表可以降低该算法中的核心部分的代码复杂度,使得核心部分处理起来更容易。

一个Cube有8个顶点,每个顶点有Inside和Outside两种状态,所以一个Cube里头三角片的分布总共可能有2^8=256种组合。考虑到Rotation和Invertion对称两种情况后,可以用15种Basic Cube来覆盖所有256种可能的情况。

但是仅仅通过这15种cubes来重建三维,会产生漏点的情况这是因为查找表产生了歧义:

Marching Cubes算法提出不久,就有人发现了它的歧义性。先从2D开始说起。

对上图的两种连接方式的不同选择,在同一张图像上可导致完全不同的结果。经过观察我们可知,这种歧义性只发生在:一个面上,如果一条对角线的两端点大于阈值,另一条对角线的两端点小于阈值的情况。在立方体中,我们把这种面称作歧义面。

把这个问题放到3D上就产生了Hole问题。先看Direct类型和它的补充模式Reverse类型。按上面的歧义面定义可知,当我们把两种类型交错使用就会产生下图最左边所示情况:

 

一种扩展的Marching Cubes算法可以解决这个问题。如下图:

扩展的Marching Cubes算法虽然并没有解决歧义性问题,但是很好的防止了漏点。G.M.Nielson等人提出了渐近线判别法。它通过计算等值面与体素边界面的交线(双曲线)的渐进线与体素的边界面的相互位置关系来判断等值面的正确连接方式。可以解决歧义性问题,具体的细节已经超出本文的讨论范围,如果对此感兴趣请查阅相关的文献。

【查找表的实现代码】代码经过测试并且已经用于公司的产品。

0 0
原创粉丝点击