2026-04-16 13:11:05 +08:00
2026-04-16 13:11:05 +08:00
2026-04-14 08:57:29 +08:00
2026-03-05 17:12:01 +08:00
2026-02-25 09:42:51 +08:00
2026-03-05 17:12:01 +08:00
2026-02-25 09:42:51 +08:00
2026-02-25 09:42:51 +08:00
2026-03-05 17:12:01 +08:00
2026-03-05 17:12:01 +08:00
2026-02-25 09:42:51 +08:00
2026-03-05 17:12:01 +08:00
2026-03-05 17:12:01 +08:00
2026-04-16 13:11:05 +08:00
2026-02-25 09:42:51 +08:00
2026-02-25 09:42:51 +08:00
2026-04-14 08:57:29 +08:00
2026-02-25 09:42:51 +08:00
2026-02-25 09:42:51 +08:00
2026-04-16 13:11:05 +08:00
2026-02-25 09:42:51 +08:00
2026-02-25 09:42:51 +08:00
2026-04-16 13:11:05 +08:00
2026-02-25 09:42:51 +08:00
2026-04-14 08:57:29 +08:00

高光谱塑料分类工具

CC BY-NC Python Version

基于高光谱成像和深度学习的微塑料材料分类与识别工具

功能特性

  • 支持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. 克隆仓库:

    git clone <repository_url>
    cd micro_plastic
    
  2. 安装依赖:

    pip install -r requirements.txt
    

使用方法

主程序:高光谱塑料分类

基本用法

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文件

示例

# 基础用法
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准则选择最优波段组合用于假彩色合成

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

滤纸背景样本提取工具

从滤纸区域提取背景样本光谱(用于构建背景训练数据集):

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
项目地址: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种塑料材料分类
Description
显微高光谱微塑料分类
Readme 110 MiB
Languages
Python 100%