2013-05-03 27 views
6

我使用mayavi.mlab來顯示從圖像中提取的3D數據。數據如下:用更快的流水線渲染mayavi場景

  1. 3D攝像機參數3線在圍繞照相機中心x, y, x方向,通常使用mlab.plot3d()約20攝像機。
  2. 在空間中使用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顯示我的數據?

+0

我發現了另一個類似問題的帖子[http://stackoverflow.com/questions/16364311/render-a-mayavi-scene-with-a-large-pipeline-faster](http://stackoverflow。 COM /問題/ 12935231 /註釋一對多點與 - 文本編寫Mayavi-使用,MLAB在-)。 我會調查並更新我的發現。 – 2013-05-04 08:04:25

+0

我找到了解決方案(2)在http://stackoverflow.com/questions/22253298/mayavi-points3d-with-different-size-and-colors – 2014-06-29 11:47:20

回答

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,))

這隻適用於如果您可以在色彩地圖中充分表示所需的顏色值。如果您需要有限數量的顏色或有限數量的簡單顏色映射,這很容易,但如果您需要完全隨意的顏色,則很困難。

+0

你能解釋我怎麼能夠「打包」多個Mayavi/TVTK將對象合併爲一個對象?我已經發布了關於這個問題在這裏http://stackoverflow.com/questions/22241499/how-to-join-connect-group-multiple-objects-in-mayavi2非常感謝。 – 2014-03-07 06:57:51