背景知识

  • Marching Cubes算法是三维离散数据场中提取等值面的经典算法,其主要应用于医学领域的可视化场景,例如CT扫描和MRI扫描的3D重建等。

等值面

  • 空间中所有具有某个相同值的点的集合,可以类比为地形图里的等高线。

    {(x,y,z)|f(x,y,z)=c},c是常数

Marching Cubes

  • 算法的基本思想是逐个处理数据场中的立方体(体素),分离出与等值面相交的立方体,采用插值计算出等值面与立方体边的交点。根据立方体每一顶点与等值面的相对位置,将等值面与立方体边的交点按一定方式连接生成等值面,作为等值面在该立方体内的一个逼近表示。之所以这样,是由于Marching Cubes有个基本假设:沿六面体边的数据场呈连续性变化。也就是讲,如果一条边的两个顶点分别大于或小于等值面的值,则在该条边上有且仅有一点是这条边与等值面的交点。
  • 直观地说,就是用许多小正方体去对空间进行切分,然后用小正方体内部的平面来近似表示当前的等值面。显然,小正方体的数量越多,逼近的效果越好,随之带来的是计算的代价。

  • 小正方体内部的平面可以小立方体和等值面的相交情况来确定

  • 对于每个小正方体来说,每个顶点两种情况(大于或小于)当前等值面的值,8个顶点共256种情况,考虑到旋转对称性,从新分类后可得15种基本模式

Marching Cubes编程实现

  1. 将原始数据经过预处理之后,读入指定的数组中;
  2. 从网格数据体中提取一个单元体,成为当前单元体”同时获取该单元体的所有信息,例如8个顶点的值,坐标位置等;
  3. 将当前单元体8个顶点的函数值与给定等值面值C进行比较,得到该单元体的状态表;(edgeTable、triTable)
  4. 根据当前单元体的状态表索引,找出与等值面相交的单元体棱边,并采用线性插值的方法,计算出各个交点的位置坐标;
  5. 利用中心差分法,求出当前单元体8个顶点的法向量,在采用线性插值的方法,得到三角面片各个顶点的法向
  6. 根据各个三角面片顶点的坐标,顶点法向量进行等值面图象的绘制.

实现效果

  • 利用CUDA写了一个简单的Demo,通过调整等值面的阈值,可以得到不同的表面模型。

总结

  • Marching Cubes等值面提取算法在原理和实现上都比较简单直观
  • 经典的Marching Cubes算法还存在一些问题:
    • 缺陷一:拓扑连接二义性,如下图所示
    • 缺陷二:效率低下,需要借助分层结构和并行计算

  • 该算法的发展:Marching Tetrahedrons

原文地址【算法】Marching Cubes算法理解

本着知识开源共享,转载此文,如发现侵权请联系我删除。

参考

  • Lorensen W E, Cline H E. Marching cubes: A high resolution 3D surface construction algorithm[J]. Acm Siggraph Computer Graphics, 1987, 21(4):163-169.
  • Marching cubes
  • MarchingCubes算法提取等值面的基本原理

Marching Cubes算法理解相关推荐

  1. Marching Cubes算法

    marching cube算法解析 一. 综述 二.算法原理及实现 一. 综述 定义: Marching cubes是一种计算机图形算法,用于把以网格形式表示的等值面进行三角网格化的过程.由Loren ...

  2. Marching Cubes算法 - 计算机图形学

    本文章描述了一种三维标量场等值面的多边形曲面的创建方法.对于这类问题的一个通常的名字叫做"marching cubes"算法.这种算法即简单又高速,因为它基本上完全在查找表(loo ...

  3. Marching Cubes算法在医学三维重建中的应用

    概述 医学图像三维重建的方法主要有两大类:一类是三维面绘制,另一类是三维体绘制.体绘制能够更真实地反映物体结构,但由于其运算量大,即使利用高性能的计算机也无法满足实际应用中交互操作的需要.因此,面绘制 ...

  4. PCL库中Marching Cubes(移动立方体)算法的解析

    PCL库中Marching Cubes(移动立方体)算法解析 1. Marching Cubes算法的原理这里不再赘述,不懂的话,提供一下文献资源: 链接:MARCHING CUBES A HIGH ...

  5. 【论文精读】Deep Marching Cubes: Learning Explicit Surface Representations

    0.摘要 现有的基于学习的3D表面预测解决方案无法进行端到端训练,因为它们在中间表示(例如, TSDF)上操作,在后处理步骤(例如,通过移动立方体算法)中必须从中提取3D表面网格.在本文中,我们研究了 ...

  6. marching cubes表面重建原理

    Marching Cubes算法是三维离散数据场中提取等值面的经典算法,之前主要应用于医学图像重建,当前在TSDF等重建场景广泛应用. 参考论文:Marching Cubes: A High Reso ...

  7. 移动立方体(Marching Cubes,MC)算法

    移动立方体(Marching Cubes)算法是面绘制算法中的经典算法,它是W.Lorensen等人于1987年提出的体素级重建算法,也被称为"等值面提取"(Isosurface ...

  8. 【算法】Marching Cubes

    等值面 等值面是空间中的一张曲面,在该曲面上函数F(x,y,z)F(x,y,z)F(x,y,z)的值等于某一给定值.准确地讲,是指在某一网格空间中,假若每一结点保存着三变量函数F(x,y,z)F(x, ...

  9. SPH(光滑粒子流体动力学)流体模拟实现三:Marching Cube算法(1)

    流体模拟(三) Marching Cube算法(1) 我们在 实现流体表面重建时,需要事先在空间中划分网格,我们的流体系统正好已经完成了此项工作.其次利用Marching Cube算法计算出构成表面的 ...

最新文章

  1. Transforms CTM, 转换矩阵
  2. c++编码规范_Python02编码规范
  3. 2D Fast Marching Computations
  4. lopatkin俄大神精简中文系统 DREY PIP MICRO BOX LITE区别
  5. 数学家刘徽李善兰陈景润华罗庚
  6. 基于阿里云SDK实现发送短信功能
  7. java对MP4视频编码转换为H264格式解决浏览器播放无画面问题
  8. 游侠更新仙剑全系列免CD补丁(支持WIN7 SP1)【转载】
  9. iOS 清理缓存方法
  10. Spring 漏洞及其修复方案
  11. OA协同办公系统-day01
  12. Arcanist用法简介
  13. 语音识别技术的前世今生之前世
  14. xcode4.3 构建ipa包发布到iphone
  15. 使用tk.mapper和pagehelper一个bug记录:没有为 'PAGE_TABLE_ALIAS' 的列 4 指定任何列名称
  16. 用计算机核裂变模拟实验,SAS和蒙特卡罗模拟(1):开篇
  17. MinIO 文件服务器简单搭建
  18. STM32的USB例程JoyStickMouse代码分析
  19. 面向对象以及三大特性
  20. stm32f1_MCP41010_正相放大器

热门文章

  1. 什么是事件驱动架构(EDA)?
  2. LabVIEW学习笔记(三)——程序结构
  3. 图文详解placeholder属性的使用方法以及如何修改placeholder的默认样式
  4. 在ie中实现placeholder属性(其实主要针对ie8,9)
  5. Qt程序启动时报错0xc000007b解决办法
  6. 企业员工人事档案管理系统
  7. 上海宝付分享面试之前这四点一定要准备好
  8. npm install和npm run dev以及npm run build的区别
  9. fpga在线升级 linux_2011/12/16 linux主机名 用户密码、静态IP设置及通过SPI实现FPGA的在线升级...
  10. Wireshark 基础使用-过滤并查看抓包数据