14

博士課程の学生としての私の日々の仕事では、地質モデリングを行っています。余暇には(主に楽しみのために)Pythonを学び、3Dジオセルラーモデルを表示するための簡単なプログラムを作成しようとしています。

地質モデルhttp://img710.imageshack.us/img710/6503/sgems.png ジオモデル2

ジオセルラーモデルは、すべてのグリッドセルに何らかの値がある3Dグリッドです(右の図を参照)。ですから、右側の写真のように、視聴者が3Dグリッドモデルを表示できるようにしたいと思います。また、モデルのx、y、z方向の断面を表示できるようにしたいと思います(これは左の図に示されています)。

また、モデルが3つの軸すべてを中心に回転し、ズームインおよびズームアウトできるようにしたいと思います。

私はいくつかの予備調査(主にここ)を行いましたが、VisVisとVTKが2つの潜在的なオプションのようです。メインGUIにwxPythonを使用しようとしていますが、私が知る限り、両方のオプションがwxPythonで機能するようです。

質問:

  1. VisVisとVTKが私が望むもののために働くと思うと私が言うとき、私は正しいですか?一方が他方よりも好ましいですか?

  2. これらの2つのオプションのどちらを実装するのが最も簡単でしょうか?

  3. 私も考慮すべき別のオプションはありますか?

私はPythonに不慣れで、wxPythonに非常に慣れていないことを覚えておいてください。

4

5 に答える 5

13

探しているものは、ボクセルの視覚化、ボクセル グリッドなどと呼ばれます。私はMayaViを真剣に検討します(使用したことはありませんが、監視しています)、ここに非常に近いものがあるようです.

MayaVi と同じように VTK の上に構築されたParaviewも良い選択肢かもしれません。

視覚化のために VTK に直行するのは難しいと思います。それはレベルが低すぎて、おそらくイライラするだけです。とはいえ、MayaVi/Paraview で開くには、データを VTK データセットとして保存する必要があります。難しいことではありません。適切な構造 (vtkGrid、vtkUnstructedGrid、...) を選択するだけです。

于 2011-10-08T08:23:20.357 に答える
10

私の場合、PythonのVTKバインディングを直接使用することを選択しました。正直なところ、ドキュメントが優れていることもあり、VTKを使用する方がMayaviよりも簡単であることがわかりました(多くの例があります!)。マヤビは仕事を成し遂げるために私の途中でもう1つの複雑さの層を追加しているように感じました。しかし、そのtom10通りです。開始した後は、Mayaviを使用する方が簡単な場合があります。

それとは別に、MayaviはTVTKと呼ばれるライブラリを提供しています。これはVTKバインディングのよりPython的なバージョンですが、依存関係の数を最小限に抑えるために、最終的にプレーンVTKを選択しました。しかし、あなたはそれをチェックする必要があります。おそらくそれはあなたが探しているものになるでしょう。

最初は、このチュートリアルが非常に役に立ちました。Pythonについてではなく、tclについてですが、例の翻訳は簡単で、vtkの動作を理解するのに役立ちます。

また、開始するために、 VTKWikiで例を確認できます。それらが十分でない場合は、いつでもC ++の例を確認して、Pythonに変換できます。メソッドとプロパティの名前は同じであるため、変換は難しくありません。その場合は、wikiに例を追加することをお勧めします。ソースにはさらに多くの例があります。

VTKを学習していると、Ipythonが素晴らしいことを(再)発見できます!VTK名前空間全体をすぐに使えるようにすることは非常に役立ちます。

より具体的なヘルプが必要な場合は、vtk-usersメーリングリストが非常にアクティブです。最後に、VTKに関する本があり、それらのいくつかは無料です!しかし、それらはPythonに関するものではありません。

wxPythonとVTKを一緒に試したことはありませんが、それはwxPythonよりもPyQt4の方が好きだからです。AFAIKは、VTKとどちらのライブラリとの統合にも問題はありません。いずれにせよ、GUIの作成に時間を費やす前に、ParaViewを徹底的にチェックしてください。それはおそらくあなたが望むことをすでに行っています、そしてそうでなければ、それはPythonスクリプト可能でもあります!(私はそれをチェックしたことはありませんが)。

于 2011-10-10T17:29:03.007 に答える
7

これを行うためにMayavi のmlabインターフェースを使用する簡単な例として (地質データも含めて!):

from mayavi import mlab
import geoprobe

vol = geoprobe.volume('Volumes/example.vol')
data = vol.load()  #"data" here is just a 3D numpy array of uint8's

fig = mlab.figure(bgcolor=(1., 1., 1.), fgcolor=(0., 0., 0.), size=(800,800))
grid = mlab.pipeline.scalar_field(data)

# Have things display in kilometers with no vertical exxageration
# Each voxel actually represents a 12.5 by 18.5 by 5 meter volume.
grid.spacing = [vol.dxW / 1000, vol.dyW / 1000, vol.dz / 1000]

# Now, let's display a few cut planes. These are interactive, and are set up to 
# be dragged around through the volume. If you'd prefer non-interactive cut 
# planes, have a look at mlab.pipeline.scalar_cut_plane instead.
orientations = ['x', 'x', 'y', 'z']
starting_positions = [vol.nx//4, 3*vol.nx//4, vol.ny//2, vol.nz]
for orientation, start_pos in zip(orientations, starting_positions):
    plane = mlab.pipeline.image_plane_widget(grid, colormap='gray',
            plane_orientation='%s_axes' % orientation, slice_index=start_pos)

    # High values should be black, low values should be white...
    plane.module_manager.scalar_lut_manager.reverse_lut = True

mlab.show()

ここに画像の説明を入力 (データとデータ形式処理コード (geoprobeモジュール) は、ここから入手できます: http://code.google.com/p/python-geoprobe/ )

長い目で見れば、VTK を学習する方が優れていることに同意しますが、Mayavi を使用するとすぐに使い始めることができます。大きな利点は、データを VTK 形式に変換するために面倒なことをする必要がないことです。TVTK と Mayavi では、numpy 配列を直接使用できます。

于 2011-10-13T04:11:14.780 に答える
3

VTK/MayaVi の世界に入る簡単な方法が必要な場合は (eudoxos の優れた回答を参照)、mlab API を参照してください。これにより、基本的なボリューム ビジュアライゼーションに matplotlib のような利便性がもたらされますが、基礎となるプラットフォームをさらに深く掘り下げる必要性をまだ見つけていません。

于 2011-10-08T14:13:31.233 に答える
1

vpython は mayavi よりも使いやすいですが、機能が少なくなっています。

http://vpython.org/contents/bounce_example.html

于 2011-10-08T12:18:12.493 に答える