InVesaliusで膝のMRI画像から骨の3Dモデルを作ってみる実験

記事内に広告が含まれています。

膝の治療過程で撮影したMRI画像から、簡単な3Dモデルを生成してみた。Windows環境でInVesaliusという無料ソフトを使い、画像列からサーフェスモデルを作成。その後、Meshmixerや3dsMaxを使ってメッシュを加工し、レンダリングまで試した。

大ざっぱな骨の抽出はできたが、3Dプリンターで出力するにしてもまだ表面が荒い。ソフトの使い方が悪いのか、そもそもMRI画像では解像度が足りないのか、原因はよくわからなかった。

WindowsならInVesalius

MRIで撮影したDICOM画像から3Dモデルを生成するツールとして、OsiriXが挙げられる(オシリックスではなくオザイリクスと読む)。医療分野へのVR導入に取り組む、杉本真樹先生が詳しい解説書『OsiriX画像処理パーフェクトガイド』を出版している。

OxiriXはビューアからボリュームレンダリング、STLの出力までこなす多機能ソフト。無料で使えるのはありがたいが、残念ながら対応OSはMacのみ。

Windows環境で使える医療用モデリングソフトを探したところ、有料の商用ツールはいくつか見つかった。OsiriXのように無料版があるソフトとしては、InVesaliusというものがメジャーなようだ。こちらはMacやLinuxにも対応しており、各OS用の最新バージョンはここからダウンロードできる。

作業の流れ

InVesaliusはメニューが日本語化されているのがありがたい。とりあえず左上のメニューから「1. データ読み込み」の中の「医用画像を読み込む…」をクリックし、フォルダを選択してMRIの画像列を読み込む。このあたりの操作感はSonicDICOMのようなビューアーと共通だ。

InVesaliusのデータ読み込み画面

適当な画像を選んで開くとソフトが固まったようになるが、ウィンドウのサイズを変えたりして画面をリフレッシュすると元に戻る。ここからマスクを設定して3Dサーフェスを生成し、STL等の3次元データ形式で書き出すのが作業の流れになる。

初期状態では「骨」を対象にプリセットされたマスクが適用されている。そのまま左列「2. ROIの選択」パネル内にある「サーフェスを作成」を押すと、しばらく計算時間がかかってサーフェスモデルが生成される。

InVesaliusのサーフェス生成結果

計算結果は、骨というより皮膚までモデル化された感じになった。そのまま「4. データ書き出し」で「サーフェスを書き出す」を選ぶと外部出力できる。ファイル形式はSTLのほか、OBJやPLYも選べる。

invesalius
STLで書き出したデータをMeshmixerというソフトで開くと、このような形になる。とりあえずメッシュモデルは得られたので、あとはいかようにでも編集できる。

Meshmixser表示画面

膝だけでも頂点数は約37万、ポリゴン数は約75万とそこそこ重い。編集・レンダリング用には最初に軽量化しておいが方がよさそうだ。表面のがたつきも気になるので、スムージングもかけておきたい。

マスクの塗り分け方法

InVesaliusにおける作業の肝は、適切なサーフェスを生成するためのマスク設定にある。定義済みのしきい値として、骨以外にも脂肪や筋組織・軟部組織など多数プリセットされている。

InVesaliusのマスクプリセット

英語のユーザーガイドによると、各組織のしきい値の定義は以下のようなかたち。

InVesaliusのマスク設定値

しかしデフォルトの「骨」で皮膚までモデル化されてしまったように、この設定値はあてにならない。脂肪を選ぶと画面全体が塗りつぶされてしまうし、筋組織を選ぶと膝以外の空白領域が選択され反転してしまう。

InVesaliusのマスク設定

定義済みの数値にこだわらず、「カスタム」でしきい値の上下をスライドさせつつ塗り分けした方が正確だ。しかしそれでも「骨だけ」「筋肉だけ」「軟骨や半月板だけ」抽出することはできない。あくまで画像の濃淡でしか判定していないので、似たような明るさの組織が一緒に塗られてしまう。

ウォーターシェッドを活用

正確に塗り分けるには、しきい値によるマスク設定は無視して、ウォーターシェッドを使った方が早い。上部のメニューからは、ツール>領域分割>リージョングローイングなどさらに高度な手法も選べる。

ウォーターシェッドは前景/背景になる部分を手動で選んで、自動でマスクを塗り分ける方法だ。左のパネルから、ブラシサイズや操作(前景、背景、消去)を選択できる。

InVesaliusのマスク編集機能

詳細設定でMethodやConnectivityという設定項目もあるが、特にいじらなくても初期値でうまくいく。「WWとWLを考慮」というオプションは、マニュアルによると「ウィンドウの幅とレベルを考慮する」という意味らしく、有効化した方が精度は上がると書いてある。

上部メニューの「WL調整」を選ぶと、画面をドラッグして画像のコントラストを調整できる。いろいろいじってみたが、ウォーターシェッドの計算精度にそれほど影響することはなかった。

前景/背景に相当する領域を選びながら、水平・垂直断面にたいして1枚ずつ塗り分けを行う。次に「ウォーターシェッドを3Dに拡張」ボタンを押して、他の断面にもマスクを適用する。これでほぼ目的の組織が立体的に塗り分けられ、あとは「手動で編集」で気になるところをレタッチすれば済む。

InVesaliusのサーフェス生成結果

とりあえず大ざっぱに作業して膝の骨だけ抽出してみたが、表面はガタガタでいまいちなクオリティーだ。

表示画像が荒い問題

1時間くらい粘って手動でマスク編集したベストな状態がこちら。なんとなく大腿骨、脛骨、膝蓋骨、腓骨の主要部分は判別できるようになった。しかし相変わらず表面が非連続なのは気になる。

InVesaliusのサーフェイス生成

原因不明だが、InVesaliusの作業画面で、軸位断と冠状断の画像だけやけに解像度が荒くなっている。マスク作成もこの画像を参照して行うので、サーフェスの粗さは単純にこれが原因でないかと思う。いろいろ設定をいじったり、読み込む画像列を変えたりしたが、状況は変わらなかった。

ボリュームレンダリングの場合

InVesaliusにはサーフェス作成とは別に、レイキャスティングによるボリュームレンダリング機能も実装されている。右下のウィンドウ右端にあるアイコンをクリックすると、様々な組織を抽出して可視化できる。

InVesaliusのボリュームレンダリングオプション

切り分けはアバウトだが、画質はこちらの方がだいぶよい。さらにツールから「切断面」を選ぶと、任意の位置・角度でカットして断面を表示できる。

InVesaliusのボリュームレンダリング結果

3種の断面画像を配置したり、3D表示もできたりするので、なにげに高機能だ。雰囲気だけ楽しむなら、サーフェス作成せずともボリュームレンダリングで十分といえる。

Meshmixerでモデルを軽量化

InVesaliusから書き出したSTLファイルは、AutodeskのMeshmixerという別のフリーソフトで加工するのが定番だ。こちらは3Dプリンターで出力するためにポリゴン編集するソフトだが、生データを軽量化する中間的なツールとしても使える。

Meshmixerの表示画面

メッシュを解析したり、穴埋めしたりする補助機能は充実しているようだ。

Meshmixerの解析画面

Meshmixerは無料ツールだが、使いこなせばいろいろ編集できそうに思う。ただし今回は元データが荒いので、それ以上にメッシュの品質を上げることはできない。

3dsMaxでレンダリング

InVesaliusから出力した骨モデルはそこまで重いポリゴンでもない。OBJで書き出して、そのまま汎用ソフトの3dsMaxに読み込んでみた。適当にポリゴン数を減らしてスムージングをかけ、骨っぽいマテリアルを設定するとこんな感じになる。

3dsMaxの編集画面

InVesaliusの出力モデルからがたつきを取れば、だいぶ骨らしく見える。しかし期待したほどの出来栄えではない。3Dプリンターで造形するにしても、もっと精度を上げたいところだ。

3dsMaxのレンダリング画面

そもそも医療データから骨や組織を3D化する場合は、MRIでなくCT画像を用いるのが主流と思われる。解像度が足りないのはInVesaliusの問題でなく、元データがMRIだからなのかもしれない。

原因は不明だが、今回の方法ではせいぜいがんばってもラフな骨モデルしか得られなかった。パラメーターを調整すれば、表面の皮膚も抽出できると思う。ただしMRI画像とInVesaliusの組み合わせで、半月板や軟骨といった軟部組織をモデル化するのはかなり難しい。