跳转至

22 - 四分量分类

FourComponentImager 把传感器看到的场景逐像元分为四类:光照叶片、阴影叶片、光照土壤和阴影土壤,并给出各类的可见面积。四分量常用于热红外混合像元分解、组分温度反演和方向亮温建模。

分类方法

每个像元发出若干条观测光线。每条光线到达场景后判断两件事:

  1. 落在地面还是叶片上;
  2. 该点能否直接看到太阳:从该点向太阳方向发一条光线,被挡住就是阴影。

两两组合得到四类。像元的标签取多数,同时保留四类各自所占的比例,混合像元的信息不会丢失。

标签 分量 含义
0 background 没有落到任何物体上
1 sunlit_soil 光照土壤
2 sunlit_leaf 光照叶片
3 shaded_soil 阴影土壤
4 shaded_leaf 阴影叶片

对于统计植被,光线进入冠层边界即记为叶片。

示例

import less

scene = less.Scene()
scene.size = 30.0
scene.terrain = less.Terrain(property=less.Lambertian(reflectance=0.15))
scene.illumination = less.Illumination(
    source=less.Sun(zenith=35, azimuth=180), atmosphere=less.NoAtmosphere())

maize = less.Object("maize", mesh=less.asset_path("maize.obj"))
maize.set_property(less.Lambertian(reflectance=0.45, transmittance=0.05))
scene.add(maize, positions=[(x, y, 0.0) for x in range(6, 25, 3) for y in range(6, 25, 3)])

sensor = less.FourComponentImager(
    less.Orthographic(image_size=256, extent=20.0, center=(15.0, 15.0)),
    num_samples=64)
product = scene.simulate(sensor)
print(product.summary())
product.save_classification("four_component.png")

四分量分类只能使用正射投影,这样分量面积才有明确的几何意义。num_samples 是每个像元的观测光线数,决定比例的精度。

结果

属性或方法 形状 含义
product.labels (行, 列),uint8 每个像元的多数类标签
product.fractions (行, 列, 4) 四类的比例,顺序为光照土壤、光照叶片、阴影土壤、阴影叶片
product.pixel_area_m2 数值 一个像元对应的地面面积
product.summary() 字典 各分量的可见面积(m²)
product.area(name) 数值 某一分量的可见面积
product.save_classification(path) — 保存彩色分类图

分量面积按比例累加:

\[A_c = \sum_{\text{像元}} f_c \, A_{\text{像元}}\]

其中 f 是该分量在像元中的比例。四个分量的面积之和等于成像范围的面积,上例中为 20 m × 20 m = 400 m²,可以用来检查结果:

areas = product.summary()
print(sum(areas[name] for name in ("sunlit_soil", "sunlit_leaf", "shaded_soil", "shaded_leaf")))

成像范围超出地面时,差额会出现在 background 中。

周期场景

开启周期边界后,观测光线和阴影光线都会穿过场景边界继续追踪。太阳天顶角较大时,长长的阴影可以从场景另一侧落回来,阴影土壤的面积会明显增加,而土壤的总面积不变:

scene.repetitive = True
periodic = scene.simulate(sensor)
print(periodic.summary())

下一步