本文 中的代码是关于数组排序(和还原)的。我的疑问是关于在热带中添加 149.0 以执行缩放因子。
特定代码片段:
// 将缩放因子应用到相应的波段。
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
当然,特别选择 149.0 的原因是基于科学研究提供的校准系数,以准确反映原始传感器读数与它们所代表的物理属性之间的关系 但是 为什么是 149?MTL 文档中的 RADIANCE_ADD_BAND_10/11 显示的数字不是 149,而是通常的 0.1。甚至 RADIANCE_MULT_BAND_10/11 的值也是 0.00341802,而不是 0.000341。
能否给我提供任何论文链接,说明和计算更改 149 和 0.0003 等文档值背后的原因?
是对的,Landsat 8 级 1 产品的 MTL 文件中的热波段辐射定标系数通常显示
RADIANCE_ADD_BAND_10
和
RADIANCE_ADD_BAND_11
约为 0.1,
RADIANCE_MULT_BAND_10
和
RADIANCE_MULT_BAND_11
约为 0.003418。
代码片段中使用的公式(乘以 0.00341802 并加上 149.0)似乎 不 用于直接将热红外 (TIR) 波段的数字数 (DN) 转换为光谱辐射率。相反,它看起来像将 DN 转换为 摄氏度 (°C) 的公式。
以下是该细分的说明:
- 将 DN 转换为光谱辐射率: MTL 文件中提供的系数用于将 TIR 波段的 DN 转换为光谱辐射率。此转换的公式为:
Radiance = (RADIANCE_MULT_BAND * DN) + RADIANCE_ADD_BAND
-
将光谱辐射率转换为摄氏温度:
进行此转换需要使用热常数 K1 和 K2,这些常数在 Landsat 8 MTL 文件中以
K1_CONSTANT_BAND_10/11
和K2_CONSTANT_BAND_10/11
的形式提供。然后使用以下公式将光谱辐射率转换为亮度温度(以开尔文为单位):
Brightness Temperature (K) = K2_CONSTANT / ln((K1_CONSTANT / Radiance) + 1)
- 将开尔文转换为摄氏度: 最后,通过从开尔文温度中减去 273.15,将亮度温度从开尔文转换为摄氏度:
Celsius = Kelvin - 273.15
提供的代码片段中的公式(乘以 0.00341802 并加上 149.0)似乎是 步骤 1 和 2 的简化组合 ,可能针对特定的 Landsat 8 场景或数据集进行了校准。 149.0 的加数可能是通过将 K1 和 K2 常数合并到单个值中得到的近似值,从而可以直接从 DN 转换为摄氏度。
遗憾的是,如果没有有关使用此特定公式的更多上下文或参考资料,就很难提供 149.0 值的确切推导。 可能是 Google Earth Engine 中使用的简化方法或基于特定数据集的校准。
若要找到更准确的解释,我建议执行以下操作:
- 查看 Google Earth Engine 文档: 检查是否有关于 Landsat 8 热波段处理的特定文档或教程,这些文档或教程可以阐明所使用的公式。
- 搜索 Google Earth Engine 论坛: 其他人可能遇到过类似的问题,或者开发人员可能在论坛上提供了见解。
- 检查代码存储库或脚本: 如果此代码片段来自更广泛的项目或分析,请查看是否有任何随附的文档或注释可以提供上下文信息。
请记住,直接使用 MTL 文件中提供的系数和方程式将始终是将 Landsat 8 热波段的 DN 转换为光谱辐射率或温度的最准确和最可靠的方法。
标签:google-earth-engine From: 78590299