Thanks to visit codestin.com
Credit goes to github.com

Skip to content

iqboshi/ms-pd-detect

Repository files navigation

MS-PD-Detect: 多光谱图像病害检测与分级系统

项目简介

本项目是一个基于深度学习的多光谱图像病害检测与严重程度分级系统。系统能够处理大尺寸TIFF图像,自动进行切片、健康/疾病分类、严重程度分级,并生成可视化结果。

主要功能

1. 大图像处理

  • 支持多光谱TIFF图像加载
  • 自动检测和处理nodata区域
  • 智能图像切片,避免无效区域参与计算

2. 健康/疾病分类

  • 基于CNN的二分类模型
  • 自动跳过无效切片,提高处理效率
  • 支持预训练模型加载

3. 严重程度分级

  • 对疾病切片进行6级严重程度分类
  • 注意:当前的6级分类仅代表不同类别,不代表数值高低关系
  • 后续将进行语义对齐,建立等级间的有序关系

4. 结果可视化

  • 生成彩色分级结果图
  • 无效区域显示为白色背景
  • 提供带图例的可视化结果
  • 生成详细的处理统计报告

项目结构

ms-pd-detect/
├── full_pipeline.py          # 完整处理流水线
├── image_classifier.py       # 健康/疾病分类器
├── severity_classifier.py    # 严重程度分级器
├── requirements.txt          # 依赖包列表
├── 水稻所地块裁剪15m.tif      # 示例输入图像
└── outputs/                  # 输出目录
    ├── run_*/               # 健康/疾病分类模型输出
    ├── severity_run_*/      # 严重程度分级模型输出
    └── full_pipeline_*/     # 完整流水线输出

安装依赖

pip install -r requirements.txt

主要依赖包:

  • torch
  • torchvision
  • opencv-python
  • numpy
  • matplotlib
  • tifffile
  • scikit-learn
  • tqdm
  • seaborn

使用方法

1. 运行完整流水线

python full_pipeline.py

这将执行完整的处理流程:

  1. 加载大图像并检测nodata区域
  2. 智能切片(跳过无效区域)
  3. 健康/疾病分类
  4. 疾病严重程度分级
  5. 生成可视化结果

2. 单独训练分类器

# 训练健康/疾病分类器
python image_classifier.py

# 训练严重程度分级器
python severity_classifier.py

输出结果

每次运行完整流水线会在 outputs/full_pipeline_YYYYMMDD_HHMMSS/ 目录下生成:

  • results/classification_result.png - 分级结果图
  • visualization/result_with_legend.png - 带图例的结果图
  • results/processing_summary.json - 处理统计报告
  • classified/ - 分类后的切片文件
  • severity_graded/ - 分级后的切片文件
  • tiles/ - 原始切片文件

颜色编码

  • 白色: 无效区域(nodata)
  • 绿色: 健康区域
  • 红色系: 疾病区域(不同深度代表不同严重程度类别)

多光谱数据处理改进

5波段支持

  • 完整光谱信息: 支持蓝、绿、红、红边、近红外5个波段,充分利用多光谱数据的光谱特征
  • 自动通道扩展: 对于少于5通道的数据,自动进行通道扩展以保持模型兼容性
  • 优化的归一化: 针对5通道数据扩展了归一化参数,提高模型训练稳定性

数据处理流程优化

  • 直接numpy处理: 对于5通道数据,跳过PIL转换,直接处理numpy数组,避免数据损失
  • 灵活的数据格式支持: 同时支持TIFF多光谱数据和常规RGB图像
  • 标签一致性保证: 确保训练和预测阶段使用相同的标签映射

当前限制与改进方向

1. 分级效果问题

当前分级效果不佳的主要原因:

  • 分级训练时未屏蔽背景噪音
  • 有无背景噪音的样本被拉大了特征距离
  • 导致模型学习到了背景特征而非病害特征

改进方案:

  • 在训练严重程度分级器时,需要预处理数据以屏蔽背景噪音
  • 使用掩码技术只关注前景病害区域
  • 数据增强时保持背景一致性

2. 分级语义对齐

当前状态:

  • 6个等级(Level_1 到 Level_6)仅代表不同类别
  • 等级间没有明确的严重程度顺序关系

后续工作:

  • 进行语义对齐,建立等级间的有序关系
  • 重新标注数据,确保等级反映真实的严重程度
  • 使用序数回归等技术改进模型

技术特点

  1. 多光谱数据支持:完整支持5波段多光谱数据(蓝、绿、红、红边、近红外),充分利用光谱信息提高分类精度
  2. 智能无效区域处理:自动检测TIFF文件中的nodata值,避免无效区域参与计算
  3. 内存优化:大图像切片处理,支持任意尺寸输入
  4. 模型复用:支持预训练模型加载,避免重复训练
  5. 完整流水线:从原始图像到最终可视化的一站式处理
  6. 详细统计:提供完整的处理统计和性能指标

性能优化

  • 无效切片跳过:大幅减少计算量(从6270个切片减少到约2814个有效切片)
  • GPU加速:支持CUDA加速推理
  • 批处理:支持批量图像处理
  • 进度显示:实时显示处理进度

注意事项

  1. 数据格式:
    • 推荐使用TIFF格式的5波段多光谱数据(蓝、绿、红、红边、近红外)
    • 支持3通道RGB数据(会自动扩展为5通道)
    • 支持单通道灰度数据(会自动复制为5通道)
  2. 波段顺序: 确保多光谱数据的波段顺序为:蓝、绿、红、红边、近红外
  3. 内存使用: 大图像处理时注意内存使用情况
  4. GPU内存: 使用GPU时确保显存充足
  5. 模型兼容性: 新版本模型使用5通道输入,与旧版本3通道模型不兼容,需要重新训练
  6. 标签一致性: 确保训练和预测时使用相同的标签映射(diseased=0, healthy=1)
  7. 首次运行需要训练模型,后续可直接使用预训练模型
  8. 建议使用GPU加速以提高处理速度
  9. 输出目录会自动创建,注意磁盘空间

开发者信息

本项目使用PyTorch框架开发,支持Python 3.7+环境。如有问题或建议,请联系开发团队。


版本: v1.0
最后更新: 2025-07-30

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages