跳转至

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 - 微波亮温与极化。

下一步