鎖骨を骨折して入院&手術を行った際にCTを撮影したので、そのデータを病院から取得して、3Dプリンタで印刷するまでの記録です。
※医療用途として正確な診断に使うものではなく、あくまで個人の趣味や好奇心の範囲で楽しむことを目的としています。
背景
病院で診察を行った際に医師が見せてくれるCTやMRIの3D画像、かっこいいですよね。これを、手元でも見たい!3Dで印刷して、自分の模型を作りたい!と誰しも一度は考えたことがあると思います。
そこで、3月に骨折し5月のGWに出かけられず自宅に引きこもりながら、折れた鎖骨で3Dプリンタと戯れながら、この記事を書いています。
今回のゴール
- 病院でもらったCTデータをPCで開く
- 骨だけをある程度きれいに抽出する
- Blenderなどで後加工しやすいSTL(3Dデータ)に書き出す
用意したもの・作業環境
- CTスキャンのデータ
- 取得方法は後述
- 3Dプリンタ(Bambu Lab A1 miniを使用)
- FDM(積層型)の一般的な3Dプリンタです。セール時は本体のみ3万円ほどで購入できます
- mac(M1 Pro)
- 3Dデータの編集のため、ぼちぼちスペックのいいマシンが必要です
-
3D Slicer(OSS)- 病院から受け取ったデータを3Dデータに変換するために利用
手順
0. 骨折する
省略
1. データの取得
治療の際に、医師から「なにか質問はありますか」と聞かれた際に、「CTスキャンの3Dデータが欲しいです!」と言ってみたところ、病院に対して「カルテ開示」を行うことで取得することが出来ると教えてもらえました。
「カルテ開示」は、患者本人が自分の診療情報の開示を求めるための手続きです。病院ごとに運用は異なるようですが、自分の場合は必要書類を記入し手数料(自分の場合はCD代込みで4,400円)を支払って、約1か月ほどでデータを受け取れました。
受け取ったデータとしてはCD1枚のみで、CDには病院の画像付きで名前や請求したデータの日付などが記載されていました。
CDの中身について
tree -L 1 -F
./
├── AUTORUN.INF*
├── DCMDT/
├── DICOMDIR*
├── IHE_PDI/
├── INDEX.HTM*
├── PDSV/
├── README.TXT*
└── START.BAT*
4 directories, 5 files
CDは上記の構成でした。
README.TXTには、データの概要や簡易的なデータの見かた、詳細なデータの見かたなど説明が記載されていました。続いてINDEX.HTMをブラウザで開いてみると、こちらは簡易的なデータのビュワーになっていて、画像ベースで日付やCT,レントゲンのデータが見られました。
こちらは操作しやすくできており、日付ごとのデータや角度を変えたCT画像、骨折した骨のみに絞った画像のコマ送りなどもあって、わりと見応えがあります。
PDSVというディレクトリには、Windowsの実行ファイル(.EXE)がはいっていましたが、こちらは未確認です。
DCMDT これが今回の主役です。DICOMデータと呼ばれるもので、CTやMRIなどの医療画像が保存されているデータになります。撮影条件や患者情報などもバイナリ形式で一緒にはいっています。
ディレクトリ全体での容量は369MBで、内部に連番が振られたバイナリファイルが507件ありました。
3Dで可視化する
CTデータは最初から3次元なデータではなく、体を輪切りにした断面ごと、X線の通しにくさの密度の情報の集まりです。
これに対してしきい値を設定して、ある値以上を骨と判断し、その部分の集合として3Dデータを構築します
CTデータから3次元データへの変換には3D Slicerを使います。
今回は macOS 版の Stable Release の最新(自分が試した時点では 5.10.0 )を使いました。
3D Slicerのインストール
- ダウンロードページ から macOS 版をダウンロード
- アプリを配置して起動
- 初回起動時にGatekeeperで止まったので、以下で無効にして突破
xattr -dr com.apple.quarantine /Applications/Slicer.app
DICOMデータを読み込む
Slicerを起動したら、DICOMデータのフォルダを読み込みます。
Import DICOM files- CTデータが入っているディレクトリ(
DCMDT)を選択してImport - 読み込まれたシリーズから対象を選ぶ(自分の名前をクリックしたら、その中を掘っていけました)
データの種類
CTを撮影した日付を開くと、Bone 2.5mm や Axi, Stnd 2.5mm など複数種類のデータがありました。触ってみた感触では以下のような違いがありました。
| データ名 | 予想 | データについて |
|---|---|---|
Bone 2.5mm |
骨向けに見やすくした再構成データっぽい。名前の通り、2.5mm刻みのデータと考えるとよさそう。 | 骨らしさは出るが、しきい値によっては表面がケバ立ちやすい。浮いたノイズも出やすかった。 |
Axi |
Axial 由来と思われる、対象部位付近を切り出した断面系のデータ。向きや角度も少し異なっていた。 | 対象周辺だけ見えて扱いやすく、同じしきい値でも比較的なめらかに見えた。ただ、データ自体が角度のついた状態で切り出されており、そのまま印刷すると背骨が斜めになり3Dプリント時の見栄えが微妙なので却下。 |
Stnd 2.5mm |
標準的な再構成条件のデータという理解。全体のバランスがよかった。 | 今回はいちばん扱いやすかった。Bone 2.5mmに比べてノイズも抑えられている。 |
Sag |
Sagittal 由来と思われる別方向の断面系データ。 | ノイズと穴あきのバランスが印刷には合わなかった。 |
VR |
Volume Rendering 済の可視化データ。 | 3Dデータではないため使えない |
最終的には3Dで印刷する際のバランスの良さそうな Stnd 2.5mm を使いました。
骨を抽出する
読み込み後は Segment Editor で骨の領域を切り出します。
-
Segment Editorを開く -
Addでセグメントを追加 -
Thresholdを選ぶ - しきい値を調整して
Apply -
Show 3Dで立体表示する
今回のしきい値
いろいろ試した結果、今回は Threshold: 120 にしました。
低すぎると、
- 骨以外のノイズが残る
- 表面にトゲのような突起が出やすい
高すぎると、
- 骨に穴が空く
- 肋骨などの細い部分が欠ける
という感じでした。
あとからBlenderで多少のノイズを修正する前提で、少しノイズが残っても骨の連続性が保たれるデータとしました。
STLとして書き出す
- 上部メニューの
Segmentations - 左側の折りたたみ内にある
Export to files -
Destination folderを指定 -
File formatをSTLにする
- その他特に設定変更せず
Export
これで、Blenderなどで編集できる .stl ファイルが出力できます。
(寄り道)Volume Renderingして3Dで眺める
寄り道ですが、Volume Rendering を使うと、病院で見せてもらうような立体表示もできます。
(Segment Editorを選んだところの選択肢にあります。先にSegment Editorの作成したSegmentの目のアイコンで不可視状態にしておきます)
Displayの項目のPresetをいじると可視化されます。Preset: MR-Angio がいちばん見やすく感じました。病院で見たときの見た目は、こちらに近いのだと思います。
このタイミングで気がついたのですが、簡易ビュワーに入っている画像には、右上に0.63mmと記載があり、解像度がかなり高く感じます。(病院で見せてもらったのもこちらだと思います)
それにくらべ、手元で見ている3DデータにはXXX 2.5mmという名前がついていて、簡易ビュワーにはいっているものと比べると細部が丸く解像度が低いものでした。病院にお願いしたら出してくれたりするのかな...
まとめ
病院から受け取ったCTのデータから3次元のデータを作成することができました。
STL化までの作業で一番時間がかかったのは、「どのシリーズを使うか」「しきい値をどこに置くか」の見極めでした。最初は、Bone 2.5mmというデータを加工しつつ、一度3Dプリントまで行いました。
Bone 2.5mmのデータは空中に浮いているノイズは少なく見えましたが、面とつながっているノイズが比較的多く大きめなノイズは印刷対象となり、その部位に対するサポートパーツが作成され、サポートが増える&剥がす際にパーツが折れる原因となっていました。
今回のように後でBlenderで不要部の削除や補強をする前提なら、多少浮いているノイズが残っても骨の形(面)がきれいな設定を選ぶほうが進めやすいと思います。
次の記事では、このSTLをBlenderに持っていって、不要な骨の削除や支柱追加、台座づくりなど、3Dプリントしやすい形に整えていった流れをまとめます。
中編: CTデータの骨を3Dプリント 【中編】STLを修正して3Dプリントしやすい形にする
後編: # CTデータの骨を3Dプリント 【後編】プリント時の注意点と試し刷りの記録



