本项目实现了基于腹部 CT 的肝脏血管自动分割与评估,包含完整的数据预处理、三种经典/实用分割算法、指标评估与可视化展示。同时提供了 MATLAB App Designer 编写的交互式应用,便于对单例病例进行快速试验与可视化。
使用数据集
- MSD Task08 Hepatic Vessel(Medical Segmentation Decathlon 肝血管任务)
- 公开链接:
MSD 肝脏血管分割 - 目录示例:
Task08_HepaticVessel/Task08_HepaticVessel/imagesTr/与labelsTr/
算法概述
项目实现并评估了三种分割算法,核心思想如下:
- Percentile(强度分位数阈值)
- 在肝脏 ROI 内统计强度直方图,取高分位数(如 97%)作为阈值进行二值化,随后做形态学清理。
- RegionGrow(区域生长)
- 自动在肝脏 ROI 中选取高强度体素作为种子点(如 99.5% 分位),以稍低阈值(如 95% 分位)作为生长上限,进行掩膜重建与连通域清理。
- Ensemble(集成融合)
- 将 Percentile 与 RegionGrow 的结果进行逻辑或融合,以最大覆盖真阳性;之后通过闭运算与体积阈值滤波移除噪声。
上述实现细节请参考对应源文件内的“函数头部注释与逐步说明”。
代码结构
HepaticVesselApp/ ├─ app/ # App Designer 工程(.mlapp) ├─ core/ │ ├─ preprocessCase.m # 病例数据预处理(重采样/ROI/裁剪/显示强度) │ ├─ segmentVessel_Percentile.m# 分位数阈值分割 │ ├─ segmentVessel_RegionGrow.m# 区域生长分割 │ ├─ segmentVessel_Ensemble.m # 集成融合分割 │ └─ utils/ │ ├─ body_mask3d.m # 身体掩膜(去空气床板等背景) │ ├─ ct_windowing_to01.m # CT 窗宽窗位归一化至 [0,1] │ ├─ resample_isotropic.m # 各向同性重采样 │ ├─ crop_by_mask_with_margin.m # 带边距裁剪 │ ├─ evaluateMetrics.m # Dice/IoU/Prec/Rec 计算 │ └─ create_multi_view_figure.m # 三正交视图可视化(预测/真值叠加) │ ├─ evaluation_results/ # 统计图表与分析脚本 │ ├─ 1.png, 2.png, 3.png # 评估可视化(见下文“结果展示”) │ └─ result_analysis.py # 统计与绘图脚本 │ ├─ outputs/ │ └─ case_001/ # 示例病例输出(含可视化图) │ └─ final_vessel_result.png │ ├─ run_vessel_pipeline.m # 批量评测脚本(循环病例×算法) └─ run_segmentation_for_app.m # App 后端执行逻辑(单例、返回图像与指标)
更详细的处理流程、参数说明与边界条件处理,请直接阅读各 .m 文件开头的注释。结果展示
1) 三种算法的平均处理时间对比(全部 303 例)
含义:对全部 303 个病例统计,柱状图展示 Percentile / RegionGrow / Ensemble 三种算法的平均运行时间(秒)。
核心数值(来自统计脚本输出):
- Percentile:平均时间 0.115 s
- RegionGrow:平均时间 1.070 s
- Ensemble:平均时间 1.242 s
2) 三种算法 Dice 系数的整体分布对比(箱线图,全部 303 例)
含义:展示三种算法在所有病例上的 Dice 分布范围(四分位、极值与中位数)。可直观看到 Ensemble 在中位数和上四分位的优势。
核心数值(均值 / 中位数):
- Percentile:平均 0.3948,中位数 0.4109
- RegionGrow:平均 0.4114,中位数 0.4778
- Ensemble:平均 0.4470,中位数 0.4895
3) 三种算法在所有病例上的 Dice 系数对比(逐病例柱状)
含义:横轴为病例 ID,纵轴为 Dice。每个病例上三根柱分别对应 Percentile、RegionGrow、Ensemble,便于观察改进是否稳定。
4) 病例 001 的可视化分割结果(Ensemble)
下图为 case_001 的三视图叠加可视化(预测与真值边界):
分析:该病例上,Ensemble 融合策略在主干与较粗支路位置形成稳定覆盖,细小分支处仍受体素尺寸与对比度影响存在漏检。整体 Dice 约 0.65(图标题示意),与整体统计中 Ensemble 的均值 0.447、高于 Percentile 与 RegionGrow 的总体表现一致,说明融合策略在多数病例上能带来稳健收益。
如需批量导出所有病例的多视角结果,请使用 run_vessel_pipeline.m。
App 交互式应用(App Designer)
应用界面示意:
应用的执行逻辑集中在 run_segmentation_for_app.m:
- 读取参数并调用
preprocessCase完成重采样、ROI、裁剪与显示强度生成; - 根据按钮选择的算法名称,调用
segmentVessel_Percentile/RegionGrow/Ensemble; - 通过
evaluateMetrics计算指标,格式化为字符串返回; - 使用
create_multi_view_figure生成三正交视图(预测/真值等高线叠加),并将figure捕获为图像矩阵返回供 App 展示; - 统一设置
figure尺寸,保证导出清晰度一致。
复现实验
- MATLAB 端批量评测
- 在
run_vessel_pipeline.m中设置rootDir与caseIDs_to_test,直接运行脚本。
- Python 端统计与绘图(可选)
- 进入
evaluation_results/,运行result_analysis.py,将输出三类统计与汇总表;脚本也可扩展生成箱线图/小提琴图等。




