From 7ec449ce3f2615f5312e66e725a19ee8dd30c0bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Wed, 6 May 2026 22:40:14 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E9=87=8D=E5=86=99README=EF=BC=8C?= =?UTF-8?q?=E8=81=9A=E7=84=A6Python=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 以两个Python脚本为核心 - 两版对比表格 - 输出文件说明 - 运行命令 --- README.md | 129 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 71 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 9f01009..426b367 100644 --- a/README.md +++ b/README.md @@ -1,97 +1,110 @@ # cDNA 微阵列图像处理作业 -> **作者**: 刘航宇 | 河南理工大学计算机学院 | 2026 +> 刘航宇 | 河南理工大学计算机学院 | 2026 --- -## 作业内容 - -本作业来自《图像处理实例1:cDNA图像分析》,完成以下三个任务: - -| 任务 | 内容 | 实现状态 | -|------|------|----------| -| 1 | 分析涉及的图像处理技术 | 见PPTX | -| 2 | 编写阈值分割代码(人工阈值 / 迭代阈值 / Otsu) | `src/cDNA_segmentation.py` | -| 3 | 选取cDNA图像进行分割 | 对cDNA.png完成网格划分+分割 | - ---- - -## 我的Python实现 - -### 文件结构 +## 项目结构 ``` src/ -├── cDNA_segmentation.py # 原版:完整流程(网格划分 + 阈值分割 + 可视化) -└── cDNA_gridding_simple.py # 简化版:仅划线,适合课堂讲解 +├── cDNA_segmentation.py # 原版:网格划分 + 三种阈值分割 + TV去噪 +└── cDNA_gridding_simple.py # 简化版:仅网格划分,用于课堂讲解 -results/ ← 原版输出 -results_simple/ ← 简化版输出 +results/ # 原版输出(6张PNG) +results_simple/ # 简化版输出(网格叠加图 + 流程图) +docs/ +└── gridding_simple_tutorial.md # 简化版逐行代码讲解教程 ``` -### 原版 (`cDNA_segmentation.py`) +--- -完整实现,参照MATLAB代码 `NewGridAndCV/`: +## 两个Python实现 -| 模块 | 方法 | -|------|------| -| 网格划分 | 投影 → 自相关估间距 → 白顶帽去背景 → Otsu → 质心提取 | -| 阈值分割 | 人工固定阈值、Otsu自动阈值、迭代阈值 | -| 去噪 | TV全变分去噪(Chambolle投影算法) | -| 后处理 | 去小连通域 + 保留最大连通域 | +### 简化版 `cDNA_gridding_simple.py`(课堂主讲) -### 简化版 (`cDNA_gridding_simple.py`) ★ 课堂主讲 - -算法3步即可理解,与原版误差为 **0像素**: +**算法思路**(初中学历即可理解): ``` 1. 灰度图 → 每列/行灰度值求和 → 投影曲线 -2. 阈值 X = (max - min) × 10%,曲线减 X -3. 正=斑点,负=空隙 → 过零点配对 → 中点即划线位置 +2. 阈值 X = (max - min) × 10%,曲线减去 X +3. 正 = 斑点,负 = 空隙 → 找过零点 → 配对取中点 → 划线 ``` ---- - -## 运行 +**运行**: ```bash -# 原版(需要 numpy, scipy, skimage, PIL, matplotlib) -python src/cDNA_segmentation.py - -# 简化版(依赖同上) -python src/cDNA_gridding_simple.py +cd src +python cDNA_gridding_simple.py +# 输出:results_simple/gridding_simple.png ``` -Python 环境:`my_env`(Anaconda),路径 `D:\ProgramData\anaconda3\envs\my_env` +**特点**: ---- +- 约 150 行代码,带详细中文注释 +- 核心逻辑仅 30 行 +- 与原版网格线位置误差为 **0 像素** +- `find_gap_lines` 函数:减阈值 → 判断正负 → 找过零点 → 配对空隙中点 -## 参考资料 +### 原版 `cDNA_segmentation.py`(完整实现) -### 参考论文 +**包含模块**: -| 论文 | 作者 | 来源 | +| 模块 | 算法 | 依赖 | |------|------|------| -| 高污染基因芯片图像的网格划分 | 芦碧波 | 河南理工大学学报, 2019 | -| 低对比度cDNA图像分割的局部水平集方法 | 芦碧波等 | 中国图象图形学报, 2014 | +| 网格划分 | 投影 → 自相关 → 白顶帽 → Otsu → 质心 | numpy, scipy, skimage | +| 阈值分割 | 人工阈值、Otsu 自动阈值、迭代阈值 | 同上 | +| 去噪 | TV 全变分去噪(Chambolle 投影) | 同上 | +| 后处理 | 去小连通域、保留最大连通域 | 同上 | -### MATLAB参考代码 +**运行**: -`参考资料/NewGridAndCV/` — MathWorks官方示例改编版,含网格划分与Chan-Vese水平集分割。 +```bash +cd src +python cDNA_segmentation.py +# 输出:results/ 下 6 张图 +``` -### 数据来源 +**输出文件**: -`cDNA图像处理实例/数据/cDNA/` — 源自GEO数据库(GSM16390),Cy3/Cy5双通道荧光标记。 +| 文件 | 内容 | +|------|------| +| `result_gridding.png` | 网格划分:原图+投影曲线+直方图 | +| `result_gridding_overlay.png` | 网格线叠加到原图 | +| `result_threshold_compare.png` | 三种阈值方法(人工/Otsu/迭代)对比 | +| `result_iterative_convergence.png` | 迭代阈值收敛曲线 | +| `result_full_segmentation.png` | 全图逐块 Otsu 分割结果 | +| `result_I_bw.png` | 最终二值图 | --- -## 结果对比 +## 两版对比 -| | 原版(自相关+白顶帽) | 简化版(投影+阈值+过零点) | +| | 简化版 | 原版 | |---|---|---| -| 算法复杂度 | 高(须懂自相关/形态学) | 低(加减乘除即可理解) | -| 网格线数量 | 22×22 | 22×22 | +| 功能 | 仅画网格线 | 网格 + 分割 + 去噪 | +| 核心算法 | 加减乘除 | 自相关 + 形态学 + Otsu | +| 代码行数 | 150 | 430 | +| 检测网格线数 | 22×22 | 22×22 | | 线条位置 | 42, 77, 112, … | 42, 77, 112, … | -| 误差 | — | **0像素** | +| **误差** | **0 像素** | — | -简化版虽算法极简,但精度与原版完全一致,非常适合课堂讲解和教学演示。 +--- + +## 技术文档 + +- `docs/gridding_simple_tutorial.md` — 简化版 190 行逐行讲解,含 ASCII 图解 +- `results_simple/flowchart.drawio` — 算法流程图,用 Draw.io 打开 + +## 输入数据 + +`cDNA.png`(820×820 RGB,来自 GEO 数据库 GSM16390,Cy3/Cy5 双色荧光) + +## 运行环境 + +Python 3.10 + numpy, scipy, scikit-image, matplotlib, Pillow + +## 参考文献 + +- 芦碧波等. 低对比度 cDNA 图像分割的局部水平集方法. 中国图象图形学报, 2014. +- 芦碧波. 高污染基因芯片图像的网格划分. 河南理工大学学报, 2019.