【问题标题】:What algorithm does mayavi.mlab.pipeline.iso_surface.IsoSurface use?mayavi.mlab.pipeline.iso_surface.IsoSurface 使用什么算法?
【发布时间】:2014-07-20 16:45:52
【问题描述】:

我一直在筛选 Mayavi 文档和 Google,但找不到任何关于 IsoSurface 类使用什么算法的说明。如果有帮助,我的源数据来自传递给 mayavi.mlab.pipeline.scalar_field 函数的 3D NumPy 数组。下面是在包含 3D 立方体的图像上使用 iso_surface 函数的代码:

import numpy as np
from mayavi import mlab
img = np.pad(np.ones((5,5,5)), 1, mode='constant')
src = mlab.pipeline.scalar_field(img, figure=False)
iso = mlab.pipeline.iso_surface(src, contours=0.5)

iso_surface 函数生成一个 IsoSurface 实例。 mayavi\modules\iso_surface.py 中的代码显示使用了 mayavi.components.contour。 mayavi\components\contour.py 中的 cmets 表明它包装了 tvtk.ContourFilter。从我本地安装的 tvtk\tvtk_classes.zip\tvtk_classes\contour_filter.py 的代码中,我在 ContourFilter 类的 __init__ 方法中找到了这个:

tvtk_base.TVTKBase.__init__(self, vtk.vtkContourFilter, obj, update, **traits)

查看vtkContourFilter 的源代码code 以及www.vtk.org 上的相关文档,我没有看到对出版物的引用或在那里实现的算法的名称。

【问题讨论】:

  • 它是开源的,你自己去寻找吧。
  • 这无济于事,因为它的文档非常稀疏。我正在寻找该算法首次发布的出版物的名称或参考。我最终从源代码中发现 IsoSurface 没有使用 Marching Cubes,但我最初的问题仍未得到解答。
  • 我想发布所说的代码不会有伤害:)

标签: python vtk enthought mayavi


【解决方案1】:

正如您已经发现的那样,Mayavi 的 iso_surface 模块(最终)使用了 VTK 的 vtkContourFilter。 《Visualization Toolkit: An Object-Oriented Approach to 3D Graphics, 4th Edition》(Schroeder、Martin 和 Lorensen)一书中有几句话说明了 vtkContourFilter 使用的算法。这是来自那本书的第 198 页:

VTK 中的轮廓是使用行进的变体实现的 前面介绍的立方体算法。 [...] 例如,四面体 单元格类型实现“行进四面体”并创建三角形 原语,而三角形单元类型实现“行进 三角形”并生成线段。

还有一个vtkMarchingCubes 过滤器专用于图像数据(1d、2d 或 3d 网格上的规则间隔数据);本书接着比较了vtkMarchingCubesvtkContourFilter 3d 卷的执行时间。

【讨论】:

  • 这本书有免费的电子版吗?此后我改用vtkMarchingCubes,与iso_surface 相比,它生成的网格要简单得多。这正常吗?
  • 回复:电子版。恐怕我不知道。对于你的第二个问题:老实说,我不知道这是否正常(我充其量只是一个普通的 VTK 用户),但这听起来很合理:我的理解是一般算法首先对所有内容进行三角测量,然后进行行进四面体;我希望这需要更长的时间并提供更复杂的网格。
猜你喜欢
  • 2012-05-08
  • 2015-09-11
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2017-08-31
  • 2012-11-01
  • 2012-02-27
  • 2011-10-11
相关资源
最近更新 更多