Files
cDNA-image-processing/README.md
T
Serendipity e21595e72c docs: 更新README,新增Web应用和打包说明
- 新增Flask Web应用介绍和三种运行方式
- 新增PyInstaller打包流程
- 更新项目结构,包含web/、build_exe.py等
- 精简两版实现描述,突出各自特点

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 21:41:03 +08:00

157 lines
4.7 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
---
## 项目概述
河南理工大学计算机学院图像处理课程作业。Python 实现 cDNA 微阵列图像的**网格划分**与**阈值分割**,配套 Web 可视化界面和 Windows 可执行文件(exe)。
---
## 项目结构
```
cDNA微阵列图像处理作业/
├── src/
│ ├── cDNA_segmentation.py # 原版:网格划分 + 三种阈值分割 + TV去噪
│ └── cDNA_gridding_simple.py # 简化版:仅网格划分,用于课堂讲解
├── web/ # Flask Web 应用
│ ├── app.py # Flask 主程序
│ ├── launcher.py # PyInstaller 打包入口
│ ├── templates/index.html # 前端页面
│ └── static/style.css # 样式文件
├── build_exe.py # PyInstaller 打包脚本
├── cDNA_Analyzer.spec # PyInstaller spec 配置
├── flowchart.drawio # 算法流程图(用 Draw.io 打开)
├── results/ # 原版输出图像(6张)
├── results_simple/ # 简化版输出图像(6张)
├── docs/ # 技术文档
│ ├── cDNA 微阵列网格划分.md # 算法详解
│ ├── 两版差异说明.md # 简化版 vs 原版对比
│ └── 依赖库清单.md # Python 依赖
├── cDNA图像处理实例/ # 课程示例数据
└── 参考资料/ # MATLAB 参考代码 + 论文 PDF
```
---
## 快速开始
### 方式一:Windows 可执行文件(推荐)
下载 `dist/cDNA_Analyzer.exe` 并双击运行,浏览器自动打开 `http://localhost:5000`,上传图像即可处理。
### 方式二:Web 开发模式
```bash
cd web
python app.py
# 浏览器自动打开 http://localhost:5000
```
### 方式三:命令行脚本
```bash
# 简化版(课堂主讲,约150行)
python src/cDNA_gridding_simple.py
# 输出:results_simple/ 下 6 张图
# 原版(完整实现,430行)
python src/cDNA_segmentation.py
# 输出:results/ 下 6 张图
```
---
## 两种 Python 实现
### 简化版 `cDNA_gridding_simple.py`(课堂主讲)
**算法思路**(初中学历即可理解):
```
1. 灰度图 → 每列/行灰度值求和 → 投影曲线
2. Otsu 求自适应百分比 = T/255
3. 阈值 X = (max - min) × 百分比,曲线减去 X
4. 正 = 斑点,负 = 空隙 → 找过零点 → 配对取中点 → 划线
5. 逐格 Otsu 分割 + keep_largest_object + remove_small_objects
```
**特点**
- 约 150 行代码,带详细中文注释
- 核心逻辑仅 30 行
- 与原版网格线位置误差为 **0 像素**
- 完全自动化,无需人工设定参数
### 原版 `cDNA_segmentation.py`(完整实现)
| 模块 | 算法 | 参照 |
|------|------|------|
| 网格划分 | 投影 → 自相关 → 白顶帽 → Otsu → 质心 | MATLAB `GriddingAndCV.m` |
| 阈值分割 | 人工阈值、Otsu 自动阈值、迭代阈值 | — |
| 去噪 | TV 全变分去噪(Chambolle 投影) | MATLAB `tvdenoise.m` |
| 后处理 | 去小连通域、保留最大连通域 | MATLAB `choice.m` |
---
## Web 应用功能
- **图像上传**:支持 PNG、JPG、TIFF 等格式,最大 50MB
- **自动处理**:网格划分 + 逐格分割 + 后处理
- **6 张可视化图表**
1. 网格线叠加原图
2. 列投影曲线
3. 行投影曲线
4. 灰度直方图 + Otsu 阈值
5. 分割结果(后处理前)
6. 后处理结果
- **统计信息**:检测到的斑点数、Otsu 阈值、网格尺寸等
---
## 输入数据
- `cDNA.png`820×820 RGB,来自 GEO 数据库 GSM16390Cy3/Cy5 双色荧光)
- 23×23 斑点阵列,斑点间距约 35px,每斑点约 18px 宽
---
## 打包说明
使用 PyInstaller 将 Web 应用打包为单个 exe 文件:
```bash
python build_exe.py
# 输出:dist/cDNA_Analyzer.exe(约 68MB
```
打包配置已优化,排除了 torch、pandas 等无关重量级包。
---
## 运行环境
- **Python**: `D:\ProgramData\anaconda3\envs\my_env`
- **依赖**: numpy, scipy, scikit-image, matplotlib, Pillow, Flask
---
## 参考文献
- 芦碧波等. 低对比度 cDNA 图像分割的局部水平集方法. 中国图象图形学报, 2014.
- 芦碧波. 高污染基因芯片图像的网格划分. 河南理工大学学报, 2019.
---
## 仓库
- **首选**(局域网 SSH: `ssh://git@192.168.5.8:2222/Serendipity/cDNA-image-processing.git`
- **备选**(外网 HTTPS: `https://lhy-git.liuhangyv.top/Serendipity/cDNA-image-processing.git`