FC2ブログ

MRIConvert 使って DICOM から TIFF に変換

2017-10-13 :  PCクリニック
前々回(2017-10-09)の記事「MRIConvert files / mcverter」で書いた如く、
  ・・・・・
  ・・・・・
  結論としては、<紙>的には
  .dcmファイルを、.niiファイルに変換するのなら、
  “MRIConvert”のmcverter.exeで決まりでしょうか。
  ・・・・・
  ・・・・・

と云うことで、

.dcmファイルを入力して、
.niiファイル経由で、
16bit .tifファイルに変換する。

条件としては:

入力 DICOM 画像は、
16ビットで、リトルエンディアン(little-endian)
そして、(多分)無圧縮

画像サイズは、(多分)任意
そして、カレントに「mcverter.exe」と、
対象の“.dcm”ファイルを置く。


テストデータとして、例の 'x.dcm' を入力し、
結果は 'x.tif' とする。
中間に 'x.nii' を作る。

そう云うことで、出来たコードは:
----- dcm_nii_tiff16.gsl -----
in_DICOM, out_TIFF = 'x.dcm', 'x.tif'
tmpF, tmp_nii = 'x', 'x.nii'
--============================================
require'pl'; require'cv2_a'

Byte = |x| ffi.cast( 'uint8_t*', x )
uint16 = |x| ffi.cast( 'uint16_t*', x )

ppp = string.format( '/o . /F %s /f nifti /n %s', tmpF, in_DICOM )
os.execute( 'mcverter.exe ' .. ppp )

_=path.currentdir() -- 'pl' で 'lfs' を使う為の準備
SZ = lfs.attributes( tmp_nii, 'size' ) -- ファイルサイズ

IN = io.open( tmp_nii, 'rb' )
ptr = Byte( IN:read(SZ) ); IN:close()

H = uint16( ptr ); xx, yy = H[21], H[22]

-------------------------------------------
AT = uint16( ptr + SZ - xx*yy*2 )

require'cv2_a'
tif = cv2.cvCreateMat( yy, xx, CV_16UC1 )
BT = ffi.cast( 'uint16_t*', tif.Byte )

for n=0,xx*yy-1 do
BT[n] = AT[n] + 0x8000 --------------
end

cv2.cvSaveImage( out_TIFF , tif, 0 )

file.delete( tmp_nii )
file.delete( tmpF..'_info.txt' )
と云うことで良さそう。

備考:
(1) コードの途中で:
   _=path.currentdir() -- 'pl' で 'lfs' を使う為の準備
  とあるが、・・・
  コメントの通り、
  requireするのは、plだけだが、
  LFSを使いたい為、pl.pathを(ダミーで)使う。
  ( pl.path モジュールは、LFS を使っている )

(2) 配列 AT は、
  読み込んだファイルの後ろから必要数としている。

(3) 画像データ値は、
  符号付の -2048~1965 じゃなくて、
  符号無しの 30720~34733 となる。


本日はここまで。


DICOM 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170925
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

人気blog Ranking/おきてがみ


おきてがみ
最新記事
カレンダー
11 | 2018/12 | 01
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク