Files
micro_plastic/项目交接文档.md
2026-04-14 08:57:29 +08:00

12 KiB
Raw Permalink Blame History

高光谱塑料分类工具 - 项目交接文档


一、项目概述

1.1 项目基本信息

项目属性 内容
项目名称 高光谱塑料分类工具 (Hyperspectral Plastic Classification)
项目目的 基于高光谱成像和深度学习的微塑料材料分类与识别
开发语言 Python 3.12
当前版本 v1.0.0 (2025-08-26)
许可证 Creative Commons 非商业许可证

1.2 核心功能

  • 支持BIL格式高光谱数据读取和处理
  • 使用UNet模型进行图像分割和掩膜生成
  • 支持9种塑料材料分类识别
  • 背景校正和光谱特征提取
  • 输出ENVI标准格式分类结果

1.3 支持的塑料类型

类别编号 材料名称 英文缩写
1 丙烯腈-丁二烯-苯乙烯共聚物 ABS
2 高密度聚乙烯 HDPE
3 低密度聚乙烯 LDPE
4 尼龙6 PA6
5 聚对苯二甲酸乙二醇酯 PET
6 聚丙烯 PP
7 聚苯乙烯 PS
8 聚四氟乙烯 PTFE
9 聚氯乙烯 PVC

二、项目结构

micro_plastic/
├── main.py                          # 主程序入口(核心流程)
├── fliter_sample_spectral.py      # 滤纸背景样本光谱提取工具
├── bil2rgb.py                       # BIL转RGB模块
├── mask.py                          # 图像分割/掩膜生成
├── shape_spectral.py                # 光谱特征提取
├── shape_spectral_background.py     # 背景校正计算
├── extact_shape.py                  # 特征提取工具(含二次分类背景校正)
├── chose_bands.py                   # 波段选择工具
├── get_glcm.py                      # GLCM纹理特征提取
├── only_mask.py                     # 仅掩膜处理
├── spectral_shape_class.py          # 光谱形状分类
├── main_batch_nosample.py           # 批量处理(无样本)
├── maintest.py / mainv1.py          # 测试/旧版本入口
├── 多模型.py                        # 多模型处理脚本
├── time.py                          # 时间相关工具
├── outputs2dataframe.py             # 输出转换工具
├── bil2rgb.py                       # BIL转RGB工具

├── classification_model/            # 分类模型模块
│   ├── Classification/              # 分类算法
│   │   ├── ClassicCls.py           # 经典分类器
│   │   ├── ClassicClsHY.py         # 经典分类器(优化版)
│   │   ├── ClassicCls_网格搜索.py # 网格搜索参数优化
│   │   ├── Cls.py                  # 基础分类器
│   │   ├── Cls_网格搜索.py         # 分类器网格搜索
│   │   ├── Cls_超参数.py           # 超参数调优
│   │   ├── DeepCls.py              # 深度学习分类器
│   │   ├── CNN.py                  # CNN模型
│   │   ├── CNN_deepseek.py         # DeepSeek优化CNN
│   │   ├── CNN_HYper.py            # 超参数CNN
│   │   ├── CNN_SAE.py              # CNN+SAE模型
│   │   ├── CNN_Transfomer.py       # CNN+Transformer
│   │   ├── SAE.py                  # 堆叠自编码器
│   │   └── CNN_网格搜索.py         # CNN网格搜索
│   │
│   ├── WaveSelect/                  # 波长选择算法
│   │   ├── WaveSelcet.py           # 主入口
│   │   ├── Cars.py                 # CARS算法
│   │   ├── GA.py                   # 遗传算法
│   │   ├── Lar.py                  # LARS算法
│   │   ├── MRMR.py                 # 最大相关最小冗余
│   │   ├── Pca.py                  # 主成分分析
│   │   ├── ReliefF.py              # ReliefF算法
│   │   ├── Spa.py                  # SPA算法
│   │   ├── Spa_acc.py              # SPA精确版
│   │   └── Uve.py                  # UVE算法
│   │
│   ├── DataLoad/                    # 数据加载
│   │   └── DataLoad.py             # 数据加载器
│   │
│   ├── Preprocessing/               # 预处理
│   │   └── Preprocessing.py        # 数据预处理
│   │
│   ├── Evaluate/                    # 模型评估
│   │   └── RgsEvaluate.py          # 回归评估
│   │
│   └── Parallel/                    # 并行处理/预测
│       ├── predict_plastic.py      # 塑料预测主入口
│       └── test.py                 # 测试脚本
│
├── README.md                        # 项目说明文档
├── requirements.txt                 # Python依赖列表
└── 项目交接文档.md                   # 本文件

三、技术栈与依赖

3.1 核心依赖库

库名称 版本 用途
torch 2.8.0 深度学习框架
torchvision 0.23.0 图像处理工具
opencv-python 4.12.0 计算机视觉
numpy 2.2.6 数值计算
pandas - 数据处理
scikit-learn 1.6.1 机器学习
scipy 1.15.3 科学计算
matplotlib 3.10.3 数据可视化
spectral - 高光谱数据处理
PyWavelets 1.8.0 小波变换
plantcv - 植物/图像分析

3.2 完整依赖安装

pip install -r requirements.txt

四、核心流程说明

4.1 主程序处理流程 (main.py)

1. 读取BIL格式高光谱数据
   ↓
2. 转换为RGB图像 (bil2rgb.py)
   ↓
3. 使用分割模型生成掩膜 (mask.py)
   ├─ 微塑料掩膜
   └─ 滤纸背景掩膜
   ↓
4. 提取光谱特征 (shape_spectral.py)
   ↓
5. 计算背景光谱并校正 (shape_spectral_background.py)
   ↓
6. 数据清理和过滤
   ├─ 去NA值
   ├─ 过滤轮廓点数不足样本
   └─ 过滤面积<500像素的样本
   ↓
7. 主要分类 (classification_model.Parallel.predict_plastic)
   ↓
8. 二次分类HDPE/LDPE精细分类
   ↓
9. 后处理类别7/8阴影识别
   ↓
10. 保存ENVI格式分类结果

4.2 关键参数配置

训练相机波长237通道912.36-1706.6nm

TRAIN_WAVELENGTHS = [912.36, 915.68, 919, ..., 1703.3, 1706.6]

分类处理参数

  • 主模型类型: SVM
  • 预处理方法1: SS (Spectral Standardization)
  • 预处理方法2: None

分割参数

  • flow_threshold: 0.4
  • cellprob_threshold: -1
  • filter_method: 'threshold'

五、使用方法

5.1 基本用法

python main.py --bil_path /path/to/input.bil --output_path /path/to/output --model_path /path/to/model.m

5.2 参数说明

参数 必需 默认值 描述
--bil_path 输入BIL文件路径
--output_path 输出目录路径
--model_path 主分类模型路径
--unet_path ./unet_pytorch/logs/best_epoch_weights.pth UNet模型权重路径

5.3 使用示例

# 使用默认UNet权重
python main.py --bil_path ./data/input.bil --output_path ./results --model_path ./models/svm.m

# 指定所有参数
python main.py --bil_path ./data/input.bil --output_path ./results --model_path ./models/svm.m --unet_path ./custom_unet_weights.pth

# Windows系统示例
python main.py --bil_path "C:\Users\HyperSpec\test\MPData2.bil" --output_path "C:\Users\HyperSpec\test" --model_path ".\classification_model\modelsave\svm.m"

5.4 滤纸背景样本提取 (fliter_sample_spectral.py)

# 处理单个文件或文件夹
bil_path_or_folder = r"D:\Data\Traindata-11"
output_csv_path = r"E:\plastic\plastic\output\滤纸样本光谱\11.csv"
num_masks = 50          # 生成的背景样本数量
rng_seed = 42           # 随机种子,保证可复现

六、输入输出格式

6.1 输入文件格式

文件类型 扩展名 说明
高光谱数据 .bil BIL格式高光谱数据
头文件 .hdr 对应的ENVI头文件

HDR文件关键字段:

samples = 1024        # 列数
lines = 1024          # 行数
bands = 237           # 波段数
wavelength = {912.36, 915.68, ...}  # 波长列表

6.2 输出文件格式

文件类型 扩展名 说明
分类结果 .dat ENVI分类结果数据
头文件 .hdr ENVI头文件含类别定义

输出HDR示例:

ENVI
description = {Classification Result.}
samples = 1024
lines = 1024
bands = 1
classes = 10
class = { background, ABS, HDPE, LDPE, PA6, PET, PP, PS, PTFE, PVC }
data type = 2         # 16-bit整数

七、关键代码模块详解

7.1 main.py - 主流程控制

核心函数:

  • validate_inputs() - 输入验证
  • generate_rgb() - RGB生成
  • run_segmentation() - 图像分割
  • extract_primary_features() - 特征提取
  • compute_background_spectrum() - 背景计算
  • apply_background_and_optional_resample() - 背景校正+重采样
  • run_primary_classification() - 主要分类
  • run_secondary_classification_if_needed() - 二次分类
  • postprocess_class7_shadow() - 阴影后处理

7.2 mask.py - 图像分割

功能:

  • 微塑料颗粒检测
  • 滤纸背景区域识别
  • 返回微塑料掩膜和滤纸掩膜

关键参数:

  • flow_threshold: 流动阈值
  • cellprob_threshold: 细胞概率阈值

7.3 shape_spectral.py - 光谱特征提取

功能:

  • 从BIL数据提取光谱特征
  • 计算形状特征(轮廓、面积等)
  • 使用PlantCV库

7.4 shape_spectral_background.py - 背景校正

功能:

  • 计算滤纸背景光谱
  • 用于后续背景校正

7.5 classification_model.Parallel.predict_plastic - 分类预测

功能:

  • 加载训练好的模型
  • 特征标准化
  • 预测塑料类别

八、注意事项与常见问题

8.1 系统要求

  • Python版本: 3.12+
  • 内存: 足够处理高光谱数据建议16GB+
  • 存储: 建议使用固态硬盘
  • GPU: 可选用于加速CUDA支持

8.2 常见问题

Q1: 运行时报错"ModuleNotFoundError"

解决: 确保已安装所有依赖

pip install -r requirements.txt

Q2: 处理大型文件时内存不足

解决:

  • 考虑减少处理区域
  • 增加系统内存
  • 分批处理数据

Q3: 分类结果不准确

解决:

  • 检查输入数据质量
  • 确认模型是否适合当前数据类型
  • 验证波长范围是否匹配

Q4: BIL文件波段数不足

解决: 确保输入文件至少有160个波段RGB生成需要索引9, 59, 159

Q5: 特征维度不匹配错误

解决:

  • 检查模型对应的scaler_params.pkl是否存在
  • 确认训练时和预测时的特征维度一致

8.3 重要注意事项

  1. 波长对齐: 系统会自动检测输入波长与训练波长(237通道)是否匹配,不匹配时会自动重采样
  2. 背景校正: 使用滤纸区域光谱作为背景进行除法校正
  3. 轮廓收缩: 输出前会自动收缩轮廓1像素避免颗粒相连
  4. 阴影处理: 类别7/8会进行阴影检测低对比度区域会被标记为背景

九、模型文件说明

9.1 模型文件位置

classification_model/modelsave/
├── svm.m                    # 主分类模型(SVM)
├── scaler_params.pkl        # 标准化参数
└── HDPELDPE_model/
    └── svm.m               # HDPE/LDPE二次分类模型

9.2 支持的模型类型

  • SVM (支持向量机)
  • Random Forest (随机森林)
  • XGBoost/LightGBM (梯度提升)
  • CNN (卷积神经网络)
  • SAE+CNN (堆叠自编码器+CNN)

十、开发历史与版本记录

v1.0.0 (2025-08-26)

  • 初始版本发布
  • 支持BIL格式高光谱数据处理
  • 集成UNet分割和SVM分类
  • 输出ENVI格式分类结果
  • 支持9种塑料材料分类

十一、联系方式

项目 信息
作者 北京依锐思
邮箱 huilai_zhang@126.com

十二、待优化/已知问题

12.1 已知限制

  1. 输入BIL文件波段数需≥160RGB生成需求
  2. 滤纸检测依赖于阈值方法,对非标准滤纸可能需要调整参数
  3. 二次分类仅针对HDPE/LDPE

12.2 建议改进方向

  1. 增加更多二次分类场景如PP/PS等易混淆材料
  2. 优化内存使用,支持更大文件流式处理
  3. 添加GUI界面便于非技术用户使用
  4. 增加批处理脚本的配置化能力

文档生成日期: 2026-04-10

文档版本: 1.0