59 lines
3.4 KiB
Markdown
59 lines
3.4 KiB
Markdown
# 实现方案 - 2026-05-08-03-57-51
|
||
|
||
## 方案路径
|
||
|
||
将右侧“Mask 展示”从 STL/3D 几何结果展示改为真实 DICOM Segmentation Mask 的二维实心切片展示。模型切分操作只决定需要展示的切分位置和上下端点;实际像素内容必须来自与当前 DICOM 数据配准的语义分割 mask 体数据。
|
||
|
||
## 涉及文件
|
||
|
||
- `web_backend.py`
|
||
- 新增 segmentation mask 数据发现、读取、缓存和切片渲染逻辑。
|
||
- 新增或扩展 mask 预览接口,返回切分上侧/下侧两张二维实心 mask 图片。
|
||
- 保留 STL 切分用于确定范围或几何参考,但不再用 STL Cap 作为最终 mask 图像数据源。
|
||
- `WebSite/src/App.tsx`
|
||
- 调整模型切分触发后的“Mask 展示”请求和渲染逻辑。
|
||
- 右侧面板固定展示两张二维实心 Segmentation Mask 图片。
|
||
- 对无 segmentation 数据、无交集、加载失败分别给出状态。
|
||
- `工程分析/经验记录.md`
|
||
- 完成后追加本轮关键问题、原因、解决方案和后续避免方式。
|
||
|
||
## 执行步骤
|
||
|
||
1. 数据源梳理:
|
||
- 检查 `web_library/` 和现有接口中是否已有 DICOM SEG、RTSTRUCT、NIfTI、NRRD、PNG mask 序列或其他语义分割文件。
|
||
- 当前未发现现成 segmentation 数据源,因此新增“上传/关联 Segmentation Mask”的后端入口和前端入口,避免继续从 STL 伪造 mask。
|
||
2. 后端 mask 体数据读取:
|
||
- 优先支持 DICOM SEG / DICOM label-map 文件。
|
||
- 将 mask 读取为与 CT 体数据对齐的三维 label map。
|
||
- 使用缓存避免每次切分重复读取整套 mask。
|
||
3. 后端二维实心截面渲染:
|
||
- 根据当前模型切分范围计算上侧/下侧两张目标切片。
|
||
- 从 Segmentation Mask label map 中取对应切片。
|
||
- 生成二维实心 mask-only PNG,而不是 CT 叠加图、STL Cap 或点云投影。
|
||
- 多标签情况下保留标签差异,可按固定颜色表渲染。
|
||
4. 前端“Mask 展示”调整:
|
||
- 点击“模型切分”后,右侧面板请求新的 segmentation mask 双图接口。
|
||
- 面板标题保持“Mask 展示”,内容为两张二维图片:上侧切面、下侧切面。
|
||
- 移除或隐藏任何 3D 外壳/点云/半透明模型展示路径。
|
||
5. 错误与降级处理:
|
||
- 若没有绑定 segmentation mask 数据,提示需要上传或关联 DICOM Segmentation Mask。
|
||
- 若某一切面 mask 为空,显示“该切面无分割区域”,但不生成假 mask。
|
||
6. 验证通过后更新经验记录、提交 Gitea,并重新部署。
|
||
|
||
## 回滚思路
|
||
|
||
若新接口或前端展示出现问题,可回滚 `web_backend.py` 中新增 segmentation mask 读取/渲染逻辑和 `WebSite/src/App.tsx` 中“Mask 展示”的请求渲染改动,恢复当前 STL mask-only 双图逻辑。
|
||
|
||
## 风险控制
|
||
|
||
- 不将 STL Cap、封闭面或几何填充作为最终 mask 数据源。
|
||
- 对 segmentation 数据缺失做显式错误提示,不用临时绘制图形代替。
|
||
- DICOM SEG 坐标对齐需严格参考 CT 的方向、间距、原点和切片顺序。
|
||
- 若缺少测试数据,只做接口和类型验证不足以证明医学对齐正确,必须标注残余风险。
|
||
|
||
## 需要用户确认
|
||
|
||
- 用户已确认方案,允许新增 Segmentation Mask 上传/关联入口。
|
||
- “上、下两个视角”本次按当前切分范围的起点帧/终点帧实现。
|
||
- 如果已有真实 segmentation mask 数据,请提供其所在目录或文件格式说明。
|