MRIConvert 使って DICOM から TIFF に変換

2017-10-13 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前々回(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
関連記事
スポンサーサイト

コメントの投稿

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

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
10 | 2017/11 | 12
- - - 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 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

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

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


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

Google Analytics
ブックマーク