我正在使用mayavi.mlab
来显示从图像中提取的3D数据。数据如下:
3
方向的x, y, x
线的3D相机参数,通常使用mlab.plot3d()
约20台相机。4000
在空格中为约mlab.points3d()
点制作3D彩色点。对于(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显示我的数据?
答案 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,))
仅当您能够充分表示色彩映射中所需的颜色值时,此方法才有效。如果您需要少量有限数量的颜色或有限数量的简单色图,这很容易,但如果您需要完全任意的颜色则非常困难。