Initial commit

This commit is contained in:
2026-04-10 16:46:45 +08:00
commit 4fd1b0a203
165 changed files with 25698 additions and 0 deletions

354
项目交接文档.md Normal file
View File

@ -0,0 +1,354 @@
# 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 核心功能模块
1. **ocbrdf** - 水体/海洋BRDF校正模块基于EUMETSAT/OLCI算法
2. **Flexbrdf (HyTools)** - 陆地BRDF校正和通用高光谱图像处理库
3. **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 安装依赖
```bash
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
- NetCDFEMIT、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配置生成
- 文件选择对话框
- 暗色主题UINVIDIA设计风格
#### 设计规范
- 主色调: 深灰色背景 + 绿色(#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 安装步骤
1. **克隆/解压项目**
```bash
cd BRDF_GUI
```
2. **安装依赖**
```bash
pip install -r requirements.txt
```
3. **安装HyTools包可选**
```bash
cd Flexbrdf
pip install -e .
```
### 6.2 运行方式
#### GUI模式
```bash
python GUI/brdf_gui.py
```
#### 命令行模式ocbrdf
```bash
python ocbrdf/ocbrdf_main3.py --config config.json
```
#### 命令行模式FlexBRDF
```bash
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 可能的改进方向
1. 添加更多BRDF模型支持
2. 优化大文件处理性能
3. 增强GUI的批量处理能力
4. 添加更多可视化功能
5. 支持更多传感器类型
### 11.2 维护建议
1. 定期更新依赖包版本
2. 保持与最新Python版本兼容
3. 持续完善文档
4. 添加更多单元测试
---
## 12. 联系方式
如有问题,请参考:
- 项目文档:`Flexbrdf/README.md`
- 中文教程:`Flexbrdf/examples/FlexBRDF_tutorial.md`
- API文档`Flexbrdf/docs/`
---
**文档生成日期**: 2026年4月10日
**文档版本**: v1.0
**项目状态**: 交接完成