Skip to content

Sellifake/HepaticVessel-Seg-Matlab-MSD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

项目简介

本项目实现了基于腹部 CT 的肝脏血管自动分割与评估,包含完整的数据预处理、三种经典/实用分割算法、指标评估与可视化展示。同时提供了 MATLAB App Designer 编写的交互式应用,便于对单例病例进行快速试验与可视化。

使用数据集

  • MSD Task08 Hepatic Vessel(Medical Segmentation Decathlon 肝血管任务)
  • 公开链接:MSD 肝脏血管分割
  • 目录示例:Task08_HepaticVessel/Task08_HepaticVessel/imagesTr/labelsTr/

算法概述

项目实现并评估了三种分割算法,核心思想如下:

  1. Percentile(强度分位数阈值)

    • 在肝脏 ROI 内统计强度直方图,取高分位数(如 97%)作为阈值进行二值化,随后做形态学清理。
  2. RegionGrow(区域生长)

    • 自动在肝脏 ROI 中选取高强度体素作为种子点(如 99.5% 分位),以稍低阈值(如 95% 分位)作为生长上限,进行掩膜重建与连通域清理。
  3. 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 箱线图

含义:展示三种算法在所有病例上的 Dice 分布范围(四分位、极值与中位数)。可直观看到 Ensemble 在中位数和上四分位的优势。

核心数值(均值 / 中位数):

  • Percentile:平均 0.3948,中位数 0.4109
  • RegionGrow:平均 0.4114,中位数 0.4778
  • Ensemble:平均 0.4470,中位数 0.4895

3) 三种算法在所有病例上的 Dice 系数对比(逐病例柱状)

逐病例 Dice 对比

含义:横轴为病例 ID,纵轴为 Dice。每个病例上三根柱分别对应 Percentile、RegionGrow、Ensemble,便于观察改进是否稳定。

4) 病例 001 的可视化分割结果(Ensemble)

下图为 case_001 的三视图叠加可视化(预测与真值边界):

case_001 可视化

分析:该病例上,Ensemble 融合策略在主干与较粗支路位置形成稳定覆盖,细小分支处仍受体素尺寸与对比度影响存在漏检。整体 Dice 约 0.65(图标题示意),与整体统计中 Ensemble 的均值 0.447、高于 Percentile 与 RegionGrow 的总体表现一致,说明融合策略在多数病例上能带来稳健收益。

如需批量导出所有病例的多视角结果,请使用 run_vessel_pipeline.m

App 交互式应用(App Designer)

应用界面示意:

App 截图

App 运行演示 应用的执行逻辑集中在 run_segmentation_for_app.m

  • 读取参数并调用 preprocessCase 完成重采样、ROI、裁剪与显示强度生成;
  • 根据按钮选择的算法名称,调用 segmentVessel_Percentile/RegionGrow/Ensemble
  • 通过 evaluateMetrics 计算指标,格式化为字符串返回;
  • 使用 create_multi_view_figure 生成三正交视图(预测/真值等高线叠加),并将 figure 捕获为图像矩阵返回供 App 展示;
  • 统一设置 figure 尺寸,保证导出清晰度一致。

复现实验

  1. MATLAB 端批量评测
  • run_vessel_pipeline.m 中设置 rootDircaseIDs_to_test,直接运行脚本。
  1. Python 端统计与绘图(可选)
  • 进入 evaluation_results/,运行 result_analysis.py,将输出三类统计与汇总表;脚本也可扩展生成箱线图/小提琴图等。

引用与许可

  • 数据集请遵循 MSD 官方许可与引用要求。
  • 代码以研究用途为主,如需商用请在相应许可范围内使用。

About

基于Matlab的肝脏血管分割系统,app designer,MSD数据集,医学影像处理

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published