27 - Fluorescence imaging¶
A small part of the light absorbed by plants is re-emitted as chlorophyll fluorescence, between 650 and 850 nm with peaks near 687 nm and 740 nm. Solar-induced chlorophyll fluorescence (SIF) is closely related to photosynthesis. Fluorescence imaging takes two steps:
- compute how much fluorescence each leaf emits, the fluorescence source;
- observe it with
SIFImager: the fluorescence travels through the canopy, is scattered and absorbed by leaves and soil, and reaches the sensor.
This chapter uses a fixed fluorescence quantum yield. Fluorescence that changes with photosynthesis is covered in chapter 33.
The scene¶
Leaves must use FLUSPECT (chapter 10), which gives leaf reflectance, transmittance, absorption and fluorescence spectra; fqe is the fluorescence quantum yield:
import less
scene = less.Scene()
scene.size = 6.0
scene.terrain = less.Terrain(property=less.Lambertian(reflectance=0.15))
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150), atmosphere=less.NoAtmosphere())
plant = less.Object("plant")
plant.add_component("leaves", less.Mesh(less.asset_path("tutorial_tree.obj"), group="leaves"))
plant.set_property("leaves", less.Fluspect(N=1.5, cab=45, car=10, cw=0.012, cm=0.006, fqe=0.012))
scene.add(plant, positions=[(3, 3, 0)])
Fluorescence source and image¶
source = scene.simulate(less.SIFProcess(mode="static", quality="high"))
image = scene.simulate(less.SIFImager(
less.Orthographic(image_size=64),
bands=[687.0, 740.0, 760.0],
quality=32,
sif_result=source,
))
image.save("sif.tif")
print(image.data.mean(axis=(0, 1))) # W m⁻² sr⁻¹ nm⁻¹
SIFProcess(mode="static") computes the fluorescence source from Fluspect.fqe and needs no temperature or photosynthesis parameters. The result is the fluorescence radiance seen by the sensor, in W m⁻² sr⁻¹ nm⁻¹, without reflected sunlight.
Sunlit and shaded leaves¶
Each leaf has two fluorescence sources: the shaded part is excited only by skylight and multiple scattering, while the sunlit part is also excited by direct sunlight. During imaging, whether the point where a viewing ray hits the leaf can see the sun decides which source it emits. Sunflecks and shadows on a single leaf therefore remain visible in the image, and the leaf mesh does not need to be subdivided for this.
The two photosystems¶
Giving a quantum yield for each photosystem produces separate fluorescence images for photosystem I and photosystem II, which add up to the total:
plant.set_property("leaves", less.Fluspect(N=1.5, cab=45, car=10, cw=0.012, cm=0.006,
fqe=(0.002, 0.01))) # (PSI, PSII)
split = scene.simulate(less.SIFProcess(mode="static", quality="high"))
psii = scene.simulate(less.SIFImager(
less.Orthographic(image_size=64), bands=[687.0, 740.0],
sif_result=split, photosystem="PSII"))
psi = scene.simulate(less.SIFImager(
less.Orthographic(image_size=64), bands=[687.0, 740.0],
sif_result=split, photosystem="PSI"))
With a single yield, the fluorescence of the two photosystems is combined and cannot be separated afterwards.
Atmosphere and observation height¶
With less.Atmosphere, fluorescence radiance can be given at the top of the atmosphere or at any altitude, including the atmospheric transmittance along the viewing path:
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.Atmosphere.standard("us76", aot550=0.1))
airborne_source = scene.simulate(less.SIFProcess(mode="static", quality="high"))
airborne = scene.simulate(less.SIFImager(
less.Orthographic(image_size=64), bands=[687.0, 740.0], quality=32,
sif_result=airborne_source, observation_altitude_km=3.0))
After the illumination or the scene changes, compute the fluorescence source again; an old source cannot be used for a new state of the scene.