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
2026-05-08 16:30:32 +08:00

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 张可视化图表
    1. 网格线叠加原图
    2. 列投影曲线
    3. 行投影曲线
    4. 灰度直方图 + Otsu 阈值
    5. 分割结果(后处理前)
    6. 后处理结果
  • 统计信息:检测到的斑点数、Otsu 阈值、网格尺寸等

输入数据

  • cDNA.png820×820 RGB,来自 GEO 数据库 GSM16390Cy3/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
S
Description
No description provided
Readme 15 MiB
Languages
MATLAB 38.9%
HTML 30.8%
Python 25.4%
CSS 4.9%