我一直在浏览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中的注释表示包装了tvtk.ContourFilter。从本地安装中的tvtk \ tvtk_classes.zip \ tvtk_classes \ contour_filter.py找到的代码中,我在__init__
类的ContourFilter
方法中找到了这一点:tvtk_base.TVTKBase.__init__(self, vtk.vtkContourFilter, obj, update, **traits)
查看
vtkContourFilter
的源code和www.vtk.org上的相关文档,我看不到对出版物的引用或在其中实现的算法的名称。 最佳答案
正如您已经发现的那样,Mayavi的iso_surface
模块(最终)使用了VTK的vtkContourFilter
。 《可视化工具包:面向对象的3D图形方法,第四版》(Schroeder,Martin和Lorensen)一书中有几句话,其中提到了vtkContourFilter
使用的算法。摘自该书第198页:
使用行进的变体来实现VTK中的轮廓
前面介绍过的多维数据集算法。 [...]例如,四面体
单元格类型实现“行进四面体”并创建三角形
原语,而三角形单元格类型实现了“行进
三角形”并生成线段。
还有一个vtkMarchingCubes
过滤器专用于图像数据(在1d,2d或3d网格上规则间隔的数据)的情况;本书继续比较了3d卷在vtkMarchingCubes
和vtkContourFilter
之间的执行时间。
关于python - mayavi.mlab.pipeline.iso_surface.IsoSurface使用什么算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24852687/