我一直在筛选Mayavi文档和谷歌,但是我找不到任何关于IsoSurface类使用什么算法的声明。如果有帮助,我的源数据来自传递给mayavi.mlab.pipeline.scalar_field函数的3D mayavi.mlab.pipeline.scalar_field数组。下面是在包含三维立方体的图像上使用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中的注释声明它包装了tvtk.ContourFilter。从tvtk\tvtk_classes.zip\tvtk_classes\contour_filter.py在本地安装中找到的代码中,我在ContourFilter类的__init__方法中找到了这样的代码:
tvtk_base.TVTKBase.__init__(self, vtk.vtkContourFilter, obj, update, **traits)查看源代码 for vtkContourFilter和www.vtk.org上的相关文档,我看不到对发布的引用,也没有看到在那里实现的算法的名称。
发布于 2014-07-21 07:30:49
正如您已经发现的,Mayavi的iso_surface模块使用(最终)VTK的vtkContourFilter。在“可视化工具包:面向对象的3D图形方法,第4版”(Schroeder,Martin和Lorensen)一书中有几句话讲述了vtkContourFilter使用的算法。这本书的第198页:
VTK中的等高线是利用前面提出的行进立方体算法的变化来实现的。..。例如,四面体单元类型实现“行进四面体”并创建三角形原语,而三角形单元类型实现“行进三角形”并生成线段。
还有一个特定于图像数据的vtkMarchingCubes过滤器(在1d、2d或3d网格上有规则的间隔数据);这本书接着对3d卷的vtkMarchingCubes和vtkContourFilter的执行时间进行了比较。
https://stackoverflow.com/questions/24852687
复制相似问题