放射線技術×データサイエンス

放射線技術×データサイエンス

診療放射線技師がPythonとRとImageJを使って色々します

「MRIシミュレータを用いた独習パルスシーケンス〔標準編〕」でMRIをシミュレーション

今年はブロガーになる!と宣言したものの,1月の記事以降何も書いてなかった・・・.COVID-19のせいで幸か不幸かいろいろ仕事が無くなって時間ができたのでやっと更新できました.今回はMRIネタを持ってきました.先日,非常に面白い本を買ったのです.

筑波大学の巨瀬先生が執筆された,MRIをPC上でシミュレーションするという新しい試みの本です.以前より,MRIシミュレータに関する研究をされておられ,その研究結果をこのような形で誰でも無料で使えるようにしていただいたようです.一応,磁気共鳴専門技術者である私は,このようなMRIに関するツールは大好きです.MRIの更なる理解,または後輩への教育等に使えれば良いなあと思い,このソフトを色々と試行錯誤して使ってみました.そこで今回はMRIをシミュレートするソフトBlochSolverの使用方法と雑感を報告したいと思います.

BlochSolverのダウンロード

まずは巨瀬先生の会社のホームページ上のソフトをダウンロードします.以下のURLからBlochSolver-CPUをダウンロードします.

http://mrisimulations.com/cpu_version_download/

同URLにマニュアルもありますので,これもダウンロードしておくべきでしょう.ダウンロード後,zipファイルを解凍しておきます.

スピンエコーをシミュレーション

ここから具体的にシミュレーションしていきたいと思います.まずは,コンベンショナルスピンエコーのTR・TEを変化させてシミュレーションしていきたいと思います.

1. TR・TEの設定

ダウンロードしたblochsolver-cpuフォルダ内に128_sequenceフォルダがあります.このフォルダの中にはマトリクスサイズ128×128のMRI画像のシーケンスシミュレーション用Pythonコードが書かれたファイルが入っています.今回はその中の2D_SpinEcho_128.seq.pyを編集してスピンエコーをシミュレーションします.
ちなみにこの.pyファイルはVScodeで編集することがマニュアル中で推奨されています.VScodeはエディタと言われるもので,プログラムを作るのに必要なものってイメージで大丈夫だと思います.VScode拡張機能を追加でき,非常に便利で,僕も研究でよく使っています.詳しいダウンロードの方法はググってください.
このファイルをVScodeで開いて5,6行目の箇所を以下の様に変更し保存します.

TR = 400.0e+3 # [us]
TE = 10.0e+3 # [us]

こうすることでTR=400ms,TE=10msのT1強調画像をシミュレーションできます.

2. command.txtの設定

TR・TEを設定した後,フォルダ内のcommand.txtファイルを編集します.この.txtファイルはwindowsであればメモ帳で開くことができます.VScodeでも開くことができます.このファイルは実際のシミュレーションをする際の様々な命令が書いてあります.以下のように書き直します.

set dim 128 128 128 
set subvoxel-dim 1 1 1
set actual-dim 256.0 256.0 256.0
set pd "./phantom/BrainPhantom_128/pd.flt"
set t1 "./phantom/BrainPhantom_128/t1.flt"
set t2 "./phantom/BrainPhantom_128/t2.flt"
set sequence "./128_sequence/2D_Spinecho_128.seq.py"
start
var PREFIX "./result/${DATE}/${SEQUENCE_NAME}-${SERIAL_ID}"
save complex "${PREFIX}-complex.flt"
quit

デフォルトから変更した箇所は1行目の
set dim 128 128 128
それと4~6行目の
set pd "./phantom/BrainPhantom_128/pd.flt"
set t1 "./phantom/BrainPhantom_128/t1.flt"
set t2 "./phantom/BrainPhantom_128/t2.flt"
最後に7行目の
set sequence "./128_sequence/2D_Spinecho_128.seq.py"
になります.1行目でマトリクスサイズを指定し,4~6行目で使用するファントムデータのプロトン密度値,T1値,T2値を指定しています.7行目で先ほど編集したシーケンスファイルを指定しています.

3. シミュレーションの実行

blochsolver.batをダブルクリックし実行します.以下の画像のような黒い画面が立ち上がり,処理が始まります. f:id:radmodel:20200310011908p:plain 処理が完了するとPress any key to continue . . .と表示されるのでなにかしらキーボードを押せば勝手にウィンドウが消え,処理が終わります.

4. 画像の確認

シミュレーションの結果をGUI_reconstruction_program//128//Reconstruction_and_display_for_128x128_2D_Cartesian.exeを使用して可視化します.このファイルを実行すると以下のウィンドウが立ち上がります.

f:id:radmodel:20200310012730p:plain

左上のopenを選択し,resultフォルダ内に先ほどシミュレーションした結果のファイルが保存されているので,これを選択します.

f:id:radmodel:20200310013141p:plain

シミュレーション画像ができました.一応専門家がこの画像を見た感想としては,画像の前後が逆になってる,側脳室付近に変なアーチファクトがでてる,T1強調画像というよりはプロトン密度強調画像っぽいといった感じです.一度画像を開くとresultフォルダ内に4つの画像が.fltファイルとしてそれぞれ別画像で保存されます.
なお作成された画像ファイルはImageJで開くことができるとマニュアルに書いてあり,実際にImageJではFile > Import > Raw...で以下の画像の設定で正しく読み込むことができました. f:id:radmodel:20200310014027p:plain

5. 別条件でシミュレーション

TR/TE=4000/100 msのT2強調画像も同様に作成し,ImageJで前後を変更してみました.

f:id:radmodel:20200310015255p:plain

T2強調画像はコントラストも大丈夫そうでアーチファクトも見られません.T1強調画像のコントラストやアーチファクトについては,また本を読んで原因を解明したいと思います.

2020.7.17追記

このアーチファクトについて巨瀬先生からコメントを頂きました。このアーチファクトは短いTRが原因のflash band artifactのようです。しかし,臨床ではTR=400 ms程度でこのようなアーチファクトはでない印象があります.このファントムのT1値が近似により求められているため(詳細は本を参照),もしかしたら生体とこのファントムのT1値が異なっていることに一因があるのかもしれません.もしくは臨床機ではflash band対策のためのシークエンスがデフォルトになっているのかも?

まとめ

MRIは撮像する人により画質が大きく変化するモダリティであり,良い画像を取得する為には知識と経験が必要です.BlochSolverを利用すれば,実際にMRI装置を使用せずとも経験値を積むことができます.臨床で働く診療放射線技師にも非常に有用なソフトであると思います.今回はスピンエコーだけ試しましたが,他のシーケンスもシミュレーションできるようです.これはかなりおもしろいことができそうな予感・・・.