# cDNA 微阵列图像处理作业 > **作者**: 刘航宇 | 河南理工大学计算机学院 | 2026 --- ## 作业内容 本作业来自《图像处理实例1:cDNA图像分析》,完成以下三个任务: | 任务 | 内容 | 实现状态 | |------|------|----------| | 1 | 分析涉及的图像处理技术 | 见PPTX | | 2 | 编写阈值分割代码(人工阈值 / 迭代阈值 / Otsu) | `src/cDNA_segmentation.py` | | 3 | 选取cDNA图像进行分割 | 对cDNA.png完成网格划分+分割 | --- ## 我的Python实现 ### 文件结构 ``` src/ ├── cDNA_segmentation.py # 原版:完整流程(网格划分 + 阈值分割 + 可视化) └── cDNA_gridding_simple.py # 简化版:仅划线,适合课堂讲解 results/ ← 原版输出 results_simple/ ← 简化版输出 ``` ### 原版 (`cDNA_segmentation.py`) 完整实现,参照MATLAB代码 `NewGridAndCV/`: | 模块 | 方法 | |------|------| | 网格划分 | 投影 → 自相关估间距 → 白顶帽去背景 → Otsu → 质心提取 | | 阈值分割 | 人工固定阈值、Otsu自动阈值、迭代阈值 | | 去噪 | TV全变分去噪(Chambolle投影算法) | | 后处理 | 去小连通域 + 保留最大连通域 | ### 简化版 (`cDNA_gridding_simple.py`) ★ 课堂主讲 算法3步即可理解,与原版误差为 **0像素**: ``` 1. 灰度图 → 每列/行灰度值求和 → 投影曲线 2. 阈值 X = (max - min) × 10%,曲线减 X 3. 正=斑点,负=空隙 → 过零点配对 → 中点即划线位置 ``` --- ## 运行 ```bash # 原版(需要 numpy, scipy, skimage, PIL, matplotlib) python src/cDNA_segmentation.py # 简化版(依赖同上) python src/cDNA_gridding_simple.py ``` Python 环境:`my_env`(Anaconda),路径 `D:\ProgramData\anaconda3\envs\my_env` --- ## 参考资料 ### 参考论文 | 论文 | 作者 | 来源 | |------|------|------| | 高污染基因芯片图像的网格划分 | 芦碧波 | 河南理工大学学报, 2019 | | 低对比度cDNA图像分割的局部水平集方法 | 芦碧波等 | 中国图象图形学报, 2014 | ### MATLAB参考代码 `参考资料/NewGridAndCV/` — MathWorks官方示例改编版,含网格划分与Chan-Vese水平集分割。 ### 数据来源 `cDNA图像处理实例/数据/cDNA/` — 源自GEO数据库(GSM16390),Cy3/Cy5双通道荧光标记。 --- ## 结果对比 | | 原版(自相关+白顶帽) | 简化版(投影+阈值+过零点) | |---|---|---| | 算法复杂度 | 高(须懂自相关/形态学) | 低(加减乘除即可理解) | | 网格线数量 | 22×22 | 22×22 | | 线条位置 | 42, 77, 112, … | 42, 77, 112, … | | 误差 | — | **0像素** | 简化版虽算法极简,但精度与原版完全一致,非常适合课堂讲解和教学演示。