VTK学习笔记之使用vtkMarchingCubes

前段时间学习了一下VTK的基础使用方法,由于关于这方面的中文教程比较少,再加上英文水平有不是很高,所以学习过程相当缓慢。中途又由于期中考试耽搁了。

最近接到一个大规模散乱数据场三维重现的一个小程序,所以又开始研究起VTK。 以下分两个部分:

一,Marching Cubes方法

 在三维规则数据场中构造等值面是计算机视觉也是VTK当中的一个重要的问题,Marching Cubes方法就是解决这个问题的一个成熟的被广泛使用的方法,简称MC方法。VTK当中的vtkMarchingCubes就是对这个方法的代码实现。

下面结合唐泽圣的《三维数据场可视化》和vtk的《The Design and Implementation of an Object-OrientedToolkit for 3D Graphics and Visualization》两本书的内容介绍一下MC方法。

在MC方法中, 假定原始数据是离散的三维空间规则数据场。用于医疗诊断的断层扫描仪( CT ) 及核磁共振仪( MRI ) 等产生的图象均属于这一类型。为了在这一数据场中构造等值面, 用户应先给出所求等值面的值, 设为C0。MC 方法首先找出该等值面经过的体元的位置, 求出该体元内的等值面并计算出相关参数, 以便由常用的图形软件包或图形硬件提供的面绘制功能绘制出等值面。由于这一方法是逐个体元依次处理的, 因此被称为Marching Cubes方法。

1) 确定包含等值面的体元

我们假定某体元一个角点的函数值大于( 或等于) 给定的等值面的值C0 , 则将该角点赋值为1, 并称该角点位于等值面之内( 或之上) 。如果该角点的函数值小于等值面的值C0 , 则将该角点赋值为零, 并称该角点位于等值面之外。显然, 如果某体元中一条边的一个角点在等值面之内, 而另一个角点在等值面之外, 那么, 该边必然与所求等值面相交。根据这一原理就可以判断所求等值面将与哪些体元相交, 或者说将穿过哪些体元。

由于每个顶点都有0和1这两个可能的值,所以一个体元中可能的等值面情况是256(2的8次方)种。但是可以用两种对称性将256中情况降到15中情况。第一,若将体元中值等于1的顶点的值和值等于0的顶点的值进行对换,等值面的情况不变,这样可能的情况变成原来的一半。第二,立方体是中心对称的,根据这个特性情况再次减少,降为15种。如下图所示。


2) 求等值面与体元边界的交点

  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值