09c - 卫星推扫成像仿真¶
LESS 可以把三维地表场景、大气传播和成像仪器连接成一条端到端链路。输出不只是理想辐亮度,还可以包含探测器电子数、量化后的数字量化值(DN)以及逐像元观测位置和时间。
这一功能适合开展传感器方案比较、影像机理分析、算法测试数据生成和数字孪生场景观测。当前实现采用局部平面坐标系描述一段卫星或机载航迹;如果研究需要完整星历、姿态四元数、地球曲率或严格正射校正,应在外部轨道工具中生成观测轨迹,再接入 LESS。
三层设置¶
一次推扫成像由三部分组成:
| 层次 | 类 | 作用 |
|---|---|---|
| 观测几何 | Pushbroom |
高度、航向、幅宽、地速、行频和扫描时间 |
| 光谱与传播 | OpticalImager |
波段、采样质量、大气观测高度和邻接效应 |
| 仪器响应 | Instrument |
口径、积分时间、透过率、量子效率、MTF、噪声和 ADC |
最小示例¶
import less
scene = less.Scene(backend="optix")
scene.size = 1000.0
scene.terrain = less.Terrain(
property=less.Lambertian(reflectance=0.20)
)
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.Atmosphere.standard(
"midlatitude_summer",
aerosol="continental",
aot550=0.10,
sky_mode="anisotropic",
),
)
projection = less.Pushbroom(
resolution=1024, # 每条扫描线的像元数
num_lines=2048, # 沿轨扫描线数
altitude=700000, # 相对参考面的几何高度,m
swath_width=1000, # 地面幅宽,m
heading=180, # 顺时针自北起算
ground_speed=7000, # 地速,m/s
line_rate=14336, # 行频,line/s
start_time=0.0,
)
instrument = less.Instrument(
aperture_diameter=0.20,
integration_time=0.001,
optical_transmission=0.70,
quantum_efficiency=0.75,
read_noise=4.0,
dark_current=20.0,
full_well=80000,
gain=5.0, # electron / DN
bit_depth=14,
mtf_nyquist=0.30,
smear=0.2, # 沿轨拖影,pixel
seed=42,
)
sensor = less.OpticalImager(
projection=projection,
bands=less.Sentinel2A(),
spectral_resolution=5,
quality=16,
observation_level="toa",
adjacency_sigma=1.0, # 邻接混合尺度,pixel
instrument=instrument,
)
product = scene.simulate(sensor)
observation_level="toa" 会自动使用 scene.illumination.atmosphere,先把三维场景的出射辐亮度传播到大气层顶,再进入仪器链。用户不需要单独调用大气求解器。
运动和扫描时间¶
如果同时设置 ground_speed 和 line_rate,LESS 根据扫描线数量自动计算沿轨覆盖长度:
也可以直接设置 ground_track_length。显式长度的优先级更高,适合已经知道地面覆盖范围的情况。每条扫描线的时刻为 start_time + line / line_rate。
altitude 是三维射线几何使用的相对高度;observation_level="toa" 是大气传播的终点。二者控制不同的物理环节。
仪器计算¶
对于每个波段,LESS 将辐亮度转换成到达探测器的光子数,再乘以量子效率得到电子数。计算考虑有效带宽、入瞳面积、像元立体角、积分时间和光学透过率。随后依次应用:
- PSF、MTF、抖动和沿轨拖影;
- 光子散粒噪声、暗电流和读出噪声;
- 满阱截断、增益和 ADC 位深量化。
如果波段使用光谱响应函数,LESS 会自动计算等效带宽。为了得到可重复结果,可以固定 seed;如果只检查确定性辐射结果,可设置 noise=False。
输出产品¶
当设置了 instrument,返回值为 InstrumentImageProduct:
product.source_radiance # 大气传播后的入瞳辐亮度
product.radiance # PSF、MTF、抖动和拖影后的辐亮度
product.electrons # 探测器电子数
product.dn # ADC 输出;product.data 与它相同
product.geolocation # x、y、观测天顶角、方位角和时间
product.save("satellite_product.npz") # 保存全部中间量
product.save("satellite_dn.tif") # 保存 DN 与地理定位
product.save("satellite_preview.png", bands=[3, 2, 1])
场景设置投影坐标后,逐像元位置还会包含 easting、northing 和 crs,GeoTIFF 使用地理控制点保存推扫几何:
LESS 的局部坐标为 x 向东、y 向南,因此北向坐标由场景原点向南递减。
邻接效应¶
设置 adjacency_sigma > 0 后,LESS 根据观测路径上的瑞利和气溶胶散射光学厚度,对邻近像元辐亮度进行一阶空间混合。该近似保持均匀场景的辐亮度不变,适合快速评估高反差边界附近的邻接影响。它不是水平非均匀三维大气的替代模型。
运行内置示例¶
import less
product = less.examples.run(
"satellite_pushbroom",
show=False,
output_dir="satellite_output",
backend="optix",
)
OptiX、Vulkan 和 Embree 使用同一套用户接口。发布验证 Val25 检查三后端推扫辐亮度的一致性,以及探测器换算、空间响应和地理定位误差。
当前适用范围¶
当前版本已经覆盖局部航段内的推扫运动、跨轨扫描、逐像元视角、任意观测高度的一维分层大气、地气耦合、邻接近似、光谱响应和探测器成像链。
以下能力尚未包含:完整轨道动力学、地球椭球曲率、姿态时间序列、时间变化场景、云的三维辐射传输、偏振以及基于严格大气点扩散函数的邻接效应。这些限制不影响局部场景和给定航迹条件下的端到端成像试验,但不应把当前输出直接等同于经过几何处理的任务级卫星产品。
相关 API¶
less.Pushbroom、less.OpticalImagerless.Instrument、less.Sentinel2Aless.Atmosphere、less.Scene.simulate()less.Product.save()、less.Product.geolocation