maya .mlab.pipeline.iso_surface.等值面使用



我一直在筛选Mayavi文档和谷歌,但我找不到任何关于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实例。mayavimodulesiso_surface.py中的代码显示使用了mayavi.components.contour。mayavicomponents contourpy中的注释说明它包装了tvtk.ContourFilter。从我在本地安装的tvtktvtk_classes.ziptvtk_classescontour_filter.py中找到的代码中,我在ContourFilter类的__init__方法中发现了这一点:

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

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

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

VTK中的轮廓是使用行进的变化来实现的立方体算法。[…例如,四面体细胞类型实现"行进四面体"并创建三角形基本类型,而三角形单元格类型实现了"移动"三角形",并生成线段。

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

相关内容

  • 没有找到相关文章

最新更新