7

mayavi.mlab用来显示从图像中提取的 3D 数据。数据如下:

  1. 3D 相机参数为围绕相机中心方向的3线x, y, x,通常用于 20 台左右的相机mlab.plot3d()
  2. 空间中的 3D 彩色点,用于4000使用mlab.points3d().

对于(1),我有一个功能可以分别为每个相机绘制每条线。如果我是正确的,所有这些行都将添加到当前场景的 mayavi 管道中。在mlab.show()场景中渲染所有这些线条大约需要 10 秒。

对于(2)我找不到一种方法一次绘制所有点,每个点都有不同的颜色,所以目前我用mlab.points3d(x,y,z, color = color). 我已经更新等待这个例程完成,因为它需要很长时间。如果我一次用相同的颜色绘制所有点,大约需要 2 秒。

在显示场景之前,我已经尝试过启动我的脚本fig.scene.disable_render = True并重置fig.scene.disable_render = Falsemlab.show()

如何在合理的等待时间内使用 mayavi 显示我的数据?

4

1 回答 1

2

一般原则是 vtk 对象有很多开销,因此为了渲染性能,您希望将尽可能多的东西打包到一个对象中。当您调用 mlab 之类的便利函数时,points3d它会创建一个新的 vtk 对象来处理该数据。因此迭代和创建数千个单点作为 vtk 对象是一个非常糟糕的主意。

像在另一个问题中那样暂时禁用渲染的技巧——“正确”的做法是拥有一个包含所有不同点的 VTK 对象。

要将不同的点设置为不同的颜色,请为 vtk 对象提供标量值。

x,y,z=np.random.random((3,100)) some_data=mlab.points3d(x,y,z,colormap='cool') some_data.mlab_source.dataset.point_data.scalars=np.random.random( (100,))

仅当您可以在颜色图中充分表示所需的颜色值时,这才有效。如果您需要少量有限数量的颜色或少量有限数量的简单颜色图,这很容易,但如果您需要完全任意的颜色,则非常困难。

于 2013-06-27T14:42:32.007 回答