Serendipity 3ca079a980 refactor: 项目目录结构重组
- 中文目录名改为英文:cDNA图像处理实例→examples,参考资料→references
- web→app(Flask应用标准命名)
- 输出目录平移到 data/output/simple/ 和 data/output/full/
- 输入图像统一到 data/input/
- 构建脚本移到 scripts/
- 源码文件改用 snake_case 命名
- 更新所有文件路径引用和文档
2026-07-16 20:59:58 +08:00
2026-07-16 20:59:58 +08:00
2026-07-16 20:59:58 +08:00
2026-07-16 20:59:58 +08:00
2026-07-16 20:59:58 +08:00
2026-07-16 20:59:58 +08:00
2026-07-16 20:59:58 +08:00
2026-07-16 20:59:58 +08:00

cDNA 微阵列图像处理作业

刘航宇 | 河南理工大学计算机学院 | 2026


项目概述

河南理工大学计算机学院图像处理课程作业。Python 实现 cDNA 微阵列图像的网格划分阈值分割,配套 Web 可视化界面和 Windows 可执行文件(exe)。


项目结构

cDNA微阵列图像处理作业/
├── src/
│   ├── segmentation.py              # 原版:网格划分 + 三种阈值分割 + TV去噪
│   └── gridding_simple.py           # 简化版:仅网格划分,用于课堂讲解
│
├── app/                              # Flask Web 应用
│   ├── main.py                       # Flask 主程序
│   ├── launcher.py                   # PyInstaller 打包入口
│   ├── templates/index.html          # 前端页面
│   └── static/style.css              # 样式文件
│
├── scripts/
│   └── build.py                      # PyInstaller 打包脚本
│
├── data/
│   ├── input/                        # 输入图像
│   │   └── cDNA.png
│   └── output/                       # 生成结果
│       ├── simple/                   # 简化版输出(6张图)
│       └── full/                     # 原版输出(6张图)
│
├── examples/                         # 课程示例数据(含 pptx + MATLAB demo
├── references/                       # 参考资料
│   ├── papers/                       # 论文 PDF
│   └── matlab/                       # MATLAB 参考代码(NewGridAndCV
│
├── docs/                             # 技术文档
│   ├── cDNA 微阵列网格划分.md
│   ├── 两版差异说明.md
│   └── 依赖库清单.md
│
├── flowchart.drawio                   # 算法流程图
├── README.md
└── CLAUDE.md

快速开始

方式一:Windows 可执行文件(推荐)

下载 dist/cDNA_Analyzer.exe 并双击运行,浏览器自动打开 http://localhost:5000,上传图像即可处理。

方式二:Web 开发模式

# 首次使用需创建虚拟环境
uv venv .venv --python <你的Python路径>
uv pip install numpy scipy scikit-image matplotlib Pillow flask --python .venv/Scripts/python.exe

# 启动
cd app
python main.py
# 浏览器自动打开 http://localhost:5000

方式三:命令行脚本

# 简化版(课堂主讲,约370行)
python src/gridding_simple.py
# 输出:data/output/simple/ 下 6 张图

# 原版(完整实现,约470行)
python src/segmentation.py
# 输出:data/output/full/ 下 6 张图

两种 Python 实现

简化版 src/gridding_simple.py(课堂主讲)

算法思路(初中学历即可理解):

1. 灰度图 → 每列/行灰度值求和 → 投影曲线
2. Otsu 求自适应百分比 = T/255
3. 阈值 X = (max - min) × 百分比,曲线减去 X
4. 正 = 斑点,负 = 空隙 → 找过零点 → 配对取中点 → 划线
5. 逐格 Otsu 分割 + keep_largest_object + remove_small_objects

特点

  • 约 370 行代码,带详细中文注释
  • 核心逻辑仅 30 行
  • 与原版网格线位置误差为 0 像素
  • 完全自动化,无需人工设定参数

原版 src/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 scripts/build.py
# 输出:dist/cDNA_Analyzer.exe(约 68MB

打包配置已优化,排除了 torch、pandas 等无关重量级包。


运行环境

  • Python: 3.13uv 虚拟环境 .venv/
  • 依赖: 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 16 MiB
Languages
MATLAB 38.8%
HTML 30.8%
Python 25.4%
CSS 5%