29 - Radar backscatter¶
RadarScatterometer computes the radar backscattering coefficient σ⁰ of a 3-D scene. Crowns are volumes filled with leaves, needles or branches, trunks are explicit cylinders, and the ground may be sloped. The result is decomposed into the scattering mechanisms of the MIMICS model (Ulaby et al., 1990), showing the contributions of crowns, ground and trunks. The meaning of the parameters and the choice of models are explained in chapter 28.
The scene¶
import less
from less.distributions import Beta, SinePower
scene = less.Scene()
scene.size = 50.0
scene.terrain = less.Terrain(property=less.MicrowaveSoil(
sand_fraction=0.3, clay_fraction=0.2, soil_moisture=0.2,
dielectric_model="hallikainen",
rms_height_cm=0.8, correlation_length_cm=6.0,
surface_model="oh"))
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.02, thickness=0.0002, density=2500.0,
moisture=0.5, dry_density=0.3, orientation=Beta(1.101, 1.930)),
less.MicrowaveBranch(radius=0.02, length=1.5, density=1.2,
moisture=0.4, dry_density=0.4, orientation=SinePower(exponent=2.0)),
]))
tree.set_property("trunk", less.MicrowaveTrunk(moisture=0.45, dry_density=0.45))
trees = scene.add(tree, positions=[(10.0, 12.0, 0.0), (30.0, 35.0, 0.0)])
- Crowns:
MicrowaveLeaf,MicrowaveNeedleandMicrowaveBranchdescribe the scatterers in a crown, including number density, size, water content and orientation (the distributions inless.distributions).scattering_model="auto"chooses the scattering model from scatterer size and wavelength;"rayleigh","physical_optics","generalized_rayleigh_gans"or"infinite_cylinder"can also be given; - Trunks: each trunk is computed as a cylinder fitted to its mesh, so rotated, scaled and tilted trunks all work. Trunk meshes must be closed;
- Ground:
surface_modelcan be"oh","small_perturbation","physical_optics","geometric_optics"or"specular"; - Per-tree properties:
trees.set_property("trunk", [...])sets a property for each tree separately, for example different trunk water contents.
Simulation¶
sensor = less.RadarScatterometer(
geometry=less.Orthographic(image_size=128, view_zenith=35.0),
frequency=1.25e9,
quality=64,
scattering_samples=8192,
)
product = scene.simulate(sensor)
sigma0_hh = product.sigma0_HH # linear values per pixel
crown_hh = product.mechanisms["direct_crown"].hh
dihedral_hh = product.mechanisms["trunk_ground"].hh
scattering_samples is the number of samples for angular integrals over scatterers (default 200 000); it is reduced here to shorten preparation. quality is the number of samples per pixel. For quantitative work, increase both separately and make sure the result is stable.
The radar uses an orthographic projection with identical transmit and receive directions; on slopes the local incidence angle changes with the surface. The result is a backscattering coefficient, not a synthetic aperture radar image.
Each mechanism in product.mechanisms gives σ⁰ per pixel, read with .hh, .vv, .hv and .vh; the full polarimetric matrix is in .mueller:
| Mechanism | Path |
|---|---|
direct_crown |
Scattered by the crown and returned directly |
direct_ground |
Backscatter from rough ground |
cg |
Scattered by the crown, then reflected by the ground |
gc |
Reflected by the ground, then scattered by the crown |
gcg |
Reflected by the ground, scattered by the crown, reflected by the ground again |
trunk_ground, ground_trunk |
Dihedral reflection between trunk and ground |
direct_trunk |
Backscatter from trunks (only for tilted trunks) |
The mechanisms add up to the total backscattering coefficient.
Multiple scattering¶
By default only single scattering is computed, as in MIMICS. To include multiple scattering between leaves and branches, and waves that re-enter the crown after ground reflection, set scattering_order=None:
scene.terrain.set_property(less.MicrowaveSoil(
surface_model="small_perturbation", soil_moisture=0.2,
rms_height_cm=0.8, correlation_length_cm=6.0))
multiple = scene.simulate(less.RadarScatterometer(
geometry=less.Orthographic(image_size=128, view_zenith=35.0),
frequency=1.25e9, quality=64, scattering_samples=8192,
scattering_order=None, max_scatter_depth=4))
second_hh = multiple.mechanisms["second_order"].hh
Three more mechanisms appear:
| Mechanism | Path |
|---|---|
second_order |
Two scattering events |
higher_order |
Three or more, up to max_scatter_depth |
other_first_order |
Single-scattering paths not in MIMICS, such as ground–trunk–ground |
Specular reflection from the ground does not count as a scattering event, so gcg is still single scattering. Multiple scattering needs a ground model that describes scattering into all directions ("small_perturbation", "physical_optics", "geometric_optics" or "specular"); "oh" describes backscatter only and cannot be used. Multiple scattering is computed by Monte Carlo and usually takes several times longer than single scattering.
Notes¶
- Crowns may overlap, and their effects add up where they do;
- orientation distributions are relative to the vertical and the same in all azimuths;
- ground reflection on slopes is computed for the local surface;
- trunks cast shadows, whereas MIMICS treats trunks as an attenuating layer, so in sparse forests the ground-related mechanisms of LESS are about 0.2–0.7 dB higher than in MIMICS;
- in periodic scenes, crowns crossing the boundary continue in the neighbouring tiles.
When comparing with other models, the scatterer models, orientation distributions, soil roughness and boundary conditions must all match.