# 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 数据库 GSM16390,Cy3/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`