09b - 大气模型与地气传输¶
LESS 将外部辐射环境表示为大气层顶入射源与大气模型的组合。入射源只描述太阳方向和 TOA 光谱;大气模型负责地表直射、天空散射以及模型支持的上行传播。本章先说明如何选择模型,再介绍常用参数和输出。
模型选择¶
| 需求 | 推荐模型 | 说明 |
|---|---|---|
| 同时计算地表入射辐照度和传感器方向的大气传播 | less.Atmosphere |
内置分层大气,支持光学、SIF、热红外和路径传输 |
| 使用 6S 参数体系 | less.SixSAtmosphere |
需要可选依赖 less3d[atmosphere] |
| 已知 TOA 到地表的直射与散射传输系数 | less.PrescribedAtmosphere |
严格区分束透过率与水平散射传输系数 |
| 真空或不考虑大气 | less.NoAtmosphere |
直射不衰减,漫射为零 |
| 快速生成宽光谱直射光与各向同性天空光 | less.SimpleSpectralAtmosphere |
简化光谱衰减和散射模型 |
| 可见光方向天空亮度分布 | less.HosekWilkieAtmosphere |
独立的 Hosek–Wilkie 模型 |
less.Atmosphere 是完整的大气边界与传播模型。其他光照类主要用于设置三维场景接收到的光,不等价于完整的地表到传感器大气传播。
内置分层大气¶
import less
scene = less.Scene()
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.Atmosphere.standard(
"midlatitude_summer",
aerosol="continental",
aot550=0.10,
ground_altitude_km=0.0,
streams=8,
sky_mode="anisotropic",
),
)
标准大气廓线包括:
| 名称 | 典型条件 |
|---|---|
"tropical" |
热带 |
"midlatitude_summer" |
中纬度夏季 |
"midlatitude_winter" |
中纬度冬季 |
"subarctic_summer" |
亚北极夏季 |
"subarctic_winter" |
亚北极冬季 |
"us_standard" / "us76" |
1976 美国标准大气 |
气溶胶类型包括 "continental"、"maritime"、"urban"、"desert"、"biomass_burning" 和 "stratospheric"。aot550 是 550 nm 气溶胶光学厚度;数值越大,直射光衰减越强。
ground_altitude_km 是场景地面的海拔。sky_mode="isotropic" 使用各向同性天空;"anisotropic" 保留天空辐亮度随天顶角和太阳相对方位的变化。
自定义大气廓线¶
可以先取得标准廓线,再检查气压、温度和气体柱含量:
profile = less.AtmosphericProfile.standard("us76")
print(profile.surface_pressure(0.0))
print(profile.column("h2o", ground_altitude_km=0.5))
atmosphere = less.Atmosphere(
profile=profile,
aerosol="maritime",
aot550=0.05,
)
自定义 AtmosphericProfile 时,高度单位为 km,气压单位为 hPa,温度单位为 K;各气体数密度使用 cm^-3。
单独求解并查看结果¶
import numpy as np
import less
atmosphere = less.Atmosphere.standard("us76", aot550=0.10)
wavelengths = np.arange(400.0, 1001.0, 5.0)
result = atmosphere.solve(
wavelengths,
sun_zenith=40,
output_altitudes_km=[2.0, 8.0, 20.0],
)
direct = result.direct_normal_irradiance
diffuse = result.diffuse_horizontal_irradiance
transmittance = result.upward_transmittance(
view_zenith=10,
observer_altitude_km=8.0,
)
less.AtmosphereResult 中常用的量为:
| 字段或方法 | 含义 |
|---|---|
direct_normal_irradiance |
地表法向太阳直射辐照度 |
diffuse_horizontal_irradiance |
地表水平面天空散射辐照度 |
direct_transmittance |
太阳直射透过率 |
upward_transmittance(...) |
地表到指定观测高度的方向透过率 |
path_radiance(...) |
观测方向的大气路径辐亮度 |
to_observer(...) |
把地表辐亮度传播到指定高度 |
directional_sky_radiance(...) |
天空方向辐亮度分布 |
辐照度使用 W m^-2 nm^-1,光谱辐亮度使用 W m^-2 sr^-1 nm^-1。
观测高度与大气层顶¶
成像产品可以选择地表、指定海拔或大气层顶:
projection = less.Orthographic(image_size=512, view_zenith=10, view_azimuth=180)
airborne = scene.simulate(less.OpticalImager(
projection=projection,
bands=less.Sentinel2A(),
spectral_resolution=5,
observation_altitude_km=8.0,
))
toa = scene.simulate(less.OpticalImager(
projection=projection,
bands=less.Sentinel2A(),
spectral_resolution=5,
observation_level="toa",
))
observation_altitude_km 使用海拔高度;投影类的几何高度只决定三维场景中射线的起点,两者含义不同。
光学、SIF、热红外和 LiDAR¶
- 光学成像同时使用下行直射/散射光、上行透过率和路径辐亮度。
- SIF 成像使用发射波段的上行透过率;可通过
observation_level或observation_altitude_km指定观测层。 - 热红外计算大气下行长波、地表热发射、上行吸收和大气自身路径发射。
- LiDAR 使用发射与返回路径的双程大气衰减。
6S 模型¶
安装可选依赖后,可以使用 6S 计算地表直射和散射光:
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.SixSAtmosphere(
atmosphere_profile="midlatitude_summer",
aerosol_type="continental",
aot550=0.1,
ground_altitude=0.0,
),
)
可用廓线包括 tropical、midlatitude_summer、midlatitude_winter、subarctic_summer、subarctic_winter 和 us_standard。常用气溶胶包括 no_aerosols、continental、maritime、urban、desert 和 biomass_burning。
用户指定大气传输¶
scene.illumination = less.Illumination(
source=less.Sun(
zenith=40,
azimuth=160,
wavelengths=[450, 550, 650],
irradiance=[1.85, 1.88, 1.55], # TOA 束法向光谱,W m^-2 nm^-1
),
atmosphere=less.PrescribedAtmosphere(
wavelengths=[450, 550, 650],
direct_beam_transmittance=[0.60, 0.70, 0.78],
diffuse_horizontal_transmittance=[0.20, 0.14, 0.09],
),
)
direct_beam_transmittance 是太阳直射束透过率:
diffuse_horizontal_transmittance 是水平散射传输系数:
后者不是地表总光照中的散射占比,也不是直射束透过率。若 TOA 束法向辐照度为
E_toa、太阳天顶角为 θ,则地表直射束法向辐照度为
E_toa × direct_beam_transmittance,地表水平散射辐照度为
E_toa × cos(θ) × diffuse_horizontal_transmittance。两个参数均无量纲,
可使用标量;使用光谱数组时应同时提供参考 wavelengths,LESS 会将系数插值
到实际求解波长。被动短波大气中二者逐波段之和不得超过 1。
简化大气和地表边界模型¶
# 真空边界
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.NoAtmosphere(),
)
# 宽光谱简化大气
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.SimpleSpectralAtmosphere(turbidity=2.5),
)
# 可见光 Hosek–Wilkie 方向天空
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.HosekWilkieAtmosphere(turbidity=2.5),
)
使用建议¶
- 地表反射率产品和卫星成像优先使用
less.Atmosphere。 - 需要 6S 大气传输时使用
less.SixSAtmosphere。 - 已知 TOA 到地表的直射和散射传输系数时使用
less.PrescribedAtmosphere。 - 不考虑大气衰减时使用
less.NoAtmosphere。 - 快速 RGB 预览可使用
less.HosekWilkieAtmosphere。
相关 API¶
less.Illumination、less.Sunless.Atmosphere、less.Atmosphere.standard()、less.Atmosphere.solve()less.AtmosphericProfile、less.AtmosphericProfile.standard()less.AtmosphereResult、to_observer()、upward_transmittance()、path_radiance()less.AtmosphereDatabaseless.SixSAtmosphere、less.PrescribedAtmosphere、less.NoAtmosphereless.SimpleSpectralAtmosphere、less.HosekWilkieAtmosphereless.OpticalImager、less.SIFImager、less.ThermalImager
下一章介绍卫星推扫成像与仪器响应。