docs: 重写README突出作业实现,新增CLAUDE.md
README: 以"我的Python实现"为中心,对比原版与简化版 CLAUDE.md: 项目概述、算法要点、文件结构
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# CLAUDE.md — cDNA微阵列图像处理作业
|
||||
|
||||
## 项目概述
|
||||
|
||||
河南理工大学计算机学院图像处理课程作业。用Python实现cDNA微阵列图像的网格划分与阈值分割。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
src/
|
||||
├── cDNA_segmentation.py ← 原版:完整处理流程
|
||||
└── cDNA_gridding_simple.py ← 简化版:仅划线,用于课堂讲解 ★
|
||||
|
||||
results/ ← 原版输出(6张图)
|
||||
results_simple/ ← 简化版输出(1张图)
|
||||
|
||||
cDNA图像处理实例/数据/cDNA/ ← 输入图像 + MATLAB示例
|
||||
参考资料/NewGridAndCV/ ← MATLAB参考实现
|
||||
```
|
||||
|
||||
## 两个Python实现
|
||||
|
||||
### 简化版 (`cDNA_gridding_simple.py`) — 课堂主讲
|
||||
|
||||
- 算法:投影求和 → (max-min)×10%阈值 → 过零点配对 → 划线
|
||||
- 约150行,带详细中文注释,适合课堂讲解
|
||||
- 输出:`results_simple/gridding_simple.png`
|
||||
- **与原版网格线位置完全一致(误差0像素)**
|
||||
|
||||
### 原版 (`cDNA_segmentation.py`) — 完整实现
|
||||
|
||||
- 网格划分:自相关+白顶帽+Otsu+质心(参照MATLAB `GriddingAndCV.m`)
|
||||
- 三种阈值分割:人工阈值、Otsu、迭代阈值
|
||||
- TV去噪(Chambolle投影算法,参照 `tvdenoise.m`)
|
||||
|
||||
## 算法要点
|
||||
|
||||
简化版核心逻辑(`find_gap_lines`函数):
|
||||
- 减阈值后:正=斑点区域,负=空隙
|
||||
- 过零点交替出现:+→-(离开斑点),-→+(进入下一个斑点)
|
||||
- 配对"离开→进入",中点=空隙中央=划线位置
|
||||
|
||||
## 输入数据
|
||||
|
||||
- `cDNA.png`:820×820 RGB,23×23斑点阵列,Cy3/Cy5双色荧光
|
||||
- 斑点间距约35px,每斑点约18px宽
|
||||
|
||||
## 运行环境
|
||||
|
||||
Python:`D:\ProgramData\anaconda3\envs\my_env`
|
||||
依赖:numpy, scipy, scikit-image, matplotlib, Pillow
|
||||
|
||||
## 仓库
|
||||
|
||||
Gitea: `ssh://git@192.168.5.8:2222/Serendipity/cDNA-image-processing.git`
|
||||
@@ -1,118 +1,97 @@
|
||||
# cDNA 微阵列图像处理作业资料
|
||||
# cDNA 微阵列图像处理作业
|
||||
|
||||
## 作业概述
|
||||
|
||||
本次作业涉及 **cDNA 微阵列(基因芯片)图像处理**,主要研究两个核心问题:
|
||||
|
||||
1. **网格划分(Gridding)** - 定位微阵列图像中每个点的精确位置
|
||||
2. **图像分割(Segmentation)** - 区分前景(基因点)与背景
|
||||
> **作者**: 刘航宇 | 河南理工大学计算机学院 | 2026
|
||||
|
||||
---
|
||||
|
||||
## 资料清单
|
||||
## 作业内容
|
||||
|
||||
### 1. 参考论文
|
||||
本作业来自《图像处理实例1:cDNA图像分析》,完成以下三个任务:
|
||||
|
||||
| 文件名 | 作者 | 内容简介 |
|
||||
|--------|------|----------|
|
||||
| `2019-3-高污染基因芯片图像的网格划分_芦碧波.pdf` | 芦碧波 | 提出针对高污染基因芯片的网格划分方法,利用图像增强、分块处理和自动阈值检测来提高鲁棒性 |
|
||||
| `封面+低对比度cDNA图像分割的局部水平集方法_芦碧波.pdf` | 芦碧波、刘利群、张霄宏、林忠华 | 提出基于局部信息的水平集方法,解决低对比度cDNA图像分割问题,引入局部图像拟合能量 |
|
||||
| `显微图像分割.pdf` | - | 显微图像分割相关资料(密码保护,需另存为可读版本) |
|
||||
|
||||
### 2. MATLAB 代码
|
||||
|
||||
#### `NewGridAndCV/` - 网格划分与C-V分割实现
|
||||
|
||||
| 文件名 | 功能说明 |
|
||||
|--------|----------|
|
||||
| `demo_GriddingAndCV.m` | **主程序** - 演示网格划分和Chan-Vese分割的完整流程 |
|
||||
| `GriddingAndCV.m` | 网格划分核心算法,使用自相关估计点间距 |
|
||||
| `cvseg.m` | Chan-Vese 水平集分割算法 |
|
||||
| `chenvese.m` | C-V 模型的另一种实现 |
|
||||
| `tvdenoise.m` | TV(Total Variation)去噪算法 |
|
||||
| `choice.m` | 剔除面积过小的连通区域 |
|
||||
| `choosemaxobj.m` | 保留最大连通区域 |
|
||||
| `contour_bw.m` | 轮廓提取与二值化 |
|
||||
| `fillingholes.m` | 填充孔洞 |
|
||||
| `kappa.m` | 曲率计算 |
|
||||
| `maskcircle2.m` | 圆形掩膜生成 |
|
||||
| `redcolorcontour.m` | 红色轮廓显示 |
|
||||
| `showphi.m` | 显示水平集函数 |
|
||||
|
||||
#### `cDNA图像处理实例/` - 基础示例
|
||||
|
||||
| 文件名 | 功能说明 |
|
||||
|--------|----------|
|
||||
| `图像处理实例.pptx` | 实例讲解PPT |
|
||||
| `数据/cDNA/Demo_cdna.m` | 基础演示代码 |
|
||||
| `数据/cDNA/*.tif` | 测试图像数据 |
|
||||
|
||||
### 3. 图像数据
|
||||
|
||||
| 文件名 | 说明 |
|
||||
|--------|------|
|
||||
| `GSM16390_CH1.tif` | 通道1原始图像(~26MB) |
|
||||
| `GSM16390_CH2.tif` | 通道2原始图像(~26MB) |
|
||||
| `GSM16390_CH2color.tif` | 彩色合成图像(~79MB) |
|
||||
| `*_small.tif` | 上述图像的缩小版本 |
|
||||
| `cDNA.png` | 测试用cDNA图像 |
|
||||
| `I_bw.jpg` | 二值化结果示例 |
|
||||
| `I_griddingout.tif` | 网格划分输出示例 |
|
||||
| 任务 | 内容 | 实现状态 |
|
||||
|------|------|----------|
|
||||
| 1 | 分析涉及的图像处理技术 | 见PPTX |
|
||||
| 2 | 编写阈值分割代码(人工阈值 / 迭代阈值 / Otsu) | `src/cDNA_segmentation.py` |
|
||||
| 3 | 选取cDNA图像进行分割 | 对cDNA.png完成网格划分+分割 |
|
||||
|
||||
---
|
||||
|
||||
## 核心算法简介
|
||||
## 我的Python实现
|
||||
|
||||
### 网格划分算法流程
|
||||
### 文件结构
|
||||
|
||||
```
|
||||
1. 读取图像 → 转灰度
|
||||
2. 计算行/列投影(均值)
|
||||
3. 自相关分析 → 估计点间距
|
||||
4. 形态学滤波 → 去除背景
|
||||
5. 阈值分割 → 标记峰值区域
|
||||
6. 提取质心 → 确定网格点位置
|
||||
src/
|
||||
├── cDNA_segmentation.py # 原版:完整流程(网格划分 + 阈值分割 + 可视化)
|
||||
└── cDNA_gridding_simple.py # 简化版:仅划线,适合课堂讲解
|
||||
|
||||
results/ ← 原版输出
|
||||
results_simple/ ← 简化版输出
|
||||
```
|
||||
|
||||
### Chan-Vese 水平集分割
|
||||
### 原版 (`cDNA_segmentation.py`)
|
||||
|
||||
- **核心思想**:不依赖图像梯度,基于区域统计信息分割
|
||||
- **能量函数**:$E = \mu \cdot Length(C) + \nu \cdot Area(C) + \lambda_1 \int_{inside(C)} |I - c_1|^2 + \lambda_2 \int_{outside(C)} |I - c_2|^2$
|
||||
- **优势**:对模糊边缘和低对比度图像效果好
|
||||
完整实现,参照MATLAB代码 `NewGridAndCV/`:
|
||||
|
||||
### 局部水平集方法(论文贡献)
|
||||
| 模块 | 方法 |
|
||||
|------|------|
|
||||
| 网格划分 | 投影 → 自相关估间距 → 白顶帽去背景 → Otsu → 质心提取 |
|
||||
| 阈值分割 | 人工固定阈值、Otsu自动阈值、迭代阈值 |
|
||||
| 去噪 | TV全变分去噪(Chambolle投影算法) |
|
||||
| 后处理 | 去小连通域 + 保留最大连通域 |
|
||||
|
||||
- 引入局部图像拟合能量 $E^{LIF}$
|
||||
- 使用高斯核 $K_\sigma$ 提取局部信息
|
||||
- 能有效处理灰度不均匀的cDNA图像
|
||||
### 简化版 (`cDNA_gridding_simple.py`) ★ 课堂主讲
|
||||
|
||||
---
|
||||
算法3步即可理解,与原版误差为 **0像素**:
|
||||
|
||||
## 运行环境
|
||||
|
||||
- **MATLAB** R2016b 或更高版本
|
||||
- **需要工具箱**:
|
||||
- Image Processing Toolbox
|
||||
- Signal Processing Toolbox(用于自相关计算)
|
||||
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
```matlab
|
||||
% 1. 进入代码目录
|
||||
cd NewGridAndCV
|
||||
|
||||
% 2. 运行演示
|
||||
demo_GriddingAndCV
|
||||
|
||||
% 3. 或单独运行网格划分
|
||||
GriddingAndCV
|
||||
```
|
||||
1. 灰度图 → 每列/行灰度值求和 → 投影曲线
|
||||
2. 阈值 X = (max - min) × 10%,曲线减 X
|
||||
3. 正=斑点,负=空隙 → 过零点配对 → 中点即划线位置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 参考文献
|
||||
## 运行
|
||||
|
||||
1. 芦碧波. 高污染基因芯片图像的网格划分[J]. 河南理工大学学报(自然科学版), 2019.
|
||||
2. 芦碧波, 刘利群, 张霄宏, 林忠华. 低对比度cDNA图像分割的局部水平集方法[J]. 中国图象图形学报, 2014.
|
||||
```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像素** |
|
||||
|
||||
简化版虽算法极简,但精度与原版完全一致,非常适合课堂讲解和教学演示。
|
||||
|
||||
Reference in New Issue
Block a user