e21595e72c2bb79b2d296f1abfe7f92213d49dd6
- 新增Flask Web应用介绍和三种运行方式 - 新增PyInstaller打包流程 - 更新项目结构,包含web/、build_exe.py等 - 精简两版实现描述,突出各自特点 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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 开发模式
cd web
python app.py
# 浏览器自动打开 http://localhost:5000
方式三:命令行脚本
# 简化版(课堂主讲,约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 张可视化图表:
- 网格线叠加原图
- 列投影曲线
- 行投影曲线
- 灰度直方图 + Otsu 阈值
- 分割结果(后处理前)
- 后处理结果
- 统计信息:检测到的斑点数、Otsu 阈值、网格尺寸等
输入数据
cDNA.png(820×820 RGB,来自 GEO 数据库 GSM16390,Cy3/Cy5 双色荧光)- 23×23 斑点阵列,斑点间距约 35px,每斑点约 18px 宽
打包说明
使用 PyInstaller 将 Web 应用打包为单个 exe 文件:
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
Description
Languages
MATLAB
38.9%
HTML
30.8%
Python
25.4%
CSS
4.9%