勾画腰三椎体中段水平的皮下脂肪和内脏脂肪,请教老师怎么计算其表面积,用Segment statistics 计算出来的是体积

软件版本:5.8.1
问题描述:勾画腰三椎体中段水平的皮下脂肪和内脏脂肪,请教老师怎么计算其表面积,用Segment statistics 计算出来的是体积,请问具体操作步骤是什么呀

这是体表面积(Area) vs 体积(Volume) 在 3D Slicer 中使用 Segment Statistics 模块时的常见困惑。

你现在的目标是:

在 L3 椎体中段水平的横断面上,分别计算 皮下脂肪(Subcutaneous fat)和内脏脂肪(Visceral fat)面积 (cm²),而非体积 (cm³)。


:white_check_mark: 一、核心思路

Segment Statistics 默认输出的是体积(Volume),因为它针对三维体素集合。
要计算“面积”,我们只需要在一个 单层切片(单层厚度) 上绘制分割,并令该层的厚度等于体素厚度,就可以通过:

面积 = 体积 / 层厚

得到该层的真实面积。


:white_check_mark: 二、具体操作步骤(逐步说明)

:x_ray: :one: 载入腰椎 CT 数据

  • 打开 3D Slicer → 通过 DICOM 模块 或 “Add Data” 导入 CT;
  • 建议选择包含 L3 椎体完整层面 的扫描。

:pencil: :two: 定位到 L3 椎体中段层面

  • 使用 “Red slice(轴位视图)”;
  • 通过鼠标滚轮或滑块定位到 L3 椎体中段横断面
  • 可以使用 “Ruler” 工具标记层面位置以备复查。

:puzzle_piece: :three: Segment Editor 分割

  1. 打开 Segment Editor

  2. 新建两个 Segment:

    • Subcutaneous fat
    • Visceral fat
  3. 选择阈值分割工具(Threshold)或手动绘制工具(Paint);

  4. 仅在该层(当前 slice)上勾画区域;

  5. 勾画完成后,确认只保留这一个层面的 segmentation。
    :backhand_index_pointing_right: 可在 “Segmentations” 模块 → “Display” → 关闭 3D 显示。


:straight_ruler: :four: 查看层厚信息

Volumes 模块 中找到:

Voxel spacing: X × Y × Z (例如 0.75 × 0.75 × 5.0 mm)

其中 Z 即层厚。记下这一值(单位 mm)。


:bar_chart: :five: 计算面积

打开 Segment Statistics 模块:

  • Input segmentation: 选择刚才的 segmentation;
  • Input scalar volume: 选择原始 CT;
  • 点击 Apply
  • 查看 “Volume (mm³)” 项目。

你将得到类似:

Segment Volume (mm³)
Subcutaneous fat 11500
Visceral fat 3200

将体积除以层厚即可得面积:

[Area = Volume / SliceThickness]

例如层厚 5 mm:

  • 皮下脂肪面积 = 11500 mm³ / 5 mm = 2300 mm² = 23.0 cm²
  • 内脏脂肪面积 = 3200 mm³ / 5 mm = 640 mm² = 6.4 cm²

:white_check_mark: 三、附加方法(更精确)

若你希望直接得到面积而不手算:

:abacus: 方法 A:使用 Python 交互式计算

在 Slicer 的 Python Interactor 中输入:

import SegmentStatistics
import slicer
import numpy as np

# 选择 segmentation 节点
segNode = slicer.util.getNode('Segmentation')  # 替换成你的名称
statLogic = SegmentStatistics.SegmentStatisticsLogic()
parameters = {"Segmentation": segNode}
statLogic.computeStatistics(parameters)

for segmentId in statLogic.statistics.keys():
    volume_mm3 = statLogic.statistics[segmentId, "LabelmapSegmentStatisticsPlugin.volume_mm3"]
    slice_thickness = segNode.GetSegmentation().GetSegment(segmentId).GetTag("SliceThickness")
    print(f"{segmentId}: {volume_mm3/slice_thickness} mm²")

(若没自动记录层厚,可手动输入。)


:abacus: 方法 B:使用 Segment Cross-Section Area 扩展

可在 Extension Manager 中搜索并安装:

SegmentCrossSectionArea

它能直接在单层切片上计算每个 Segment 的横截面积(无需手动除以层厚)。


:white_check_mark: 四、小结

步骤 要点
1. 导入 CT 确保层厚信息正确
2. 定位 L3 找到中段层面
3. 分割脂肪区 仅在单层勾画
4. Segment Statistics 得到体积
5. 手动换算 面积 = 体积 / 层厚
6. 可选扩展 安装 SegmentCrossSectionArea 直接输出面积