Files
cDNA-image-processing/docs/两版差异说明.md
T

2.8 KiB
Raw Blame History

简化版 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 像素),但算法完全不同。


什么时候用哪个

场景 用哪个
课堂讲算法思路 简化版
实际做图像处理 原版
对比阈值方法对同一张图的效果 原版
只画网格线 都可以