statgenetJimu / ShapeMove

ShapeMoveAnalysis Project
1 stars 2 forks source link

mhdファイル形式がよいらしい #18

Open statgenetJimu opened 8 years ago

statgenetJimu commented 8 years ago

ITK、VTKは任意次元のファイルをhoge.mhd, hoge.rawの2ファイルペアで保持できる。mhdはメタ情報を持ち、rawデータは画像のピクセル・ボクセルデータを持つらしい。 画像ファイルフォーマットのうち、Tiff形式は、シンプルな作りでpythonのパーサなどもあるので nd2ファイル→Tiffの複数ファイル→tiff形式パーサで、rawファイルを作る。mhdファイルも作る→ITK,VTK,MITKが読み込み可能 このあたりの調査 https://github.com/pearu/pylibtiff  http://jprogramer.com/libtiffcate/3188 http://www.itk.org/Wiki/ITK/MetaIO/Documentation

statgenetJimu commented 8 years ago

姑息的4Dファイル操作 on ITK/VTK/MITK

2Dのtifファイルを複数枚ITKに取り込むことはできる。それをmhd形式で出力することができる。 今、4Dデータ(深さ次元と時間次元との2次元を2D画像に加えたもの)がtifファイルとして与えられているとする。 それを時刻ごとに3D扱いしてmhdファイルで保存することができる。 mhd形式だと、メタ情報ファイルと生ピクセル値ファイルとの2ファイルペアで出力されるが、この生ピクセルファイルを cat hoge2.raw >> hoge1.raw のようにして、コンカテネートすれば、4Dのmhd形式のraw ファイルができる。 あとは、hoge.mhdの方を4次元に書きなおせばよい。この形式は単純なので、ひとまず手書きでやっていても、特に問題ない。 そのようにして作った4Dのmhdファイルが、 https://github.com/statgenetJimu/ShapeMove/tree/master/Data/seriesImage の out3.mhd と out3.raw のペアファイル

statgenetJimu commented 8 years ago

非圧縮シリアルファイルをテキストファイルで指定して4次元(3次元x複数枚)にする。 https://github.com/statgenetJimu/ShapeMove/tree/master/Data/seriesImage/DICOM_Listed  の3つのrawファイルを 同ディレクトリ内のmhdファイルにあるように、3ファイルを読み込みファイル指定して、読み込ませる(MITKにファイルOPEN指定すれば良い)

mhdファイルの中身

ObjectType = Image NDims = 4 BinaryData = True BinaryDataByteOrderMSB = False CompressedData = False TransformMatrix = 0 1 0 0 0 0 -1 0 -1 0 0 0 0 0 0 1 Offset = -22.4638 -240.362 125 0 CenterOfRotation = 0 0 0 0 AnatomicalOrientation = ASL ElementSpacing = 0.488281 0.488281 10.4 3 DimSize = 512 512 9 3 ElementType = MET_UCHAR ElementDataFile = LIST out2.raw out2_2.raw out2_3.raw


statgenetJimu commented 8 years ago

ただし、mhd読み込みは、tiffなどのヘッダーありのファイルの場合は二次元画像ファイルをスタックして3次元にするのには対応するも、二次元画像ファイルを深さx時間でスタックしてそれを4次元にするのには対応していないらしい。 それに対応しているのは画像情報がヘッダなしのraw形式の場合らしい。 http://public.kitware.com/pipermail/insight-developers/2002-September/003481.html  MetaIOを利用してのハンドリングはここまでが限界か・・・

statgenetJimu commented 8 years ago

tiffのままではだめでraw形式にするのであれば、libtiff ライブラリのtiff2raw.cを使えばよいらしい。 http://sipi.usc.edu/database/tiff2raw.c

ImageMagickのconversion関数でできそうだったが、やってみたら、とりあえず失敗… C:\Users\ryamada\Desktop>convert test.tif -depth 8 test.raw convert.exe: no encode delegate for this image format `RAW' @ warning/constitute .c/WriteImage/1171.

TetsushiNakao commented 8 years ago

mhdファイル読み込みですが、ちょっと検索した感じではGIMIASのMITK pluginを導入すれば読み込めるように書いてあると思うのですが、どうでしょうか。ちょっとタスクが多くなってきたので自分では試していないのですが。 http://wiki.gimias.org/mediawiki/MITK_Plugin

statgenetJimu commented 8 years ago

はい。MITKは(少なくとも4次元の)mhdを読み込めます。このgithubのWikiの"Rで3D映画(jpegスライス画像)を作る"を参考に適当な4d-mhdファイルを作ってMITKworkbenchで読み込めます。 なので同WIKIのNIKONのデータを扱う、と、VolumeFromSlices(ITKのサンプルプログラム)で3D単位でmhd形式にする、とをデータ処理フローとして作れば(誰かが作ってくれれば)、ひとまず、MITK上の画像オブジェクトに対する処理プラグインに集中できる段階には至っています。どうぞよろしくお願いします。