增加坡度计算
This commit is contained in:
186
Flexbrdf/hytools/topo/原理.md
Normal file
186
Flexbrdf/hytools/topo/原理.md
Normal file
@ -0,0 +1,186 @@
|
||||
基于 Flexbrdf/hytools/topo 目录下的代码,我来详细解释地形校正的原理。
|
||||
|
||||
地形校正原理详解
|
||||
地形校正(Topographic Correction)的目的是消除地形起伏(坡度、坡向)对高光谱图像反射率的影响。由于太阳光入射角度在不同坡度和坡向上的变化,同一地物在不同地形位置会呈现不同的辐射亮度,地形校正就是要将这种差异归一化到水平地表的条件。
|
||||
|
||||
一、核心概念:入射角余弦(cosine i)
|
||||
地形校正的核心是计算入射角余弦(cosine of incidence angle),即太阳光线与地表法线之间夹角的余弦值。
|
||||
|
||||
计算公式(在 topo.py:53):
|
||||
|
||||
cosine_i = np.cos(solar_zn)*np.cos(slope) + np.sin(solar_zn)*np.sin(slope)*np.cos(relative_az)
|
||||
其中:
|
||||
|
||||
solar_zn:太阳天顶角(太阳光线与垂直方向的夹角)
|
||||
solar_az:太阳方位角
|
||||
slope:地面坡度
|
||||
aspect:地面坡向
|
||||
relative_az = aspect - solar_az:相对方位角
|
||||
物理意义:
|
||||
|
||||
当 cosine_i = 1 时,太阳光垂直照射地面(正午水平地表)
|
||||
当 cosine_i < 1 时,太阳光斜射,照度降低
|
||||
背阴坡 cosine_i 较小,向阳坡 cosine_i 较大
|
||||
二、支持的5种地形校正方法
|
||||
1. Cosine 校正(余弦校正)
|
||||
原理:最简单的地形校正方法,假设地表为朗伯体(各向同性反射)。
|
||||
|
||||
校正公式(cosine.py:50):
|
||||
|
||||
c_factor = cos_solar_zn / cos_i
|
||||
cos_solar_zn:水平地表的太阳天顶角余弦
|
||||
cos_i:实际地表的入射角余弦
|
||||
校正效果:
|
||||
|
||||
corrected_reflectance = original_reflectance × (cos_solar_zn / cos_i)
|
||||
特点:
|
||||
|
||||
简单快速
|
||||
假设地表是理想朗伯体,对非朗伯体(如植被)校正过度
|
||||
2. SCS 校正(Sun-Canopy-Sensor)
|
||||
原理:考虑森林冠层对地形影响的简化模型,基于 "cosine i" 但增加坡度因子。
|
||||
|
||||
校正公式(scs.py:51):
|
||||
|
||||
c_factor = (cos_slope × cos_solar_zn) / cos_i
|
||||
与 Cosine 方法的区别:
|
||||
|
||||
增加了 cos_slope 项(坡度余弦)
|
||||
考虑了坡度对观测路径的影响
|
||||
适用场景:森林覆盖区域
|
||||
|
||||
3. C 校正(C-Correction)
|
||||
原理:在 Cosine 校正基础上增加一个经验系数 C,用于调整非朗伯体效应。
|
||||
|
||||
校正公式(c.py:177):
|
||||
|
||||
correction_factor = (cos_sz + C) / (cosine_i + C)
|
||||
其中 C 系数的计算过程(c.py:42-76):
|
||||
|
||||
对每个波段,建立反射率与 cosine_i 的线性关系:
|
||||
|
||||
ρ = slope × cos_i + intercept
|
||||
通过最小二乘拟合(OLS)或非负最小二乘(NNLS)求解
|
||||
|
||||
计算 C 系数(Soenen et al. 2005, Eq. 8):
|
||||
|
||||
C = intercept / slope
|
||||
物理意义:C 值越大,表示地表越接近朗伯体,校正强度越接近 Cosine 方法;C 值越小,校正越保守。
|
||||
|
||||
拟合方法选择(c_fit_type):
|
||||
|
||||
ols:普通最小二乘(Ordinary Least Squares)
|
||||
nnls:非负最小二乘(Non-Negative Least Squares)
|
||||
wls:加权最小二乘(Weighted Least Squares)
|
||||
4. SCS+C 校正(推荐用于森林)
|
||||
原理:结合 SCS 和 C 校正的优势,是目前森林地形校正的主流方法(Soenen et al. 2005, IEEE TGRS)。
|
||||
|
||||
计算步骤(scsc.py):
|
||||
|
||||
计算 c1 因子:
|
||||
|
||||
c1 = cos(solar_zn) × cos(slope)
|
||||
计算 C 系数(与 C 校正相同,通过线性回归)
|
||||
|
||||
综合校正因子(scsc.py:115-125):
|
||||
|
||||
correction_factor = (c1 + C × cos_slope) / (cos_i + C)
|
||||
为什么有效:
|
||||
|
||||
SCS 部分处理冠层-地形几何关系
|
||||
C 部分调整非朗伯体效应
|
||||
相比单独使用 SCS 或 C 校正,能更好地保持植被反射率的一致性
|
||||
5. Modified Minnaert 校正(改进的 Minnaert)
|
||||
原理:基于 Minnaert 指数的半经验方法,区分植被和非植被区域进行不同强度的校正(Richter et al. 2009)。
|
||||
|
||||
算法流程(modminn.py:46-83):
|
||||
|
||||
计算调整后的太阳天顶角:
|
||||
|
||||
if solar_zn < 45°: solar_zn_t = solar_zn + 20°
|
||||
if 45° ≤ solar_zn ≤ 55°: solar_zn_t = solar_zn + 15°
|
||||
if solar_zn > 55°: solar_zn_t = solar_zn + 10°
|
||||
NDVI 掩膜分类:
|
||||
|
||||
植被区(NDVI > 0.2)
|
||||
非植被区(NDVI ≤ 0.2)
|
||||
计算基础校正因子:
|
||||
|
||||
factor = cos_i / cos(solar_zn_t)
|
||||
分区应用不同指数:
|
||||
|
||||
区域 短波(<720nm) 长波(≥720nm)
|
||||
非植被
|
||||
factor^(1/2)
|
||||
factor^(1/2)
|
||||
植被
|
||||
factor^(3/4)
|
||||
factor^(1/3)
|
||||
限幅处理:
|
||||
|
||||
factor = np.clip(factor, 0.25, 1.0)
|
||||
阈值控制:当入射角小于调整后的太阳天顶角时不进行校正
|
||||
|
||||
特点:
|
||||
|
||||
自适应不同地物类型
|
||||
区分短波和长波有不同的散射特性
|
||||
通过指数控制校正强度,避免过度校正
|
||||
三、地形校正的工作流程
|
||||
从 topo.py:104-154 可以看出地形校正的完整流程:
|
||||
|
||||
1. 设置地形参数(set_topo)
|
||||
↓
|
||||
2. 生成计算掩膜(calc_mask)
|
||||
↓
|
||||
3. 计算校正系数(calc_*_coeffs)
|
||||
- 遍历每个波段(跳过坏波段)
|
||||
- 根据选定的算法类型计算校正因子
|
||||
↓
|
||||
4. 应用校正(apply_*)
|
||||
- 支持多种数据切分方式:line/column/band/chunk/pixels
|
||||
四、关键配置参数
|
||||
参数 类型 说明 适用算法
|
||||
type
|
||||
str
|
||||
校正算法类型
|
||||
所有
|
||||
calc_mask
|
||||
list
|
||||
计算校正系数的掩膜条件
|
||||
所有
|
||||
apply_mask
|
||||
list
|
||||
应用校正的掩膜条件
|
||||
所有
|
||||
c_fit_type
|
||||
str
|
||||
C系数拟合方法:ols/nnls/wls
|
||||
c, scs+c
|
||||
sample_perc
|
||||
float
|
||||
采样比例(用于分组计算)
|
||||
分组计算时
|
||||
五、算法选择建议
|
||||
场景 推荐算法 理由
|
||||
裸土/岩石
|
||||
Cosine 或 C
|
||||
地表接近朗伯体
|
||||
森林植被
|
||||
SCS+C
|
||||
考虑冠层几何,校正效果最好
|
||||
草地/灌木
|
||||
SCS
|
||||
简单有效
|
||||
混合地物
|
||||
Modified Minnaert
|
||||
自适应不同地物
|
||||
需要精确结果
|
||||
C 或 SCS+C + 分组计算
|
||||
按NDVI分组计算C系数
|
||||
六、参考文献
|
||||
SCS+C 方法:Soenen, S. A., Peddle, D. R., & Coburn, C. A. (2005). SCS+C: A Modified Sun-Canopy-Sensor Topographic Correction in Forested Terrain. IEEE TGRS, 43(9), 2148-2159.
|
||||
|
||||
方法比较:Richter, R., Kellenberger, T., & Kaufmann, H. (2009). Comparison of topographic correction methods. Remote Sensing, 1(3), 184-196.
|
||||
|
||||
C 校正:Teillet, P. M., Guindon, B., & Goodenough, D. G. (1982). On the slope-aspect correction of multispectral scanner data. Canadian Journal of Remote Sensing, 8(2), 84-106.
|
||||
Reference in New Issue
Block a user