我一直在浏览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的源codewww.vtk.org上的相关文档,我看不到对出版物的引用或在其中实现的算法的名称。

最佳答案

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


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


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

关于python - mayavi.mlab.pipeline.iso_surface.IsoSurface使用什么算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24852687/

10-12 19:12