2011-10-08 21 views
14

私の一日の博士課程の仕事では、地質学的モデリングを行います。私は空き時間に(主に楽しいため)、Pythonを勉強していて、3D地球細胞モデルを見るための簡単なプログラムを書こうとしています。PythonとwxPythonによる3D/4Dグラフィックス?

geological model http://img710.imageshack.us/img710/6503/sgems.pnggeo model2 http://img638.imageshack.us/img638/529/1sblockmodel.jpg

geocellularモデル(右図に示すように)すべてのグリッドセルは、いくつかの値を有するだけで3Dグリッドです。だから、私はビューアーが右側の写真のような3Dグリッドモデルを表示できるようにしたいと思います。同様に、モデルのx、y、z方向の断面を表示することもできます(これは左の図に示されています)。

また、モデルを3軸すべてを回転させてズームイン/ズームアウトできるようにしたいと思います。

予備調査(主にhere)を行ったところ、VisVisとVTKの2つの可能性が考えられます。私はメインのGUIのためのwxPythonを使用しようとしていると私はそれができる限りwxPythonで両方のオプションが動作するように見えます。

質問:

  1. アム私はVisVisとVTKは私が欲しいもののために働くと思うことを言う権利I?どちらかというともう片方よりも好ましいのですか?

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

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

私はPythonに慣れていて、wxPythonでは新しくなっていることに注意してください。

答えて

13

お探しの商品は、voxel視覚化、ボクセルグリッドなどと呼ばれています。私は真剣に考えてMayaVi(それを使用したことはありませんが、私はそれに目を向ける)、それは非常に近い何かを持っているようですhere

Paraview(MayaViのようにVTKの上に構築されています)も良い選択肢です。

私は視覚化が難しいためVTKにまっすぐ行くと思う、それはあまりにも低レベルであり、恐らくあなたをちょうど挫折させるでしょう。つまり、にデータをVTKデータセットとして保存し、MayaVi/Paraviewで開くことができます。それは困難ではない、あなたはちょうど正しい構造(vtkGrid、vtkUnstructedGrid、...)を選択する必要があります。

3

あなたは(eudoxos'罰金の答えを参照)VTK/MayaViの世界に入るの簡単な方法をしたい場合は、それにmlab APIを見てください。これによりmatplotlib(convenience)が基本的なボリュームの視覚化になりました。基本的なプラットフォームを深く理解する必要はまだありません。

+0

mlab URL /リンクが壊れています – DevPlayer

10

私の場合、私はPythonのVTKバインディングを直接使用することを選択しました。正直言って私はMayaviよりもVTKを使うほうが簡単だと分かりました。なぜなら、ドキュメンテーションが良いからです(多くの例がたくさんあります)。Mayaviが仕事をやり遂げるために別の複雑なレイヤーを追加しているように感じました。しかし、tom10が正しいです。あなたが始めた後、Mayaviを使う方が簡単かもしれません。

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

最初は非常に役に立ちました。tutorial。これはPythonに関するものではなく、tclに関するものですが、例を翻訳するのは簡単ではなく、vtkの仕組みを理解するのに役立ちます。

また、ご利用になる前に、VTK Wikiで例を確認してください。十分でない場合は、いつでもC++ examplesを確認してPythonに変換することができます。メソッドとプロパティの名前が同じであるため、翻訳は難しくありません。そうした場合は、例をwikiに追加することをお勧めします。 sourceにはさらに多くの例があります。

VTKを学んでいるうちに、あなたはIpythonがすばらしいことを再発見します!あなたの指先にVTK名前空間全体を持つことは、大いに役立ちます。

さらに詳しいヘルプが必要な場合は、vtk-usersメーリングリストがかなりアクティブです。最後に、VTKについてはbooksがあり、some of themは無料です!彼らはPythonについてではありません。

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

+3

+1:私はVTKにまっすぐ簡単です。難しいことですが、MayaViとVTKの課題は、単純にVTKについて学ぶことであり、MayaViではもう一つの障壁です。後で、MayaViの使用を開始するのが簡単になりました。これは、面倒なことがいくつか単純化されるためです(ただし、概念化するのは難しくありません)。 – tom10

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

enter image description here (データおよびデータ・フォーマット処理コード(geoprobeモジュール)はhttp://code.google.com/p/python-geoprobe/です。

私は、VTKを学ぶことが長期的には優れていることに同意しますが、Mayaviを使ってすぐに起動して実行することができます。大きな利点は、データをVTK形式にするためにフープを飛び越える必要がないことです。 TVTKとMayaviは、あなたが直接numpy配列を使用することを可能にします。

+0

VTKファイルを作成するには、PyEVTK https://bitbucket.org/pauloh/pyevtkを使用することができます。さらに、手動でlecagy VTKファイルを作成するのは簡単です。 – pmav99

+0

mayaviの組み込み関数を使うこともできます。私は、視覚化のために別々のファイル形式を持たないことを好むだけです。 –

+0

説明:「手作業で」私はプログラム的に意味します。 – pmav99

関連する問題