Files
BRDF/项目交接文档.md
2026-04-10 16:46:45 +08:00

9.9 KiB
Raw Permalink Blame History

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 安装依赖

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. 克隆/解压项目
cd BRDF_GUI
  1. 安装依赖
pip install -r requirements.txt
  1. 安装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 可能的改进方向

  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
项目状态: 交接完成