Initial commit
This commit is contained in:
354
项目交接文档.md
Normal file
354
项目交接文档.md
Normal 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
|
||||
- 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 安装步骤
|
||||
|
||||
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
|
||||
**项目状态**: 交接完成
|
||||
Reference in New Issue
Block a user