cDNA 微阵列图像处理作业

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


项目结构

src/
├── cDNA_segmentation.py          # 原版:网格划分 + 三种阈值分割 + TV去噪
└── cDNA_gridding_simple.py       # 简化版:仅网格划分,用于课堂讲解

results/                          # 原版输出(6张PNG
results_simple/                   # 简化版输出(网格叠加图 + 流程图)
docs/
└── gridding_simple_tutorial.md   # 简化版逐行代码讲解教程

两个Python实现

简化版 cDNA_gridding_simple.py(课堂主讲)

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

1. 灰度图 → 每列/行灰度值求和 → 投影曲线
2. 阈值 X = (max - min) × 10%,曲线减去 X
3. 正 = 斑点,负 = 空隙 → 找过零点 → 配对取中点 → 划线

运行

cd src
python cDNA_gridding_simple.py
# 输出:results_simple/gridding_simple.png

特点

  • 约 150 行代码,带详细中文注释
  • 核心逻辑仅 30 行
  • 与原版网格线位置误差为 0 像素
  • find_gap_lines 函数:减阈值 → 判断正负 → 找过零点 → 配对空隙中点

原版 cDNA_segmentation.py(完整实现)

包含模块

模块 算法 依赖
网格划分 投影 → 自相关 → 白顶帽 → Otsu → 质心 numpy, scipy, skimage
阈值分割 人工阈值、Otsu 自动阈值、迭代阈值 同上
去噪 TV 全变分去噪(Chambolle 投影) 同上
后处理 去小连通域、保留最大连通域 同上

运行

cd src
python cDNA_segmentation.py
# 输出:results/ 下 6 张图

输出文件

文件 内容
result_gridding.png 网格划分:原图+投影曲线+直方图
result_gridding_overlay.png 网格线叠加到原图
result_threshold_compare.png 三种阈值方法(人工/Otsu/迭代)对比
result_iterative_convergence.png 迭代阈值收敛曲线
result_full_segmentation.png 全图逐块 Otsu 分割结果
result_I_bw.png 最终二值图

两版对比

简化版 原版
功能 仅画网格线 网格 + 分割 + 去噪
核心算法 加减乘除 自相关 + 形态学 + Otsu
代码行数 150 430
检测网格线数 22×22 22×22
线条位置 42, 77, 112, … 42, 77, 112, …
误差 0 像素

技术文档

  • docs/gridding_simple_tutorial.md — 简化版 190 行逐行讲解,含 ASCII 图解
  • results_simple/flowchart.drawio — 算法流程图,用 Draw.io 打开

输入数据

cDNA.png820×820 RGB,来自 GEO 数据库 GSM16390Cy3/Cy5 双色荧光)

运行环境

Python 3.10 + numpy, scipy, scikit-image, matplotlib, Pillow

参考文献

  • 芦碧波等. 低对比度 cDNA 图像分割的局部水平集方法. 中国图象图形学报, 2014.
  • 芦碧波. 高污染基因芯片图像的网格划分. 河南理工大学学报, 2019.
S
Description
No description provided
Readme 12 MiB
Languages
MATLAB 48.9%
HTML 33%
Python 18.1%