9.9 KiB
9.9 KiB
BRDF_GUI 项目交接文档
1. 项目概述
1.1 项目基本信息
| 项目 | 内容 |
|---|---|
| 项目名称 | BRDF_GUI |
| 项目类型 | 高光谱图像处理软件 |
| 主要功能 | BRDF(双向反射分布函数)校正 |
| 开发语言 | Python 3.9+ |
| GUI框架 | PyQt5 |
| 许可证 | GNU GPL v3.0 |
1.2 项目背景
本项目是一个用于遥感数据BRDF校正的综合性工具集,主要处理高光谱图像中的观测和光照几何效应,支持从机载(AVIRIS、AVIRIS-NG)和星载传感器获取的数据。
1.3 核心功能模块
- ocbrdf - 水体/海洋BRDF校正模块(基于EUMETSAT/OLCI算法)
- Flexbrdf (HyTools) - 陆地BRDF校正和通用高光谱图像处理库
- GUI - 基于PyQt5的图形用户界面
2. 项目结构
BRDF_GUI/
├── .idea/ # PyCharm配置目录
├── GUI/ # GUI应用程序
│ ├── brdf_gui.py # 主GUI程序 (1303行)
│ └── DESIGN.md # UI设计规范文档
├── ocbrdf/ # 海洋BRDF校正模块
│ ├── ocbrdf_main3.py # 主BRDF校正模块 (908行)
│ ├── brdf_model_O25.py # O25 BRDF模型
│ ├── brdf_model_M02.py # Morel et al. (2002)模型
│ ├── brdf_model_M02SeaDAS.py # SeaDAS变体
│ ├── brdf_model_L11.py # Lee et al. (2011)模型
│ ├── brdf_utils.py # 工具函数
│ ├── Raman.py # 拉曼散射校正
│ ├── aviris.py # AVIRIS数据处理
│ └── src/ # 其他源文件
├── Flexbrdf/ # HyTools库(陆地BRDF)
│ ├── setup.py # 包安装配置
│ ├── README.md # 英文文档
│ ├── hytools/ # 核心库包
│ │ ├── base.py # 主类
│ │ ├── brdf/ # BRDF校正模块
│ │ ├── io/ # 输入输出模块
│ │ ├── topo/ # 地形校正
│ │ ├── glint/ # 镜面反射校正
│ │ ├── masks/ # 掩膜工具
│ │ └── transform/ # 光谱变换
│ ├── scripts/ # 命令行脚本
│ └── examples/ # 示例和教程
└── requirements.txt # 项目依赖
3. 技术栈与依赖
3.1 核心技术
| 技术 | 版本 | 用途 |
|---|---|---|
| Python | 3.9+ | 主要开发语言 |
| PyQt5 | - | GUI框架 |
| NumPy | >=1.21.0 | 数值计算 |
| xarray | >=0.20.0 | 多维数据数组处理 |
| rasterio | >=1.2.0 | 地理空间栅格IO |
| spectral | >=0.22.0 | ENVI文件处理 |
| Ray | >=2.0.0 | 分布式并行处理 |
| scikit-learn | >=1.0.0 | 机器学习工具 |
| SciPy | >=1.7.0 | 科学计算 |
| pandas | >=1.3.0 | 数据处理 |
| matplotlib | >=3.5.0 | 可视化 |
| h5py/h5netcdf | >=3.0.0 | HDF5和NetCDF支持 |
3.2 安装依赖
pip install -r requirements.txt
4. 模块详细说明
4.1 ocbrdf模块(水体BRDF校正)
功能描述
专门用于水体/海洋高光谱数据的BRDF校正,支持多种BRDF模型。
核心文件
| 文件 | 说明 |
|---|---|
ocbrdf_main3.py |
主校正引擎,读取ENVI BSQ文件,处理xarray数据集 |
brdf_model_O25.py |
O25模型(EUMETSAT BRDF4OLCI 2024) |
brdf_model_M02.py |
Morel et al. (2002)模型,使用f/Q查找表 |
brdf_model_L11.py |
Lee et al. (2011)模型,使用QAA v6反演 |
brdf_utils.py |
多项式求解器、坐标处理等工具函数 |
Raman.py |
拉曼散射校正 |
aviris.py |
AVIRIS数据IO工具 |
数据要求
- 输入格式: ENVI BSQ, xarray Dataset
- 必需波段: 442nm, 490nm, 560nm, 665nm(根据模型不同有所变化)
- 输出: 标准化遥感反射率(nrrs)、BRDF校正因子、不确定性估计
关键算法参数
- 角度约定: OLCI约定,相对方位角(raa=0表示太阳和观测在同一侧)
- LUT路径: 期望在模块位置相对的
BRDF_LUTs/BRDF_{model}.nc路径
4.2 Flexbrdf/HyTools模块(陆地BRDF校正)
功能描述
通用高光谱图像处理库,支持BRDF、地形和镜面反射校正。
核心算法
| 类型 | 算法 |
|---|---|
| BRDF校正 | FlexBRDF、Universal BRDF |
| 地形校正 | SCS、SCS+C、Cosine、C、Mod-Minnaert |
| 镜面反射校正 | Hochberg 2003、Hedley 2005、Gao 2021 |
数据格式支持
- ENVI格式
- NEON AOP HDF5
- NetCDF(EMIT、AVIRIS-NG)
核心文件
| 文件 | 说明 |
|---|---|
hytools/base.py |
HyTools主类,高光谱数据IO和处理 |
hytools/brdf/flex.py |
FlexBRDF算法实现 |
hytools/brdf/kernels.py |
Ross Thick、Li Dense、Roujean核函数 |
hytools/io/envi.py |
ENVI文件读写 |
hytools/io/neon.py |
NEON AOP HDF5支持 |
hytools/io/netcdf.py |
NetCDF格式支持 |
并行处理
- 使用Ray进行分布式计算
no_ray/目录包含单进程版本脚本
4.3 GUI模块
功能描述
基于PyQt5的图形用户界面,提供BRDF校正工作流的可视化操作。
主要功能
- 掩膜条件编辑器(7种掩膜类型)
- ndi: 归一化差异指数掩膜
- ancillary: 辅助数据掩膜
- neon_edge: NEON边缘掩膜
- kernel_finite: 核函数有限性掩膜
- water: 水体掩膜
- external: 外部掩膜
- band: 波段掩膜
- BRDF配置界面
- JSON配置生成
- 文件选择对话框
- 暗色主题UI(NVIDIA设计风格)
设计规范
- 主色调: 深灰色背景 + 绿色(#76b900)强调色
- 工业风格字体
- 参见
GUI/DESIGN.md
5. 配置说明
5.1 JSON配置系统
项目使用基于JSON的配置系统进行批处理。
配置文件示例位置
Flexbrdf/examples/configs/
├── aviris.json
├── brdf_glint_correct_config.json
├── glint_correct_config.json
├── topo_brdf_glint_correct_config.json
└── ...
配置生成脚本
Flexbrdf/scripts/configs/
├── image_correct_json_generate.py
├── image_correct_json_generate_gui.py
├── trait_estimate_json_generate.py
└── plsr_model_format_v0_1.py
5.2 环境要求
- 输入数据: 高光谱图像(ENVI、HDF5或NetCDF格式)
- 辅助数据: 太阳/传感器几何角度(SZA、SAA、VZA、VAA、RAA)
- 可选数据: 地形数据(坡度、坡向)用于地形校正
- 查找表: BRDF LUT以NetCDF格式存储(需单独获取)
6. 使用说明
6.1 安装步骤
- 克隆/解压项目
cd BRDF_GUI
- 安装依赖
pip install -r requirements.txt
- 安装HyTools包(可选)
cd Flexbrdf
pip install -e .
6.2 运行方式
GUI模式
python GUI/brdf_gui.py
命令行模式(ocbrdf)
python ocbrdf/ocbrdf_main3.py --config config.json
命令行模式(FlexBRDF)
cd Flexbrdf
python scripts/flex_main.py --config config.json
6.3 常用脚本
| 脚本 | 功能 |
|---|---|
image_correct.py |
图像校正 |
brdf_correct_bip.py |
BRDF校正(BIP格式) |
rad2reflectance.py |
辐射度转反射率 |
neon2envi.py |
NEON格式转ENVI |
transform.py |
光谱变换 |
trait_estimate.py |
性状估计 |
7. 开发团队与版权
7.1 核心开发者
- HyTools: Adam Chlus (JPL), Zhiwei Ye, Ting Zheng, Natalie Queally, Evan Greenberg, Philip Townsend (威斯康星大学麦迪逊分校)
- ocbrdf: 基于EUMETSAT BRDF4OLCI研究(合同号 RB_EUM-CO-21-4600002626-JIG)
7.2 许可证
GNU General Public License v3.0
7.3 引用信息
参见 Flexbrdf/CITATION.cff
8. 文档资源
8.1 中文文档
Flexbrdf/examples/FlexBRDF_tutorial.md- FlexBRDF中文教程
8.2 英文文档
Flexbrdf/README.md- 库文档和基本使用Flexbrdf/docs/- Sphinx API文档
8.3 设计文档
GUI/DESIGN.md- UI设计规范
9. 重要注意事项
9.1 BRDF LUT路径
ocbrdf模块期望在以下位置找到BRDF查找表:
BRDF_LUTs/BRDF_{model}.nc
(相对于模块位置)
9.2 角度约定
- 使用OLCI约定
- 相对方位角(raa)=0表示太阳和观测在同一侧
9.3 并行处理
- FlexBRDF使用Ray进行分布式计算
- 如不需要并行,可使用
no_ray/目录下的单进程脚本
9.4 数据格式兼容性
- 确保输入数据格式正确(ENVI BSQ、HDF5或NetCDF)
- 几何角度数据必须正确配准
9.5 内存要求
- 高光谱数据体积大,确保有足够的系统内存
- 建议使用分块处理大文件
10. 常见问题与解决方案
Q1: 找不到BRDF查找表
解决方案: 确保BRDF_LUTs/目录存在,并包含对应的.nc文件
Q2: GUI启动失败
解决方案: 检查PyQt5是否正确安装:pip install PyQt5
Q3: 内存不足错误
解决方案: 使用分块处理脚本或增加系统内存
Q4: 角度数据格式错误
解决方案: 检查输入的角度数据是否符合OLCI约定
11. 后续开发建议
11.1 可能的改进方向
- 添加更多BRDF模型支持
- 优化大文件处理性能
- 增强GUI的批量处理能力
- 添加更多可视化功能
- 支持更多传感器类型
11.2 维护建议
- 定期更新依赖包版本
- 保持与最新Python版本兼容
- 持续完善文档
- 添加更多单元测试
12. 联系方式
如有问题,请参考:
- 项目文档:
Flexbrdf/README.md - 中文教程:
Flexbrdf/examples/FlexBRDF_tutorial.md - API文档:
Flexbrdf/docs/
文档生成日期: 2026年4月10日
文档版本: v1.0
项目状态: 交接完成