使用大型管道更快地渲染mayavi场景

时间:2013-05-03 17:13:29

标签: python mayavi

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

  1. 相机中心周围3方向的x, y, x线的3D相机参数,通常使用mlab.plot3d()约20台相机。
  2. 使用4000在空格中为约mlab.points3d()点制作3D彩色点。
  3. 对于(1)我有一个功能来分别为每个摄像机绘制每一行。如果我是正确的,所有这些行都被添加到当前场景的mayavi管道中。在mlab.show()时,场景需要大约10秒来渲染所有这些线。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

暂时禁用渲染的技巧与其他问题一样 - “正确”的方法是让一个VTK对象保存所有不同的点。

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

X,Y,Z = np.random.random((3100))    some_data = mlab.points3d(X,Y,Z,颜色表= '酷')    some_data.mlab_source.dataset.point_data.scalars = np.random.random((100,))

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