2017年05月18日

ボリュームデータのファイルフォーマットについてのメモ

ボリュームデータの表示ができるものとして、前回のKVSの他にもParaView[1]やVTK[2]などがあります。これらで使われているファイルフォーマットの一部についてメモしておきます。

ボリュームデータには、構造格子(格子状にデータが並んでいる)ものと、非構造格子(四面体の組合せなどデータ点が揃っていない)ものがあります。今回はとりあえず取り扱いやすい構造格子のデータについてです。

AVS FLD
サイバネットシステム株式会社のAVS[3]という可視化ソフトウェアで用いられているファイルフォーマットの一つです。最初に簡単なヘッダ情報が来て後はデータになります。詳細は参考サイト[4]を見てもらえればと思います。
  # AVS field file
  ndim = 3
  dim1 = 120
  dim2 = 120
  dim3 = 34
  nspace = 3
  veclen = 1
  data = byte
  field = uniform
  ※以下バイナリデータは省略
上記は3次元の構造格子120x120x34で、veclenが1なので1個のスカラー量をbyteで持っている例になります。拡張子は.fldです。

VTK
VTKにはレガシータイプとXMLを使ったファイルフォーマットがあるみたいです。まずはレガシータイプです。こちらはAVS FLDに似ている感じでしょうか。参考サイト[5]はchar型でしたが、unsigned_charに変更しています。
  # vtk DataFile Version 2.0
  Volume example
  ASCII
  DATASET STRUCTURED_POINTS
  DIMENSIONS 120 120 34
  ASPECT_RATIO 1 1 1
  ORIGIN 0 0 0
  POINT_DATA 489600
  SCALARS volume_scalars unsigned_char 1
  LOOKUP_TABLE default
  0 0 0 0 ...
こちらも構造格子120x120x34=489600点で、unsigned_char型のASCIIデータが並んでいます。たぶんバイナリ形式もあるんだとは思います。Originが原点(最小座標?)で、ASPECT_RATIOは各点の間隔でしょうか(未確認)。拡張子は.vtkです。

ParaViewではXMLの方に対応しているみたいですので、そちらのファイルフォーマットについてメモしておきます。
VTKでは、データタイプでファイルの拡張子が変わるようです。

ImageData (.vti) - Serial vtkImageData (structured).
PolyData (.vtp) - Serial vtkPolyData (unstructured).
RectilinearGrid (.vtr) - Serial vtkRectilinearGrid (structured).
StructuredGrid (.vts) - Serial vtkStructuredGrid (structured).
UnstructuredGrid (.vtu) - Serial vtkUnstructuredGrid (unstructured).
PImageData (.pvti) - Parallel vtkImageData (structured).
PPolyData (.pvtp) - Parallel vtkPolyData (unstructured).
PRectilinearGrid (.pvtr) - Parallel vtkRectilinearGrid (structured).
PStructuredGrid (.pvts) - Parallel vtkStructuredGrid (structured).
PUnstructuredGrid (.pvtu) - Parallel vtkUnstructuredGrid (unstructured).

今回は構造格子のデータですので、StructuredGrid (.vts)になります。こちらはCellとかがよくわかりませんが、参考サイト[6]のサンプルを使う分には問題なさそうです。PointDataのDataArrayにスカラー値、PointsのnDataArrayに3次元の点座標を羅列すればよさそうです。ただ、PointsのDataArrayに全ての座標を指定しないといけないのかどうかなどよくわかっていません。ちゃんと仕様書[7]はあるのですがよく読んでいませんので。
  <?xml version="1.0"?>
  <VTKFile type="StructuredGrid" version="0.1" byte_order="LittleEndian" compressor="vtkZLibDataCompressor">
    <StructuredGrid WholeExtent="0 1 0 2 0 3">
    <Piece Extent="0 1 0 2 0 3">
      <PointData Scalars="Scalars_">
        <DataArray type="Int16" Name="Scalars_" format="ascii" RangeMin="0" RangeMax="6">
          0 1 1 2 2 3
          1 2 2 3 3 4
          2 3 3 4 4 5
          3 4 4 5 5 6
        </DataArray>
      </PointData>
      <CellData>
      </CellData>
      <Points>
        <DataArray type="Float32" Name="Array 0x85412e8" NumberOfComponents="3" format="ascii" RangeMin="0" RangeMax="3.7416573868">
          0 0 0 1 0 0
          0 1 0 1 1 0
          0 2 0 1 2 0
          0 0 1 1 0 1
          0 1 1 1 1 1
          0 2 1 1 2 1
          0 0 2 1 0 2
          0 1 2 1 1 2
          0 2 2 1 2 2
          0 0 3 1 0 3
          0 1 3 1 1 3
          0 2 3 1 2 3
        </DataArray>
      </Points>
    </Piece>
    </StructuredGrid>
  </VTKFile>
こちらは2×3×4=24点のデータです。非構造格子の場合はCellDataで形状の指定なども必要なようです。

実行結果

lobster_paraview.png

lobster.fldをlobster.vtsに変換してParaViewで表示してみました。この辺りのファイル変換はおそらく自分で書かなくてもVTK使えばできると思います。

[1] http://www.paraview.org/
[2] http://www.vtk.org/
[3] http://www.cybernet.co.jp/avs/
[4] http://tsubame.gsic.titech.ac.jp/docs/guides/isv-apps/avs_express/html/avs_express5.html
[5] http://stackoverflow.com/questions/28323373/vtk-structured-point-file
[6] http://public.kitware.com/pipermail/paraview/2007-September/005781.html
[7] http://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf

web拍手 by FC2
posted by シンドラー at 18:20 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする