三维重建移动立方体法(Marching Cubes Algorithm)的查找表的构造
2014-01-13 14:33
330 查看
最近在做基于CT的三维重建,准备用Marching cubes算法,实现该算法的难点之一就是查找表的构造,建表我采用了笨办法,即是一点一点的手动建立,我相信肯定有很多巧办法来建表,我没采用的原因是第一,我不想浪费脑细胞在这样的无关产品性能及算法优劣的次要方面上;第二,我觉得用手动一点一点的建表可以降低该算法中的核心部分的代码复杂度,使得核心部分处理起来更容易。
一个Cube有8个顶点,每个顶点有Inside和Outside两种状态,所以一个Cube里头三角片的分布总共可能有2^8=256种组合。考虑到Rotation和Invertion对称两种情况后,可以用15种Basic Cube来覆盖所有256种可能的情况。
![](http://img.blog.csdn.net/20140113142013593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm91cmllckZlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
但是仅仅通过这15种cubes来重建三维,会产生漏点的情况这是因为查找表产生了歧义:
Marching Cubes算法提出不久,就有人发现了它的歧义性。先从2D开始说起。
![](http://img.blog.csdn.net/20140124113908734?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm91cmllckZlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
对上图的两种连接方式的不同选择,在同一张图像上可导致完全不同的结果。经过观察我们可知,这种歧义性只发生在:一个面上,如果一条对角线的两端点大于阈值,另一条对角线的两端点小于阈值的情况。在立方体中,我们把这种面称作歧义面。
把这个问题放到3D上就产生了Hole问题。先看
![](http://img.blog.csdn.net/20140124114257218?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm91cmllckZlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(Direct类型)和它的补充模式
![](http://img.blog.csdn.net/20140124114316500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm91cmllckZlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(Reverse类型)。按上面的歧义面定义可知,当我们把两种类型交错使用就会产生下图最左边所示情况:
![](http://img.blog.csdn.net/20140124114540375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm91cmllckZlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一种扩展的Marching Cubes算法可以解决这个问题。如下图:
![](http://img.blog.csdn.net/20140124114725671?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm91cmllckZlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
扩展的Marching Cubes算法虽然并没有解决歧义性问题,但是很好的防止了漏点。G.M.Nielson等人提出了渐近线判别法。它通过计算等值面与体素边界面的交线(双曲线)的渐进线与体素的边界面的相互位置关系来判断等值面的正确连接方式。可以解决歧义性问题,具体的细节已经超出本文的讨论范围,如果对此感兴趣请查阅相关的文献。
【查找表的实现代码】代码经过测试并且已经用于公司的产品。
一个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等人提出了渐近线判别法。它通过计算等值面与体素边界面的交线(双曲线)的渐进线与体素的边界面的相互位置关系来判断等值面的正确连接方式。可以解决歧义性问题,具体的细节已经超出本文的讨论范围,如果对此感兴趣请查阅相关的文献。
【查找表的实现代码】代码经过测试并且已经用于公司的产品。
相关文章推荐
- 三维表面重建robust algorithm for surface reconstruction from 3D point cloud
- 移动立方体算法(Marching cubes algorithm)
- 移动三维场景重建理解
- Structure from motion-移动三维场景重建
- SLAM: Structure From Motion-移动中三维场景重建
- Overview of the Marching Cubes Algorithm
- 二分查找之美:二分查找及其变体的正确性以及构造方式
- VisualSFM+MeshLab 三维重建全过程记录
- shell 查找最旧的10个文件 并移动
- unity 鼠标拖动三维物体移动
- 视频图像识别学习系列:线结构光三维测量重建
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- VC2008移动头文件未重建
- 核磁共振三维重建(视频)
- 孙其功陪你学之——Kinect三维重建
- 血管的三维重建
- 三维重建5:场景中语义分析/语义SLAM/DCNN-大尺度SLAM
- 三维重建技术概述
- 天音控股与Opera建立合资公司 构造移动互联网
- 提供任意字符串,请构造一个函数能够查找字符串中出现最多的次数和个数