骨のセグメンテーション¶
CT から骨だけを取り出して、3Dモデルにします。
所要時間の目安: 20分
ここに YouTube の埋め込みが入ります
手順の全体像¶
graph TD
A[CT を読み込む] --> B[Segment Editor を開く]
B --> C[Threshold で骨を拾う]
C --> D[Islands で骨片を分離]
D --> E[Smoothing で整える]
E --> F[3Dモデルとして書き出す]
1. Segment Editor を開く¶
モジュール一覧 → Segmentation → Segment Editor
Add ボタンで新しいセグメントを作ります。名前は Bone などにしておきます。
2. Threshold(閾値)で骨を拾う¶
Threshold エフェクトを選び、下限値を設定します。
| 部位 | 下限 HU の目安 |
|---|---|
| 皮質骨がしっかりした長管骨 | 200〜300 |
| 骨粗鬆症のある椎体 | 130〜200 |
| 小児・海綿骨中心 | 100〜150 |
閾値に「正解」はありません
HU 値は撮影装置・撮影条件・再構成関数によって変わります。 上の数値はあくまで出発点です。 プレビューを見ながら、皮質骨の外形が滑らかに出る値に調整してください。
迷ったら少し高めから
低すぎる閾値にすると軟部組織を巻き込み、後の分離作業が大変になります。 まず高めの値で骨だけを確実に拾い、足りない部分を後から補う方が早く終わります。
Apply を押して確定します。
3. 骨片を分離する¶
骨折で骨片が複数ある場合、Islands エフェクトで分けます。
Islands → Split islands to segments を実行すると、 つながっていない塊が別々のセグメントに分割されます。
うまく分かれないとき
骨片同士が1ボクセルでも接触していると、1つの塊として扱われます。
対処法:
- Scissors エフェクトで接触部分を手動で切る
- Margin エフェクトで少し縮めてから Islands を実行し、その後 Margin で戻す
- 閾値を少し上げて、接触部の低density部分を切る
詳しくは つまずきポイント集 を参照してください。
4. 形を整える¶
Smoothing エフェクトで表面のギザギザを取ります。
| 方式 | 特徴 |
|---|---|
| Median | 小さなノイズ除去。形状をあまり変えない |
| Closing (fill holes) | 小さな穴を埋める |
| Joint smoothing | 複数セグメントの境界を保ったまま平滑化 |
かけすぎに注意
平滑化を強くかけると、骨折線や細かい骨片が消えます。 術前計画では形状の正確さが重要なので、最小限にとどめてください。
5. 3Dモデルとして書き出す¶
Show 3D ボタンで3D表示を確認したら、書き出します。
Segmentations モジュール → Export to files で STL / OBJ として保存できます。
# スクリプトで一括書き出しする場合
segmentationNode = slicer.util.getNode("Segmentation")
slicer.modules.segmentations.logic().ExportSegmentsClosedSurfaceRepresentationToFiles(
r"D:\output", segmentationNode, None, "STL")
書き出す前にファイル名を確認
ノード名やファイル名に患者名・患者IDが残っていないか確認してください。 STL ファイル自体にメタデータは入りませんが、ファイル名は残ります。
次のステップ¶
骨のモデルができたら、プレートの形状を検討します。