基于深度学习的高光谱图像增强系统

本项目面向高光谱图像去噪增强任务,基于 ICVL 31 波段高光谱 .mat 数据和 HSTNet 模型,完成数据读取、噪声合成、模型训练、测试评估、单图推理和 PyQt6 桌面端可视化展示。

目录

  1. 数据集

  2. 模型架构

  3. 训练过程

  4. 训练参数

  5. 训练指标

  6. 可视化图说明

  7. 系统功能

  8. 技术栈

  9. 项目结构

  10. 启动教程

  11. 作者信息

一、数据集

本项目使用 ICVL 高光谱图像数据集的 .mat 版本数据。ICVL 数据集由 Ben-Gurion University 的 ICVL 实验室采集,常用于高光谱图像重建、去噪、增强和光谱分析等任务。

项目中的高光谱图像增强任务不依赖人工标注框或分类标签,而是以干净高光谱图像作为监督目标,通过代码动态添加高斯噪声,构造"噪声高光谱图像 -> 干净高光谱图像"的监督学习样本。

统计项 数值
当前本地 .mat 文件数 10 个
训练集 8 个
验证集 1 个
测试集 1 个
单个样本维度 [31, 1392, 1300]
光谱波段数 31 个
光谱范围 400nm-700nm
波段间隔 10nm
默认数据目录 data/icvl_mat/

数据读取后统一转换为:

复制代码
[31, H, W]

其中 31 表示从 400nm 到 700nm 的 31 个光谱波段,HW 表示图像高度和宽度。程序会自动识别 .mat 文件中的 cuberadimgdata 等常见字段,并将数据归一化到 [0, 1]

数据处理流程如下:

复制代码
扫描 data/icvl_mat/
    ↓
按文件名稳定排序
    ↓
80% / 10% / 10% 划分训练、验证、测试数据
    ↓
读取 .mat 并统一为 [31,H,W]
    ↓
训练阶段随机裁剪 64×64 patch
    ↓
动态添加高斯噪声
    ↓
构造 noisy -> clean 训练样本

二、模型架构

项目使用 HSTNet 完成高光谱图像去噪增强。模型输入为噪声高光谱图像,输出为增强后的干净高光谱图像。

复制代码
噪声高光谱图像 [B,31,H,W]
    ↓
增加 3D 卷积输入维度
    ↓
3D Conv 特征提取头
    ↓
HSTBlock × 4
    ├── 局部空间-光谱特征模块
    └── 谱向 Transformer 注意力模块
    ↓
3D Conv 噪声预测尾部
    ↓
输入图像 - 预测噪声
    ↓
增强结果 [B,31,H,W]

核心模块说明:

模块 作用
3D Conv Head 将输入高光谱立方体映射到高维特征空间
局部空间-光谱特征模块 使用 3D 卷积提取空间邻域和光谱邻域上下文
谱向 Transformer 模块 沿 31 个光谱波段建模长距离光谱相关性
残差噪声预测 预测噪声分量,再用输入减去预测噪声得到增强结果
输出裁剪 将增强结果限制在 [0, 1] 范围内

本项目的优化点主要体现在三个方面:

优化层面 具体做法 解决问题
结构优化 结合 3D 卷积和谱向 Transformer 同时恢复空间纹理和光谱一致性
训练策略 随机裁剪 patch,并使用 10/255-50/255 盲高斯噪声训练 提高不同噪声强度下的泛化能力
推理部署 支持分块推理、CPU 兜底和中文路径安全权重读写 适配普通本地电脑和 Windows 中文路径

三、训练过程

训练入口为:

复制代码
python train.py

也可以通过统一入口启动:

复制代码
python main.py train

完整训练流程如下:

  1. 读取 data/icvl_mat/ 下的 .mat 文件。

  2. 按文件名排序后划分训练集、验证集和测试集。

  3. 将高光谱数据统一转换为 [31,H,W],并归一化到 [0,1]

  4. 训练阶段随机裁剪 patch,并动态添加随机高斯噪声。

  5. HSTNet 前向推理,输出增强后的高光谱图像。

  6. 使用 L1 Loss 计算增强结果与干净图像之间的误差。

  7. 使用 AdamW 优化器更新模型参数。

  8. 每轮在 25/25550/255 两种固定噪声强度下进行验证。

  9. 保存最后一轮权重 last_hstnet.pth

  10. 按验证集平均 PSNR 保存最优权重 best_hstnet.pth

  11. 生成训练日志、指标表格和曲线图。

训练产物默认保存在:

复制代码
outputs/train/

四、训练参数

默认训练参数如下:

参数 默认值 说明
data_dir data/icvl_mat ICVL .mat 数据目录
save_dir outputs/train 训练产物保存目录
epochs 20 训练轮数
batch_size 2 训练批大小
patch_size 64 随机裁剪 patch 大小
samples_per_image 16 每张训练图每轮采样次数
lr 1e-4 学习率
weight_decay 1e-4 AdamW 权重衰减
base_channels 32 HSTNet 基础通道数
num_blocks 4 HSTBlock 数量
heads 4 谱向注意力头数
num_workers 0 DataLoader 线程数

测试与推理参数如下:

参数 默认值 说明
weights outputs/train/checkpoints/best_hstnet.pth 默认测试权重
tile_size 128 分块推理尺寸
overlap 16 分块重叠像素
sigma 25 单图推理时合成噪声强度,单位为 /255
limit 0 测试样本数量限制,0 表示全部测试

五、训练指标

本项目已完成一组 20 轮训练。训练使用 CUDA 设备,训练集 8 张、验证集 1 张。主要指标包括:

指标 含义 趋势
Loss L1 重建损失 越低越好
PSNR 峰值信噪比 越高越好
SSIM 结构相似性 越高越好
SAM 光谱角制图 越低越好

第 1 轮和第 20 轮指标对比如下:

指标 第 1 轮 第 20 轮 变化
Train Loss 0.155729 0.021444 下降 0.134285
Val Loss 0.121887 0.021654 下降 0.100233
PSNR25 17.27 dB 31.42 dB 提升 14.15 dB
PSNR50 16.78 dB 29.82 dB 提升 13.04 dB
平均 SSIM 0.0963 0.7327 提升 0.6364
平均 SAM 48.48 8.38 下降 40.10

验证集平均 PSNR 最优模型出现在第 13 轮,对应权重为:

复制代码
outputs/train/checkpoints/best_hstnet.pth
指标 数值
Epoch 13
Train Loss 0.025301
Val Loss 0.020027
PSNR25 33.49 dB
PSNR50 29.48 dB
平均 PSNR 31.48 dB
平均 SSIM 0.7649
平均 SAM 7.11

使用 best_hstnet.pth 在测试集上评估的结果如下:

噪声强度 噪声 PSNR 去噪 PSNR PSNR 提升 噪声 SSIM 去噪 SSIM SSIM 提升 噪声 SAM 去噪 SAM SAM 下降
25/255 21.45 31.97 10.52 0.1533 0.6740 0.5207 34.48 21.88 12.60
50/255 15.96 29.97 14.02 0.0505 0.6113 0.5608 42.43 15.89 26.54

六、可视化图说明

训练曲线保存在:

复制代码
outputs/train/plots/
文件 横轴 纵轴 说明
all_metrics.png Epoch Loss、PSNR、SSIM、SAM 综合展示训练和验证指标变化
loss_curve.png Epoch Loss 展示训练损失和验证损失变化
psnr_curve.png Epoch PSNR 展示 sigma25、sigma50 和平均 PSNR
ssim_curve.png Epoch SSIM 展示 sigma25、sigma50 和平均 SSIM
sam_curve.png Epoch SAM 展示 sigma25、sigma50 和平均 SAM
lr_curve.png Epoch Learning Rate 展示学习率变化

测试评估图保存在:

复制代码
outputs/test/plots/
文件 说明
test_psnr.png 不同噪声强度下噪声图像与增强结果的 PSNR 对比
test_ssim.png 不同噪声强度下噪声图像与增强结果的 SSIM 对比
test_sam.png 不同噪声强度下噪声图像与增强结果的 SAM 对比
test_improvement.png PSNR、SSIM、SAM 改善幅度柱状图

PyQt6 系统中的"指标展示"页面会读取训练和测试图像文件,并在桌面端界面中展示。

七、系统功能

模块 功能说明
登录 / 注册 支持本地账号注册和登录,用户信息保存到 data/system/users.json
首页总览 展示模型状态、运行设备、数据数量、历史记录和最近检测摘要
单图增强 选择单个 .mat 文件,添加噪声并调用 HSTNet 输出增强结果和指标
批量增强 选择包含 .mat 文件的目录,批量生成增强 .mat 和伪彩色预览图
测试评估 在 GUI 内执行测试集评估,输出测试指标和结果文件
光谱分析 对指定像素位置绘制 31 个波段的光谱响应曲线
波段可视化 支持单波段灰度显示和伪彩色 RGB 合成显示
历史记录 保存检测时间、用户、文件名、模型、噪声强度和指标结果
指标展示 读取训练和测试过程生成的 .png 指标图
模型管理 查看默认权重、选择本地权重、加载模型并查看运行设备

系统默认权重路径为:

复制代码
outputs/train/checkpoints/best_hstnet.pth

GUI 中普通 .jpg/.png/.bmp 图片只用于界面预览,模型实际处理对象为 31 波段 .mat 高光谱数据。

八、技术栈

类别 技术
开发语言 Python 3.9
深度学习框架 PyTorch
模型结构 HSTNet、3D CNN、Transformer
GUI 框架 PyQt6
数据格式 MATLAB .mat
数据读取 scipy、h5py
数值计算 numpy
图表绘制 matplotlib
数据下载 huggingface_hub、requests
数据持久化 JSON、CSV

九、项目结构

复制代码
c269/
├── app/
│   ├── data/               # ICVL 数据读取、划分和下载
│   ├── infer/              # HSTNet 推理封装
│   ├── models/             # HSTNet 模型结构
│   ├── test/               # 测试集评估与结果导出
│   ├── train/              # 训练、验证、日志和指标图生成
│   ├── ui/                 # PyQt6 桌面端界面
│   └── utils/              # 指标、噪声、可视化、设备和权重读写工具
├── data/
│   ├── icvl_mat/           # ICVL .mat 数据目录
│   └── system/             # GUI 用户信息和历史记录
├── outputs/
│   ├── train/              # 训练权重、日志和指标图
│   ├── test/               # 测试评估日志、图表和样本结果
│   ├── infer/              # 命令行推理输出目录
│   ├── gui_batch/          # GUI 批量增强输出目录
│   ├── gui_test/           # GUI 测试评估输出目录
│   └── gui_exports/        # GUI 手动导出结果
├── download_icvl.py        # ICVL 数据独立下载入口
├── main.py                 # 训练、测试、推理、GUI 统一入口
├── requirements.txt        # 项目依赖
├── test.py                 # 独立测试入口
└── train.py                # 独立训练入口

十、启动教程

1. 环境准备

推荐使用 Python 3.9。进入项目根目录后安装依赖:

复制代码
cd <项目根目录>
pip install -r requirements.txt

2. 数据集准备

方式一:独立下载 ICVL .mat 数据。

复制代码
python download_icvl.py --endpoint https://hf-mirror.com --max-files 10

方式二:训练前自动下载。

复制代码
python train.py --download-icvl --hf-endpoint https://hf-mirror.com --max-download-files 10

方式三:手动下载 .mat 文件,并放入:

复制代码
data/icvl_mat/

3. 模型训练

使用默认参数训练:

复制代码
python train.py

指定常用训练参数:

复制代码
python train.py --epochs 20 --batch-size 2 --patch-size 64 --samples-per-image 16

训练完成后会生成:

复制代码
outputs/train/checkpoints/best_hstnet.pth
outputs/train/checkpoints/last_hstnet.pth
outputs/train/logs/train_log.csv
outputs/train/plots/

4. 测试评估

复制代码
python test.py --weights outputs/train/checkpoints/best_hstnet.pth

测试结果默认保存到:

复制代码
outputs/test/

5. 单图推理

复制代码
python main.py infer --input data/icvl_mat/xxx.mat --weights outputs/train/checkpoints/best_hstnet.pth

指定输出文件:

复制代码
python main.py infer --input data/icvl_mat/xxx.mat --weights outputs/train/checkpoints/best_hstnet.pth --output outputs/infer/result.mat --preview outputs/infer/result.png --sigma 25

6. 启动桌面系统

复制代码
python main.py gui

首次进入系统时需要注册账号。账号信息和历史记录保存在本地:

复制代码
data/system/users.json
data/system/history.json

7. 推荐运行顺序

复制代码
python download_icvl.py --endpoint https://hf-mirror.com --max-files 10
python train.py --epochs 20 --batch-size 2 --patch-size 64
python test.py --weights outputs/train/checkpoints/best_hstnet.pth
python main.py gui

如果已经存在数据和权重,可以直接启动系统:

复制代码
python main.py gui

十一、作者信息

项目 内容
作者 Michael-Jay
联系方式 微信:Jay8059
开发年份 2026 年
所属领域 高光谱图像增强、计算机视觉

本项目支持二次开发和定制扩展,可根据实际需求调整数据集格式、模型结构、训练策略、界面功能、结果导出和部署方式。如需定制开发或远程部署,可通过vx:Jay8059 联系。