2013-05-03 4 views
6

私はmayavi.mlabを使用して、画像から抽出した3Dデータを表示しています。通常mlab.plot3d()を用いて約20カメラのカメラ中心の周りx, y, x方向3線として大きいパイプラインを使用してmayaviシーンをより速くレンダリングする

  1. 3Dカメラパラメータを、次のようなデータです。
  2. 空間内の3D着色点約4000点を使用すると、mlab.points3d()を使用します。

(1)私はカメラごとにそれぞれのラインを別々に描く機能を持っています。私が正しいとすれば、これらすべての行は現在のシーンのmayaviパイプラインに追加されます。 mlab.show()に入ると、シーンはこれらの線をすべてレンダリングするのに約10秒かかります。

(2)各点を別の色で一度にプロットする方法が見つかりませんでしたので、現時点ではmlab.points3d(x,y,z, color = color)と繰り返します。私はこのルーチンが長くかかるのを待って、新しいことを待っています。一度にすべての点を同じ色でプロットすると、約2秒かかります。

mlab.show()でシーンを表示する前に、fig.scene.disable_render = Trueでスクリプトを開始し、fig.scene.disable_render = Falseをリセットしてみました。

mayaviでデータを妥当な待機時間内に表示するにはどうすればよいですか?

+0

私は同様の質問をした別の記事を見つけました[http://stackoverflow.com/questions/16364311/render-a-mayavi-scene-with-a-large-pipeline-faster](http://stackoverflow。 com/questions/12935231/annotating-many-points-with-text-in-mayavi-using-mlab)を使用してください。 私は調査結果を更新し、更新します。 –

+0

私は、(2)の解決策を見つけました。http://stackoverflow.com/questions/22253298/mayavi-points3d-with-different-size-and-colors –

答えて

1

一般的な原則は、vtkオブジェクトにはオーバーヘッドが多く、できるだけ多くのものを1つのオブジェクトにパックするパフォーマンスをレンダリングするためです。 points3dのようなmlabの便利な関数を呼び出すと、そのデータを扱う新しいvtkオブジェクトが作成されます。したがって、vtkオブジェクトとして数千の単一点を繰り返して作成することは非常に悪い考えです。

他の質問と同様にレンダリングを一時的に無効にするというトリックです。「正しい」方法は、すべての異なる点を保持する1つのVTKオブジェクトを持つことです。

異なる点を異なる色に設定するには、vtkオブジェクトにスカラー値を与えます。

X、Y、Z = np.random.random((3,100)) 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ありがとうございました。 –

関連する問題