Skip to content

HONGWEIHENG111/Seg_airwayTree

Repository files navigation

🫁 Bronchial Tree Skeleton Extraction & Analysis Toolkit

这是一个针对肺部支气管(Airway)三维分割结果进行骨架提取、拓扑结构重构、自动化清理及定量分析的完整解决方案。

🌟 核心功能

自动化骨架提取:基于 skimage.morphology 的 3D 细化算法,并加入了形态学闭运算修复与断裂自动缝合。

🌟 核心功能拓扑结构优化:

破环算法:自动识别并断开气管中的环状结构(Cycles),确保树状拓扑。 二叉树强制转换:通过影响力评分(点数+深度)保留主干,自动剔除细小毛刺。 多层级清洗:针对气管顶部区域进行主干唯一性校验。 平滑与重采样:使用三次样条插值(B-Spline)对提取的骨架进行平滑处理,并实现均匀点云重采样。 可视化渲染:基于 VTK 实现支气管掩码(NIfTI)与彩色层级骨架(JSON)的离屏渲染与自动截图。 定量统计分析:自动计算支气管的分级(Generation),生成 Excel 报表,并提供基于 5%-95% 分位数的异常值检测(QC)。

  • 文件名 功能描述
  • tree.py 核心提取脚本。包含加载 NIfTI、提取骨架、破环、初步清理及生成原始 JSON。
  • refine.py 拓扑后处理。实现二叉树强制转换、断裂缝合、几何一致性同步及毛刺剔除。
  • process_tree.py 几何优化。对骨架段进行样条平滑和平滑后的均匀重采样。
  • batch_visualize.py 渲染与统计。计算层级、分配颜色、批量生成 VTK/PNG 截图并导出 Excel 汇总。
  • caltest.py 质量控制 (QC)。分析 Excel 结果,标记需要重新标注或裁剪的异常病例。

⚙️ 关键配置参数

  • 参数名 默认值 建议范围 说明
  • min_voxel 10 10 - 500 过滤掉的小连通域体素阈值
  • min_branch_length 3 3 - 10 剔除的末端毛刺长度上限
  • distance_threshold 6.0 5.0 - 10.0 缝合断裂时的搜索半径
  • top_z_threshold 30.0 20.0 - 50.0 气管顶部根节点竞争范围
  • s_val (Spline) 20.0 10.0 - 50.0 平滑力度,数值越大越平滑

🛠 算法流程

预处理:对二进制掩码进行孔洞填充及形态学闭运算,增强支气管壁的连通性。

提取:执行 3D Skeletonization 获得体素级骨架。

修复:connect_disconnected_skeletons 利用 cKDTree 寻找最近邻,强行缝合断裂的支气管段。

修剪: break_skeleton_cycles_balanced 移除由于分割粘连产生的冗余环路。 enforce_binary_tree_structure 确保每个分叉点最多只有两个子分支。

结构化:将点集转化为具有 index, fatherindex, start, end, member 属性的树形 JSON。

可视化:根据 Generation(代数)对骨架进行着色,第 0 代(气管)为红色,后续分级依次变化。

🚀 快速开始

  1. 环境依赖 pip install numpy nibabel scikit-image scipy networkx scikit-learn vtk pandas openpyxl

  2. 执行骨架提取 修改 tree.py 中的 input_folder 路径,运行: python tree.py

  3. 执行拓扑精修与平滑 运行 process_tree.py 进一步优化骨架的平滑度,使其符合解剖学形态。

  4. 批量统计与可视化 运行 batch_visualize.py,系统将自动: 在 Screenshots/ 生成支气管树 3D 渲染图。 生成 Airway_Batch_Summary.xlsx,包含每一例各级分支的数量统计。

📊 数据格式说明 JSON 骨架格式 JSON { "index": "10", "start": [120.0, 256.5, 300.2], "end": [135.0, 260.1, 280.5], "member": [[...], [...]], "fatherindex": "5" } 统计报表 (Excel) case_id: 病例编号 Total_Levels: 总分级深度 gen_0 ~ gen_N: 每一代分支的数量

⚖️ 质量控制 (QC) 逻辑 通过 caltest.py 自动筛选: Stage 1 (Relabel): 若 0-6 级主支气管数量严重偏离正常分布,判定为分割错误。 Stage 2 (Pruning): 若末梢分支过多,自动计算 cutoff_generation 建议裁剪层级。

学生第一次接触这类医疗任务,仍有许多不足,敬请修改指正。 这是两周速成任务,还有很多问题没有解决,例如飞线,速度慢等。nii文件是标注公司标注而来。不是完全正确。 最后的筛选也不是真正准确。

About

An automated Python toolkit for 3D airway tree segmentation post-processing. Features include NIfTI-to-skeleton extraction, rigorous topology correction (cycle breaking, stitching, binary tree enforcement), B-spline smoothing, VTK rendering, and generation statistics QC.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages