2026-05-24-18-59-49 修正薄壳构件实体化映射
This commit is contained in:
56
工程分析/实现方案-2026-05-24-18-59-49.md
Normal file
56
工程分析/实现方案-2026-05-24-18-59-49.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# 实现方案-2026-05-24-18-59-49
|
||||
|
||||
## 实现方案文档路径
|
||||
|
||||
`工程分析/实现方案-2026-05-24-18-59-49.md`
|
||||
|
||||
## 修改目标
|
||||
|
||||
- 修正 rib/skin 等薄壳或细长 STL 在逆向分割映射视图中的点状、线状显示。
|
||||
- 前端 overlay 与服务端导出共用更强的实体化兜底策略。
|
||||
- 部署后让当前项目重新使用新算法实时生成映射结果。
|
||||
|
||||
## 涉及路径
|
||||
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/server.ts`
|
||||
- `Docker部署/README.md`
|
||||
- `工程分析/经验记录.md`
|
||||
|
||||
## 技术路线
|
||||
|
||||
- 在已有连通组扫描线填充基础上增加“切面实体兜底”:
|
||||
- 对每个构件、每个切片、每个连通组独立处理。
|
||||
- 正常闭合轮廓继续使用扫描线填充。
|
||||
- 对面积过小、仅点线、薄壳或断续线段的组,按线段周围生成局部厚度,并对端点/边界做圆形或方形膨胀。
|
||||
- 最后做小缝隙闭合与内部孔洞填充。
|
||||
- 同步服务端 NIfTI 导出,让下载结果与界面展示一致。
|
||||
- 保持当前高精度 STL preview 与加载进度逻辑。
|
||||
|
||||
## 执行步骤
|
||||
|
||||
1. 定位前端 overlay 填充和后端导出填充函数。
|
||||
2. 抽取或补充局部 thick stroke / dilation 兜底函数。
|
||||
3. 在前端 `drawVoxelOverlayLayer` 的每个连通组处理中应用实体兜底。
|
||||
4. 在后端导出 mask 生成中应用相同实体兜底。
|
||||
5. 执行类型检查、构建、部署和访问验证。
|
||||
6. 提交并推送到 Gitea。
|
||||
|
||||
## 兼容性与回滚方案
|
||||
|
||||
- 修改只影响显示与导出 mask 生成,不影响项目状态结构和上传数据。
|
||||
- 如发现膨胀过强,可通过减小兜底半径回滚到更保守的实体化。
|
||||
- 回滚可直接撤销本次 commit 并重新部署。
|
||||
|
||||
## 预计文件变更
|
||||
|
||||
- 2 个核心代码文件。
|
||||
- 1 个 Docker 部署说明文件。
|
||||
- 3 个工程分析当次文档。
|
||||
- 1 个经验记录追加。
|
||||
|
||||
## 提交与部署策略
|
||||
|
||||
- Commit message 使用 `2026-05-24-18-59-49 修正薄壳构件实体化映射`。
|
||||
- 通过 `npm run lint` 与 `npm run build` 后重启 `tmux` 会话 `revoxelseg-dicom`。
|
||||
- 验证本机与公网入口可访问。
|
||||
45
工程分析/测试方案-2026-05-24-18-59-49.md
Normal file
45
工程分析/测试方案-2026-05-24-18-59-49.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# 测试方案-2026-05-24-18-59-49
|
||||
|
||||
## 测试方案文档路径
|
||||
|
||||
`工程分析/测试方案-2026-05-24-18-59-49.md`
|
||||
|
||||
## 静态检查
|
||||
|
||||
- 执行 `cd WebSite && npm run lint`。
|
||||
- 搜索新增实体化函数调用,确认前端显示与后端导出均覆盖。
|
||||
|
||||
## 构建检查
|
||||
|
||||
- 执行 `cd WebSite && npm run build`。
|
||||
- 确认生产构建成功。
|
||||
|
||||
## 关键业务场景验证
|
||||
|
||||
- 当前项目在逆向分割映射视图中显示 rib、skin、肝脏等构件时,薄构件不再只剩散点或单像素线段。
|
||||
- 切换构件可见性后,加载进度条仍正常显示。
|
||||
- 肝脏等大实体构件仍保持实体填充,不被过度扩张。
|
||||
|
||||
## 医学影像数据相关边界验证
|
||||
|
||||
- 单构件内多个断开小区域保持独立处理,不跨构件混色。
|
||||
- thin shell/骨骼结构允许视觉上略厚于真实切面,但不能跨越远距离碎片形成大面积桥接。
|
||||
- 导出 NIfTI 的实体化策略与前端一致。
|
||||
|
||||
## 部署验证
|
||||
|
||||
- 重启 `tmux` 会话 `revoxelseg-dicom`。
|
||||
- 验证 `http://127.0.0.1:4000/api/health`。
|
||||
- 验证 `http://127.0.0.1:4000/`。
|
||||
- 验证 `https://revoxel.huijutec.cn/api/health` 与 `https://revoxel.huijutec.cn/`。
|
||||
|
||||
## Git/Gitea 备份验证
|
||||
|
||||
- 仅暂存本次相关代码和工程分析文档。
|
||||
- 提交 message 包含 `2026-05-24-18-59-49`。
|
||||
- 推送到 Gitea `main` 并确认本地分支与远端同步。
|
||||
|
||||
## 风险与回归关注点
|
||||
|
||||
- rib/skin 这类结构在医学真实切面中可能本来很薄,本次是为了满足用户的实体化显示需求。
|
||||
- 如果后续接入真实体素化算法,应把当前膨胀兜底作为可配置的显示/演示层,而不是临床级分割后处理。
|
||||
18
工程分析/经验记录.md
18
工程分析/经验记录.md
@@ -1747,3 +1747,21 @@ C. 解决问题方案
|
||||
D. 后续如何避免问题
|
||||
|
||||
后续只要某个 UI 操作会触发异步加载大 STL、DICOM 或导出预计算,都应提供明确加载状态、进度和空状态,避免用户把正常等待理解为显示故障。需要阻止滚轮默认滚动时,应使用原生非被动 wheel 监听并在卸载时清理;触摸按钮优先使用 pointer 事件和 `touch-action` 控制,不要在 passive-prone 的 touch 合成事件中调用 `preventDefault`。
|
||||
|
||||
## 2026-05-24-18-59-49 薄壳和细长构件需要局部实体化兜底
|
||||
|
||||
A. 具体问题
|
||||
|
||||
用户反馈当前项目中 `rib` 在三维融合视图里仍像散点,逆向分割映射视图右侧仍有一条一条的线;希望 `skin`、`rib` 等所有构件在映射视图中尽量显示为实心。
|
||||
|
||||
B. 产生问题原因
|
||||
|
||||
当前项目 `rib.stl` 有 524364 个三角面、`skin.stl` 有 2720412 个三角面。此前实体模式预览上限为 20 万,二维映射高精度上限为 50 万;由于预览抽样使用 `ceil(triangleCount / limit)` 计算步长,`rib` 在 50 万上限下仍会变成每隔一个三角面取样,细长结构更容易断成点线。另一个原因是二维填充主要依赖扫描线交点配对,近水平切线会被跳过;当 thin shell 或肋骨切面不能形成完整闭合轮廓时,就只剩线段描边。
|
||||
|
||||
C. 解决问题方案
|
||||
|
||||
将实体模式和逆向分割映射预览上限提高到 80 万,服务端 STL preview 上限同步提高到 80 万,使 `rib` 能全量进入实体预览,`skin` 也能获得更高密度抽样。三维实体模式材质改为不透明并写入深度,减少透明材质排序造成的散点观感。前端 overlay 和服务端 NIfTI 导出在扫描线填充之外,对每个连通组的原始切面线段绘制局部 capsule 厚度,再做小缝隙闭合和内部孔洞填充,保证薄壳、细长构件也有实体化兜底。
|
||||
|
||||
D. 后续如何避免问题
|
||||
|
||||
后续遇到薄壳、肋骨、皮肤、血管等结构显示成点线时,要同时检查三件事:STL preview 是否因上限导致抽样缺面、二维切面算法是否跳过水平/切线段、透明材质是否造成三维自排序噪声。实体化显示和导出必须同步处理,不能只改 UI;但局部厚度兜底属于演示/显示后处理,接入真实体素化算法后应作为可配置显示选项,而不是替代真实分割算法。
|
||||
|
||||
44
工程分析/需求分析-2026-05-24-18-59-49.md
Normal file
44
工程分析/需求分析-2026-05-24-18-59-49.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# 需求分析-2026-05-24-18-59-49
|
||||
|
||||
## 开始时间
|
||||
|
||||
2026-05-24-18-59-49
|
||||
|
||||
## 原始需求摘要
|
||||
|
||||
用户反馈 `rib` 在三维融合视图中仍像散点,逆向分割映射视图右侧仍有一条一条的显示效果;希望包括 `skin`、`rib` 在内的所有构件在“逆向分割映射视图”中都尽可能显示为实心区域。用户认为此前若已修改过,应重新处理当前项目。
|
||||
|
||||
## 业务目标
|
||||
|
||||
- 让薄壳、细长、稀疏切面构件在二维逆向分割映射中有实体填充兜底。
|
||||
- 减少 rib/skin 等构件在切面上仅显示散点、短线或断续线段的视觉问题。
|
||||
- 保持已有肝脏等大实体构件的填充效果,不引入跨构件或跨断开区域的大面积误连。
|
||||
|
||||
## 输入与输出
|
||||
|
||||
- 输入:当前项目 STL 构件、DICOM 切片、模型位姿、构件可见状态。
|
||||
- 输出:逆向分割映射视图中,所有可见构件的切面尽量以填充实体呈现;对 thin shell/骨骼类断续切面增加厚度和闭合兜底。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`:前端二维 overlay 切面填充与兜底显示。
|
||||
- `WebSite/server.ts`:NIfTI 导出算法若与前端共享相同实体化策略,需要同步修正。
|
||||
- `Docker部署/README.md`:同步说明实体化兜底能力。
|
||||
- `工程分析/经验记录.md`:沉淀薄壳/细长结构实体化经验。
|
||||
|
||||
## 关键约束
|
||||
|
||||
- 不能修改原始 DICOM/STL 文件。
|
||||
- 不能把不同构件混成一个标签;填充只能在单构件内部处理。
|
||||
- 当前工程仍是演示闭环,修改应明确为视觉和演示导出层面的实体化兜底,不声称真实临床算法。
|
||||
|
||||
## 风险点
|
||||
|
||||
- rib/skin 这类结构天然可能是薄壳或细长带状结构,过度膨胀会让其比真实切面更厚。
|
||||
- 若直接全局连接所有点,可能重新产生之前的长桥和错误相连。
|
||||
- 导出算法与前端显示不一致,会让用户看到实体但下载后仍是线。
|
||||
|
||||
## 待确认问题或默认假设
|
||||
|
||||
- 默认按用户要求将所有构件在二维映射中做“实体化显示兜底”,优先视觉和导出演示一致性。
|
||||
- 对 rib/skin 这类薄结构采用按连通组局部膨胀和闭合,不跨构件、不跨明显远距离碎片。
|
||||
Reference in New Issue
Block a user