等效遥感反射率转换:从实测光谱到传感器波段的实现

本文最后更新于 2026年1月17日 晚上

📖 背景与意义

在遥感应用中,由于光谱分辨率、空间分辨率、大气影响等因素,野外实验获取的地面实测高光谱数据与卫星影像光谱数据存在一定差异。实现两者的有效转换和比对对于确保遥感数据质量和水质反演精度具有重要意义。

光谱重采样技术可以将实测反射率数据拟合到传感器特定波段宽度,而大气校正可以降低卫星影像的大气影响。通过等效反射率转换,我们能够实现星地准同步观测的统一,为后续的水质参数反演提供可靠的数据基础[1]

🧮 理论基础

转换公式

等效遥感反射率转换的核心公式如下:

$$
\rho_{rs}(\lambda_i) = \frac{\int_{\lambda_1}^{\lambda_2} \rho(\lambda) \cdot SRF(\lambda) d\lambda}{\int_{\lambda_1}^{\lambda_2} SRF(\lambda) d\lambda}
$$

公式参数说明:

  • $\rho_{rs}(\lambda_i)$:传感器第 $i$ 波段中心波长 $\lambda_i$ 处的窄波段反射率
  • $\rho(\lambda)$:实测光谱在波长 $\lambda$ 处的反射率
  • $\lambda_1, \lambda_2$:传感器第 $i$ 波段的波长范围
  • $SRF(\lambda)$:传感器的光谱响应函数

🛠️ Python代码实现

以下代码实现了从高光谱反射率到等效遥感反射率的完整转换过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
## 等效遥感反射率计算##

import pandas as pd
import numpy as np

# 手动输入文件名
inputrrs = r"\实测.xlsx" # 高光谱反射率excel文件名
inputSRF = r"\WFV1.xlsx" # 卫星光谱响应函数excel文件名
output = r"\WFV1.xlsx" # 设置输出等效遥感反射率文件名

# 读取数据
try:
Rrs = pd.read_excel(inputrrs, header=None).values # 读取高光谱遥感反射率Rrs
SRF = pd.read_excel(inputSRF, header=None).values # 读取传感器光谱响应函数SRF
except Exception as e:
print('>>>>>>>读取失败,请检查Rrs与SRF的excel文件名是否有误<<<<<<<')
raise e

sn = Rrs[0, 1:] # 站点名station name
bn = SRF[0, 1:] # 波段名band name

Rrs = Rrs[1:, :].astype(float)
SRF = SRF[1:, :].astype(float)

c1 = Rrs.shape[1] # 高光谱反射率矩阵大小
c2 = SRF.shape[1] # SRF矩阵大小

# 将光谱响应函数中可能存在的NaN值与小于0的值变为0
SRF[np.isnan(SRF)] = 0
SRF[SRF < 0] = 0
Rrs[np.isnan(Rrs)] = 0
Rrs[Rrs < 0] = 0

# 计算等效Rrs
er = np.zeros((c2 - 1, c1 - 1)) # 创建存储等效Rrs的矩阵

for i in range(1, c2):
for j in range(1, c1):
l1 = np.nonzero(SRF[:, i])[0][0] # 积分下限
l2 = np.nonzero(SRF[:, i])[0][-1] # 积分上限
er[i - 1, j - 1] = (np.trapz(Rrs[np.where(Rrs[:, 0] == SRF[l1, 0])[0][0]:np.where(Rrs[:, 0] == SRF[l2, 0])[0][0] + 1, j] * SRF[l1:l2 + 1, i], dx=1)) / (np.trapz(SRF[l1:l2 + 1, i], dx=1))

# 数据保存
# 创建标好站点名和波段名的excel
temp = np.empty((c2, c1), dtype=object)
temp[0, 1:] = sn # 第一行是站点名
temp[1:, 0] = bn # 第一列是波段名
temp[1:, 1:] = er

# 输出
df = pd.DataFrame(temp)
df.to_excel(output, index=False, header=False)

📊 数据格式示例

1. 高光谱反射率数据 (实测.xlsx)

WaveLength Station 1 Station 2 Station 3 Station 4 Station 5
400 0.0098442 0.0097718 0.0096756 0.0102083 0.0100013
401 0.0097854 0.0097617 0.0096686 0.0101987 0.0099884

2. 光谱响应函数 (SRF.xlsx)

波长/nm B1 B2 B3 B4
400 0.000282 0.000558 0.000706 0.000130
401 0.000269 0.000488 0.000757 0.000114

3. 输出结果 (WFV1.xlsx)

站点 B1 B2 B3 B4
Station 1 0.013824 0.024703 0.017775 0.008289
Station 2 0.016768 0.022395 0.016537 0.003900

💡 应用价值与注意事项

🌟 技术优势

  1. 数据替代性:当缺少同步过境影像或影像质量不佳时,可用等效反射率替代影像反射率进行水质反演
  2. 效率提升:只需人工测量水质参数,通过影像反射率即可完成反演,减少实测光谱工作量
  3. 精度改善:结合实测光谱与遥感影像反射率,能有效提升水质反演的精度和可靠性

⚠️ 注意事项

  1. 大气校正影响:大气校正对影像反射率的影响非常大,转换后仍需进一步校正
  2. 传感器特性:需考虑不同传感器的特性和响应函数差异
  3. 环境因素:实际应用中还需考虑水体类型、气象条件等环境因素的影响

📚 参考文献

  1. 孔祥生, 张安定, 钱永刚, 董宇阳. (2011). 地物光谱反射率测量与行星反射率计算联合教学设计与实践. 测绘科学, 36(5), 234-236. DOI: 10.16251/j.cnki.1009-2307.2011.05.087

等效遥感反射率转换:从实测光谱到传感器波段的实现
https://bingoodog.github.io/links/spectrum-resampling.html
作者
bin
发布于
2023年6月12日
许可协议