CTSpinoPelvic1K
收藏数据集概述:CTSpinoPelvic1K
CTSpinoPelvic1K 是一个融合了脊柱和骨盆的 3D CT 分割数据集,通过患者级别的交叉比对,整合自三个公开数据源:
- TCIA CT COLONOGRAPHY:提供 DICOM CT 容积(每位患者包含俯卧和仰卧扫描)。
- CTSpine1K (COLONOG 子集):提供基于 VerSe 惯例的椎体标签掩码。
- CTPelvic1K (dataset2):提供骶骨和双侧髋关节标签掩码。
注释被放置在 TCIA CT 容积中骨骼覆盖度最高(HU > 200)的序列上,每部分解剖结构独立放置。约 650 名患者的脊柱和骨盆注释位于相同序列(融合病例),其余患者的脊柱和骨盆标签位于不同的俯卧/仰卧扫描(分离病例)。
标签说明(10 类)
| ID | 名称 | 来源 |
|---|---|---|
| 0 | 背景 | — |
| 1 | L1 | CTSpine1K (VerSe 标签 20 映射为 1) |
| 2 | L2 | CTSpine1K (VerSe 标签 21 映射为 2) |
| 3 | L3 | CTSpine1K (VerSe 标签 22 映射为 3) |
| 4 | L4 | CTSpine1K (VerSe 标签 23 映射为 4) |
| 5 | L5 | CTSpine1K (VerSe 标签 24 映射为 5) |
| 6 | L6 / LSTV | CTSpine1K (VerSe 标签 25 映射为 6) — 腰化的 S1 |
| 7 | 骶骨 | CTPelvic1K (dataset2 标签 1 映射为 7) |
| 8 | 左侧髋骨 | CTPelvic1K (dataset2 标签 2 映射为 8) |
| 9 | 右侧髋骨 | CTPelvic1K (dataset2 标签 3 映射为 9) |
为避免腰骶移行椎病例中两种标注惯例冲突,CTPelvic1K 的骶骨标签优先于 CTSpine1K 的骶骨标签(标签 26)。
空间方向
所有容积均标准化为 PIR(后-下-右)方向。CT 和其标签图共享完全相同的 4×4 仿射矩阵,训练前无需重采样。
腰骶移行椎(LSTV)注释
每个病例包含两种互补的 LSTV 注释:
lstv_vertebral:根据 CTSpine1K 分割中的腰椎标签计数得出(4 → 骶化,5 → 正常,6 → 腰化)。lstv_pelvic:根据 CTPelvic1K 文件名限定词得出(任何包含 "sacralization" 的子串 → 骶化)。lstv_agreement:当两个来源一致时为True,不一致时为False,任一方无信息时为None。lstv_class:整数 0–3 总结主要判断(0=正常,1=腰化,2=半骶化,3=骶化)。骨盆标签具有优先权。
数据划分
训练集 / 验证集 / 测试集比例为 70 / 15 / 15,按 (lstv_class × match_type) 分层抽样,确保每个划分包含罕见的骶化和腰化类别。
文件格式
每个病例为一个单独的 .npz 文件,位于 data/<split>/token_<N>.npz:
python import numpy as np, json
d = np.load("token_17.npz", allow_pickle=False) ct = d["ct"] # int16 (Z, Y, X) HU label = d["label"] # uint8 (Z, Y, X) 0..9 affine = d["affine"] # float32 (4, 4) RAS 仿射矩阵 meta = json.loads(str(d["meta"]))
print(meta["match_type"], meta["lstv_class"], meta["spine_bone_pct"])
快速上手示例
PyTorch 示例
python from dataset_interface import CTSpinoPelvicDataset from torch.utils.data import DataLoader
ds = CTSpinoPelvicDataset( root = "anonymous-mlhc/CTSpinoPelvic1K", split = "train", cache_dir = "~/.cache/ctspinopelvic1k", ) dl = DataLoader(ds, batch_size=1, shuffle=True)
for batch in dl: ct, label = batch["ct"], batch["label"] # (B,1,Z,Y,X) / (B,Z,Y,X)
MONAI 示例
python from monai.transforms import ( Compose, RandCropByPosNegLabeld, RandFlipd, NormalizeIntensityd, ) from dataset_interface import CTSpinoPelvicDataset
transforms = Compose([ NormalizeIntensityd(keys="ct", subtrahend=0, divisor=1000), RandCropByPosNegLabeld(keys=("ct","label"), label_key="label", spatial_size=(96,96,96), pos=2, neg=1, num_samples=2), RandFlipd(keys=("ct","label"), prob=0.5, spatial_axis=(0,1,2)), ])
ds = CTSpinoPelvicDataset(root="anonymous-mlhc/CTSpinoPelvic1K", split="train", transform=transforms)
引用与许可
- 引用:请同时引用源数据集(CTSpine1K、CTPelvic1K、TCIA CT COLONOGRAPHY)以及本衍生数据集。BibTeX 条目见
CITATION.cff。 - 许可:源数据集保留各自许可。衍生融合标签、划分和代码采用 CC BY-NC 4.0(非商业使用)。




