我使用mayavi.mlab
显示从图像中提取的3D数据。数据如下:
- 3D相机参数为
3
线在x, y, x
方向围绕相机中心,通常为20台左右的相机使用mlab.plot3d()
。 - 使用
mlab.points3d()
在空间中生成约4000
点的3D彩色点。
对于(1),我有一个函数分别为每个相机绘制每条线。如果我是正确的,所有这些线都被添加到当前场景的mayavi管道中。在mlab.show()
上,场景需要大约10秒来渲染所有这些线条。
对于(2),我无法找到一种方法来一次绘制所有的点,每个点都是不同的颜色,所以现在我迭代mlab.points3d(x,y,z, color = color)
。我最近一直在等待这个程序完成,因为它需要很长时间。如果我一次用相同的颜色绘制所有的点,大约需要2秒。
我已经尝试用fig.scene.disable_render = True
启动我的脚本,并在用mlab.show()
显示场景之前重置fig.scene.disable_render = False
。
如何在合理的等待时间内用mayavi显示我的数据?
一般原则是,vtk对象有很多开销,因此为了呈现性能,您希望将尽可能多的东西打包到一个对象中。当您调用mlab便利函数(如points3d
)时,它会创建一个新的vtk对象来处理该数据。因此,迭代并创建数千个单个点作为vtk对象是一个非常糟糕的主意。
暂时禁用渲染的技巧就像在另一个问题中一样——"正确"的方法是使用一个VTK对象来保存所有不同的点。
要将不同的点设置为不同的颜色,请给vtk对象一个标量值。
x, y, z = np.random.random ((3100))some_data = mlab.points3d (x, y, z, colormap = '酷')some_data.mlab_source.dataset.point_data.scalars = np.random.random ((100)
只有当你能在颜色映射中充分表示你需要的颜色值时,这才有效。如果您需要有限数量的颜色或有限数量的简单颜色映射,这很容易,但如果您需要完全任意的颜色,则非常困难。