7

mayavi.mlab画像から抽出した3Dデータを表示するために使用しています。データは次のとおりです。

  1. 3D カメラ パラメータは、カメラの中心の周りの方向3の線として表示されます。通常、 を使用する約 20 台のカメラの場合です。x, y, xmlab.plot3d()
  2. 4000を使用した約ポイントの空間内の 3D カラー ポイント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 オブジェクトには多くのオーバーヘッドがあるため、パフォーマンスをレンダリングするために、できるだけ多くのものを 1 つのオブジェクトに詰め込みたいということです。mlab のような便利な関数を呼び出すとpoints3d、そのデータを処理する新しい vtk オブジェクトが作成されます。したがって、何千もの単一ポイントを vtk オブジェクトとして反復して作成することは、非常に悪い考えです。

他の質問のようにレンダリングを一時的に無効にするトリック-それを行う「正しい」方法は、さまざまなポイントをすべて保持する1つの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 に答える