30 - 微波亮温¶
MicrowaveRadiometer 计算三维场景的极化亮温:土壤、树冠和树干发出的微波辐射,经冠层和大气到达传感器。场景的构建方式与雷达相同(第 29 章),另外每个部分还需要温度。亮温、含水量和粗糙面模型见第 28 章。
场景¶
import less
from less.distributions import Beta, SinePower
scene = less.Scene()
scene.size = 30.0
scene.repetitive = True
scene.terrain = less.Terrain(property=less.MicrowaveSoil(
sand_fraction=0.3, clay_fraction=0.2, soil_moisture=0.25,
dielectric_model="mironov",
surface_model="hqn", roughness_h=0.6, roughness_nv=-1.0, roughness_nh=0.0,
temperature_surface=291.0, temperature_deep=288.0))
tree = less.Object("tree")
tree.add_component("crown", less.TurbidBoundary(less.asset_path("tutorial_tree.obj"), group="crown"))
tree.add_component("trunk", less.Mesh(less.asset_path("tutorial_tree.obj"), group="trunk"))
tree.set_property("crown", less.MicrowaveVegetation(components=[
less.MicrowaveLeaf(radius=0.025, thickness=0.0002, density=1500.0,
moisture=0.55, dry_density=0.3, temperature=297.0,
orientation=Beta(1.101, 1.930)),
less.MicrowaveBranch(radius=0.015, length=1.0, density=2.0,
moisture=0.45, dry_density=0.4, temperature=297.0,
orientation=SinePower(exponent=2.0)),
]))
tree.set_property("trunk", less.MicrowaveTrunk(moisture=0.45, dry_density=0.45, temperature=294.0))
scene.add(tree, positions=[(8.0, 9.0, 0.0), (21.0, 18.0, 0.0)])
- 土壤:
surface_model="hqn"是 SMOS 和 L-MEB 使用的 H-Q-N 粗糙度模型,参数为roughness_h、polarization_mixing、roughness_nv、roughness_nh。也可以用统计粗糙面模型"small_perturbation"、"physical_optics"、"geometric_optics"(由rms_height_cm和correlation_length_cm描述),或光滑的"specular"。土壤温度由temperature_surface和temperature_deep按 Wigneron 等的方法组合为有效温度; - 温度:每类树冠散射体、每根树干和土壤各有自己的温度。组件的热属性或逐株设置的树干属性会代替这里的温度;
- 树干:显式树干的直径应不小于波长(L 波段为 21 cm),更细的枝干用树冠中的
MicrowaveBranch描述。
模拟¶
sensor = less.MicrowaveRadiometer(
geometry=less.Orthographic(image_size=128, view_zenith=40.0),
frequency=1.4e9,
polarization="HV",
quality=32,
scattering_samples=8192,
atmosphere_optical_depth=0.01,
)
product = scene.simulate(sensor)
tb_h, tb_v = product.Tb_H, product.Tb_V # 逐像元,K
soil = product.sources["soil"] # (行, 列, 4)
scattering_samples(默认 200 000)是散射体角度积分的采样数,quality 是每个像元的采样数,两者分别控制不同的误差。
默认 volume_scattering=True,计算植被体散射。需要吸收层对照时,可设为
False:从传播消光中移除散射部分,同时关闭体散射事件,保留原有吸收、
热发射及地表、树干反射。它不会把散射损失当成吸收。
absorbing = less.MicrowaveRadiometer(
geometry=less.Orthographic(image_size=32, view_zenith=40),
frequency=1.4e9, volume_scattering=False,
atmosphere_optical_depth=0, quality=64)
product = scene.simulate(absorbing)
polarization 决定 product.data 中的通道:"H"、"V"、"HV" 或 "full"(Stokes 参数 I、Q、U、V,其中 I = T_H + T_V,Q = T_H − T_V)。可以用正射或透视投影,包括把传感器放在冠层下方向上看。
亮温的来源¶
product.sources 给出各部分的贡献:
| 来源 | 内容 |
|---|---|
soil |
透过冠层看到的土壤发射 |
crown |
树冠的发射 |
trunk |
树干的发射 |
sky |
被反射或散射进视线的大气和宇宙背景 |
atmosphere |
场景与传感器之间的大气 |
各来源之和等于总亮温。每个来源是(行, 列, 4)的数组,单位 K,按修正 Stokes 参数的顺序 (T_V, T_H, T_U, T_V') 排列:第 0 通道相加得到 Tb_V,第 1 通道相加得到 Tb_H。
total_v = sum(source[:, :, 0] for source in product.sources.values())
print(abs(total_v - product.Tb_V).max())
atmosphere_optical_depth 是大气在天顶方向的光学厚度。大气温度取场景的气温,没有设置微气象时取土壤表层温度。设为 0 时只有宇宙背景辐射(2.725 K)。
检查采样噪声¶
在同一场景和采样数下,用不同的随机种子(传感器的 seed 参数)运行几次,比较每个像元 H、V 亮温的差异:
runs = [scene.simulate(less.MicrowaveRadiometer(
geometry=less.Orthographic(image_size=32, view_zenith=40.0),
frequency=1.4e9, polarization="HV", quality=32,
scattering_samples=8192, atmosphere_optical_depth=0.01, seed=seed))
for seed in (17, 31, 47, 73)]
import numpy as np
spread = np.std([run.Tb_H for run in runs], axis=0)
print("H 亮温的像元标准差(K):", spread.mean())
使用相同的种子会重复同样的随机序列,因此不能当作独立的重复实验。整幅影像的平均值收敛得比单个像元快得多,研究单个像元时需要看每个像元的标准差。散射角积分的误差需要单独增大 scattering_samples 来检查。
说明¶
- 默认包括植被多次散射,频率较高、冠层较密时耗时更长;
- 树冠可以重叠,地面可以有坡度,周期场景的处理与雷达相同;
- 均匀冠层在散射体、土壤和大气设置一致时可以与一维辐射传输模型比较。
光滑裸土的独立解析对照见 A9 - 微波亮温与极化。