From 09d8b9d8fe22bbc01c65139e9f25842bf29ac7e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Thu, 7 May 2026 21:49:01 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=E4=B8=A4=E7=89=88?= =?UTF-8?q?=E5=B7=AE=E5=BC=82=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/两版差异说明.md | 101 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/两版差异说明.md diff --git a/docs/两版差异说明.md b/docs/两版差异说明.md new file mode 100644 index 0000000..649ca63 --- /dev/null +++ b/docs/两版差异说明.md @@ -0,0 +1,101 @@ +# 简化版 vs 原版 差异说明 + +> 写给以后的自己:简化版只是课堂演示用的,生产环境用原版。 + +--- + +## 一句话总结 + +| | 功能 | 用途 | +|---|---|---| +| 简化版 | 只画网格线 | 课堂讲解 | +| 原版 | 网格 + 去噪 + 分割 + 后处理 + 可视化 | 完整作业 | + +--- + +## 简化版缺少的模块 + +### 1. TV全变分去噪 + +**位置**:`cDNA_segmentation.py` 第 78-102 行,`tv_denoise()` + +**干什么**:对每个子块做 Chambolle 投影去噪,去除荧光噪点。简化版完全没有这一步。 + +**实现**:Rudin-Osher-Fatemi 模型,`min TV(u) + λ/2||f-u||²`,迭代对偶变量 p1、p2 直到收敛。 + +### 2. 三种阈值分割 + +**位置**:`cDNA_segmentation.py` 第 35-71 行 + +| 函数 | 原理 | +|------|------| +| `manual_threshold()` | 灰度 > 固定值 T | +| `otsu_threshold()` | 最大类间方差自动求 T | +| `iterative_threshold()` | 初始 T=均值,迭代 T=(μ_fg+μ_bg)/2 直到收敛 | + +简化版完全没有分割这一步。 + +### 3. 全图逐块分割 + +**位置**:`cDNA_segmentation.py` 第 374-411 行 + +**做什么**:对网格划分出的每个子块: +1. 如果太暗(均值<5或<30),先增强 +2. TV 去噪 +3. Otsu 阈值二值化 +4. 保留最大连通域 +5. 拼接回全局二值图 + +简化版只画线,不处理子块。 + +### 4. 后处理 + +**位置**:`cDNA_segmentation.py` 第 206-226 行 + +| 函数 | 作用 | +|------|------| +| `remove_small_objects()` | 去掉面积 < 20 的连通域(噪声) | +| `keep_largest_object()` | 每个子块只保留最大的那块(斑点) | + +简化版不需要后处理(因为没生成二值图)。 + +### 5. 可视化差异 + +**简化版输出**(1张): + +| 文件 | 内容 | +|------|------| +| `gridding_simple.png` | 灰度图 + 绿色网格线 | + +**原版输出**(6张): + +| 文件 | 内容 | +|------|------| +| `result_gridding.png` | 4合1:网格叠加 + 列投影 + 行投影 + 灰度直方图 | +| `result_gridding_overlay.png` | 网格线叠在原图上 | +| `result_threshold_compare.png` | 2×2:原图 + 人工/Otsu/迭代三种分割对比 | +| `result_iterative_convergence.png` | 迭代阈值收敛曲线 | +| `result_full_segmentation.png` | 全图逐块分割二值结果 | +| `result_I_bw.png` | 单独的二值图 | + +### 6. 网格划分算法不同 + +| 步骤 | 简化版 | 原版 | +|------|--------|------| +| 投影 | `np.sum` 求和 | `np.mean` 求均值 | +| 估间距 | 无 | 自相关 `np.correlate` | +| 去背景 | 无 | `ndimage.white_tophat` | +| 找斑点 | 减10%阈值 → 过零点 | Otsu + 连通域质心 | + +结果一致(误差 0 像素),但算法完全不同。 + +--- + +## 什么时候用哪个 + +| 场景 | 用哪个 | +|------|--------| +| 课堂讲算法思路 | 简化版 | +| 实际做图像处理 | 原版 | +| 对比阈值方法对同一张图的效果 | 原版 | +| 只画网格线 | 都可以 |