Files
micro_plastic/README.md
2026-04-14 08:57:29 +08:00

311 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 高光谱塑料分类工具
![CC BY-NC](https://i.creativecommons.org/l/by-nc/4.0/88x31.png)
[![Python Version](https://img.shields.io/badge/python-3.12%2B-blue)](https://www.python.org/)
## 基于高光谱成像和深度学习的微塑料材料分类与识别工具
### 功能特性
- 支持BIL格式高光谱数据读取和处理
- 使用Cellpose/UNet模型进行图像分割和掩膜生成
- 支持9种塑料材料分类识别ABS、HDPE、LDPE、PA6、PET、PP、PS、PTFE、PVC
- 二次分类支持HDPE/LDPE精细区分
- 背景校正和光谱特征提取
- 自动波长重采样(支持不同波段数的高光谱相机)
- 智能滤纸区域检测
- 输出ENVI标准格式分类结果
- 波段选择工具基于ANOVA F-score和LDA准则
- 滤纸背景样本光谱提取工具
### 安装
#### 前置要求
- Python 3.12+
- CUDA (可选用于GPU加速)
- 足够的内存处理高光谱数据建议16GB+
- 固态硬盘(推荐,处理大文件时更高效)
#### 安装步骤
1. 克隆仓库:
```bash
git clone <repository_url>
cd micro_plastic
```
2. 安装依赖:
```bash
pip install -r requirements.txt
```
### 使用方法
#### 主程序:高光谱塑料分类
**基本用法**
```bash
python main.py --bil_path /path/to/input.bil --output_path /path/to/output.dat --model_path /path/to/model.m
```
**参数说明**
| 参数 | 必需 | 默认值 | 描述 |
|-----------------|------|-----------------------------------------------------|--------------------------------|
| `--bil_path` | 是 | 无 | 输入BIL文件路径 |
| `--output_path` | 是 | 无 | 输出文件路径(.dat格式 |
| `--model_path` | 是 | 无 | 主分类模型路径(.m文件 |
**示例**
```bash
# 基础用法
python main.py --bil_path ./data/input.bil --output_path ./results/output.dat --model_path ./models/svm.m
# Windows系统示例
python main.py --bil_path "C:\Data\test.bil" --output_path "C:\Results\output.dat" --model_path ".\models\svm.m"
```
#### 波段选择工具
基于ANOVA F-score和LDA准则选择最优波段组合用于假彩色合成
```bash
python chose_bands.py --csv /path/to/spectral_data.csv --top_k 30 --top_triplets 10
```
**参数说明**
| 参数 | 必需 | 默认值 | 描述 |
|-------------------|------|--------|-----------------------------------------------|
| `--csv` | 是 | 无 | 输入CSV文件首列为类别其余为光谱列 |
| `--top_k` | 否 | 30 | 预筛选的最佳单波段数量 |
| `--top_triplets` | 否 | 10 | 输出的最佳三波段组合数量 |
| `--map_order` | 否 | auto | RGB映射顺序auto或wavelength_bgr |
#### 滤纸背景样本提取工具
从滤纸区域提取背景样本光谱(用于构建背景训练数据集):
```bash
python fliter_sample_spectral.py
```
该脚本需要修改内部路径配置:
- `bil_path_or_folder`: 输入BIL文件或目录路径
- `output_csv_path`: 输出CSV文件路径
- `num_masks`: 每个图像生成的背景样本数量默认50
- `rng_seed`: 随机种子,保证可复现性
### 项目结构
```
micro_plastic/
├── main.py # 主程序入口(高光谱分类流程)
├── main_batch_nosample.py # 批量处理版本(无样本生成)
├── mainv1.py # 主程序历史版本
├── maintest.py # 测试版本
├── chose_bands.py # 波段选择工具
├── fliter_sample_spectral.py # 滤纸背景样本提取工具
├── bil2rgb.py # BIL转RGB模块
├── shape_spectral.py # 光谱与形状特征提取
├── shape_spectral_background.py # 背景光谱计算
├── extact_shape.py # 形状特征提取与背景校正
├── mask.py # 图像分割与掩膜生成Cellpose
├── onlyspectral_background.py # 纯光谱背景处理
├── only_mask.py # 掩膜处理工具
├── get_glcm.py # GLCM纹理特征提取
├── outputs2dataframe.py # 结果转换为DataFrame
├── 多模型.py # 多模型集成工具
├── spectral_shape_class.py # 光谱形状分类工具
├── classification_model/ # 分类模型库
│ ├── Classification/ # 分类算法
│ │ ├── Cls.py # 主要分类接口SVM/RF/XGB等
│ │ ├── ClassicCls.py # 经典机器学习分类器
│ │ ├── ClassicClsHY.py # 经典分类器HY版本
│ │ ├── DeepCls.py # 深度学习分类器
│ │ ├── CNN.py # CNN模型
│ │ ├── CNN_SAE.py # CNN+SAE模型
│ │ ├── CNN_Transfomer.py # CNN+Transformer模型
│ │ ├── CNN_HYper.py # 超参数优化CNN
│ │ ├── CNN_deepseek.py # DeepSeek优化CNN
│ │ ├── SAE.py # 自编码器
│ │ └── *_网格搜索.py # 网格搜索优化版本
│ ├── WaveSelect/ # 波段选择算法
│ │ ├── Pca.py # 主成分分析
│ │ ├── Spa.py # 连续投影算法
│ │ ├── Spa_acc.py # 加速SPA
│ │ ├── GA.py # 遗传算法
│ │ ├── Cars.py # CARS算法
│ │ ├── ReliefF.py # ReliefF算法
│ │ ├── Uve.py # UVE算法
│ │ ├── MRMR.py # 最大相关最小冗余
│ │ ├── Lar.py # LARS算法
│ │ └── centry.py # 信息熵算法
│ ├── Preprocessing/ # 预处理
│ │ └── Preprocessing.py # 光谱预处理方法
│ ├── DataLoad/ # 数据加载
│ │ └── DataLoad.py # 数据加载接口
│ ├── Evaluate/ # 评估
│ │ └── RgsEvaluate.py # 回归评估指标
│ └── Parallel/ # 并行处理
│ ├── predict_plastic.py # 塑料分类预测接口
│ └── test.py # 测试脚本
├── modelsave/ # 预训练模型存储
│ └── svm.m # 默认SVM分类模型
├── requirements.txt # 项目依赖
└── README.md # 项目说明
```
### 输入输出格式
#### 输入文件格式
- **BIL格式高光谱数据文件** (`.bil`)Band Interleaved by Line格式
- **HDR头文件** (`.hdr`):包含图像尺寸、波段数、波长等信息
#### 输出文件格式
- **ENVI分类结果文件** (`.dat`):分类结果图像
- **ENVI头文件** (`.hdr`):包含类别定义、像素大小等信息
**输出类别定义**
| 像素值 | 类别名称 | 说明 |
|--------|------------|--------------------|
| 0 | background | 背景/滤纸 |
| 1 | ABS | 丙烯腈-丁二烯-苯乙烯 |
| 2 | HDPE | 高密度聚乙烯 |
| 3 | LDPE | 低密度聚乙烯 |
| 4 | PA6 | 尼龙6 |
| 5 | PET | 聚对苯二甲酸乙二醇酯 |
| 6 | PP | 聚丙烯 |
| 7 | PS | 聚苯乙烯 |
| 8 | PTFE | 聚四氟乙烯 |
| 9 | PVC | 聚氯乙烯 |
### 处理流程
1. **输入验证**检查BIL/HDR文件完整性验证波段数需≥160波段
2. **HDR补齐**:自动添加波长信息(如缺失)
3. **RGB生成**将BIL数据转换为RGB图像使用波段9, 59, 159
4. **图像分割**使用Cellpose生成微塑料掩膜和滤纸掩膜
5. **特征提取**:提取每个颗粒的光谱特征和形状特征
6. **背景校正**:用滤纸背景光谱对样本光谱进行校正
7. **波长重采样**如需要重采样到训练相机波长237通道
8. **数据清理**:过滤面积<500像素、轮廓点不足的样本
9. **主分类**使用SVM等模型进行9类分类
10. **二次分类**对HDPE/LDPE类别进行精细分类
11. **后处理**识别并修正类别7/8中的阴影误分类
12. **轮廓收缩**对轮廓进行1像素腐蚀避免相邻粘连
13. **结果保存**输出ENVI格式分类结果
### 分类模型说明
#### 支持的分类器类型
| 模型类型 | 说明 | 适用场景 |
|----------|-------------------------|----------------------|
| SVM | 支持向量机 | 小样本、高维特征 |
| RF | 随机森林 | 通用场景、特征重要性分析 |
| XGBoost | 极端梯度提升 | 大规模数据、高精度需求 |
| LightGBM | 轻量梯度提升 | 大规模数据、快速训练 |
| CNN | 卷积神经网络 | 深度特征学习 |
| SAE+CNN | 堆叠自编码器+CNN | 无监督预训练+微调 |
#### 波段选择算法
| 算法 | 说明 |
|----------|-----------------------------|
| PCA | 主成分分析降维 |
| SPA | 连续投影算法 |
| CARS | 竞争性自适应重加权采样 |
| GA | 遗传算法特征选择 |
| ReliefF | 基于实例的特征权重算法 |
| UVE | 无信息变量消除法 |
| MRMR | 最大相关最小冗余 |
### 依赖库
**核心依赖**
- `numpy` - 数值计算
- `pandas` - 数据处理
- `opencv-python` - 图像处理
- `scikit-learn` - 机器学习
- `torch`/`torchvision` - 深度学习框架
- `spectral` - 高光谱数据处理
- `cellpose` - 细胞/颗粒分割通过mask.py集成
- `plantcv` - 植物/颗粒计算机视觉
**其他重要依赖**
- `scipy` - 科学计算
- `matplotlib` - 可视化
- `PyWavelets` - 小波变换
- `joblib` - 模型序列化
- `tqdm` - 进度条
- `xgboost`/`lightgbm`/`catboost` - 梯度提升库
完整依赖列表请查看 `requirements.txt`
### 训练相机波长
模型训练使用的237波段波长范围912.36nm - 1706.6nm),系统自动进行波长对齐和重采样。
### 常见问题
1. **运行时报错"ModuleNotFoundError"**
确保已安装所有依赖:`pip install -r requirements.txt`
2. **处理大型文件时内存不足**
考虑减少处理区域或增加系统内存,建议使用固态硬盘。
3. **BIL文件波段数不足**
程序需要至少160个波段用于RGB生成且推荐237波段以获得最佳分类效果。
4. **分类结果不准确**
- 检查输入数据质量
- 确认HDR文件包含正确的波长信息
- 验证模型与当前数据类型匹配
5. **HDR文件缺少波长信息**
程序会自动检测并追加默认波长信息但建议提供完整的HDR文件。
### 开发计划
- [ ] 支持更多高光谱数据格式如ENVI、TIFF
- [ ] 添加可视化界面
- [ ] 集成更多深度学习模型
- [ ] 支持在线学习/增量学习
- [ ] 添加更多后处理选项
### 许可证
本项目采用 Creative Commons 非商业许可证 (CC BY-NC 4.0)。
### 联系方式
作者:北京依锐思
邮箱:[huilai_zhang@126.com](mailto:huilai_zhang@126.com)
项目地址:[https://github.com/yourusername/micro_plastic](https://github.com/yourusername/micro_plastic)
### 更新日志
#### v1.1.0 (2026-04-14)
- 新增波段选择工具 `chose_bands.py`
- 新增滤纸背景样本提取工具 `fliter_sample_spectral.py`
- 优化波长重采样逻辑,支持更多高光谱相机
- 改进类别7/8的后处理阴影识别算法
- 添加轮廓收缩功能,避免相邻颗粒粘连
- 更新项目文档和结构说明
#### v1.0.0 (2025-08-26)
- 初始版本发布
- 支持BIL格式高光谱数据处理
- 集成Cellpose分割和SVM分类
- 输出ENVI格式分类结果
- 支持9种塑料材料分类