mayavi.mlab.pipeline.iso_surface.IsoSurface使用什么算法?

1 投票
1 回答
1276 浏览
提问于 2025-04-18 14:02

我一直在查找Mayavi的文档和Google,但找不到IsoSurface类使用的算法的相关说明。如果有帮助的话,我的源数据来自一个3D的NumPy数组,这个数组是通过mayavi.mlab.pipeline.scalar_field函数传入的。下面是使用iso_surface函数处理一个包含3D立方体的图像的代码:

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中的注释说明它是对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上的相关文档,我没有看到提到任何出版物或实现的算法名称。

1 个回答

2

正如你已经发现的,Mayavi的iso_surface模块最终是使用VTK的vtkContourFilter。在《可视化工具包:面向对象的3D图形方法,第4版》(Schroeder, Martin和Lorensen)这本书中,有几句话提到了vtkContourFilter使用的算法。这段话摘自书的第198页:

在VTK中,等高线绘制是通过变种的“行进立方体”算法来实现的,之前已经介绍过。[...] 比如,四面体单元类型实现了“行进四面体”,并创建三角形原始图形,而三角形单元类型则实现了“行进三角形”,生成线段。

此外,还有一个vtkMarchingCubes过滤器,专门用于图像数据(在1维、2维或3维网格上均匀分布的数据);书中还比较了vtkMarchingCubesvtkContourFilter在处理3D体积数据时的执行时间。

撰写回答