Files
cDNA-image-processing/README.md
T
Serendipity 7ec449ce3f docs: 重写README,聚焦Python实现
- 以两个Python脚本为核心
- 两版对比表格
- 输出文件说明
- 运行命令
2026-05-06 22:40:14 +08:00

111 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cDNA 微阵列图像处理作业
> 刘航宇 | 河南理工大学计算机学院 | 2026
---
## 项目结构
```
src/
├── cDNA_segmentation.py # 原版:网格划分 + 三种阈值分割 + TV去噪
└── cDNA_gridding_simple.py # 简化版:仅网格划分,用于课堂讲解
results/ # 原版输出(6张PNG)
results_simple/ # 简化版输出(网格叠加图 + 流程图)
docs/
└── gridding_simple_tutorial.md # 简化版逐行代码讲解教程
```
---
## 两个Python实现
### 简化版 `cDNA_gridding_simple.py`(课堂主讲)
**算法思路**(初中学历即可理解):
```
1. 灰度图 → 每列/行灰度值求和 → 投影曲线
2. 阈值 X = (max - min) × 10%,曲线减去 X
3. 正 = 斑点,负 = 空隙 → 找过零点 → 配对取中点 → 划线
```
**运行**
```bash
cd src
python cDNA_gridding_simple.py
# 输出:results_simple/gridding_simple.png
```
**特点**
- 约 150 行代码,带详细中文注释
- 核心逻辑仅 30 行
- 与原版网格线位置误差为 **0 像素**
- `find_gap_lines` 函数:减阈值 → 判断正负 → 找过零点 → 配对空隙中点
### 原版 `cDNA_segmentation.py`(完整实现)
**包含模块**
| 模块 | 算法 | 依赖 |
|------|------|------|
| 网格划分 | 投影 → 自相关 → 白顶帽 → Otsu → 质心 | numpy, scipy, skimage |
| 阈值分割 | 人工阈值、Otsu 自动阈值、迭代阈值 | 同上 |
| 去噪 | TV 全变分去噪(Chambolle 投影) | 同上 |
| 后处理 | 去小连通域、保留最大连通域 | 同上 |
**运行**
```bash
cd src
python cDNA_segmentation.py
# 输出:results/ 下 6 张图
```
**输出文件**
| 文件 | 内容 |
|------|------|
| `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` | 最终二值图 |
---
## 两版对比
| | 简化版 | 原版 |
|---|---|---|
| 功能 | 仅画网格线 | 网格 + 分割 + 去噪 |
| 核心算法 | 加减乘除 | 自相关 + 形态学 + Otsu |
| 代码行数 | 150 | 430 |
| 检测网格线数 | 22×22 | 22×22 |
| 线条位置 | 42, 77, 112, … | 42, 77, 112, … |
| **误差** | **0 像素** | — |
---
## 技术文档
- `docs/gridding_simple_tutorial.md` — 简化版 190 行逐行讲解,含 ASCII 图解
- `results_simple/flowchart.drawio` — 算法流程图,用 Draw.io 打开
## 输入数据
`cDNA.png`820×820 RGB,来自 GEO 数据库 GSM16390Cy3/Cy5 双色荧光)
## 运行环境
Python 3.10 + numpy, scipy, scikit-image, matplotlib, Pillow
## 参考文献
- 芦碧波等. 低对比度 cDNA 图像分割的局部水平集方法. 中国图象图形学报, 2014.
- 芦碧波. 高污染基因芯片图像的网格划分. 河南理工大学学报, 2019.