Summary
This scenario is supposed to demonstrate how the reflectance of a surface can be inverted from a spectral radiance image and an Atmospheric Database (ADB) file.
The scene is very simple, composed of a flat plate that is assigned a reflectance via the ClassicEmissivity optical property. This property was chosen because it is the most widely used in existing scenes. There are actually two material scenarios:
-
A spectrally flat 2% reflector (
gray.sim
) -
A spectrally varying dry grass (
grass.sim
)
Setup
The two material scenarios share a large number of files. The following summary attempts to describe the key files used by the two simulations:
-
The file
geometry/plate.odb
contains the ground plane, which is assigned material ID #1. -
The
materials
folder has two different material files, which assign either the 2% gray (materials/test1.mat
) or dry grass (materials/test2.mat
) to material ID #1.-
The 2% gray reflectance is provided in the file
materials/gray.ems
as spectrally flat emissivity of0.98
. -
The dry grass reflectance is provided in the file
materials/grass.ems
as spectrally varying emissivity.
-
-
There are two
.scene
files, which use the same geometry but refer to the respective material files for the 2% gray and dry grass scenarios. -
The
.platform
file describes a single pixel sensor that uses the Raw Capture Method to generate spectral radiance output from 0.4 to 2.5 microns at 0.01 micron resolution (211 spectral points, total). -
The
.ppd
file places the sensor at 500 km looking nadir. -
The
mls_rural_23km.atm
file sets up a Classic Atmosphere using MODTRAN and the mid-latitude summer, rural 23 km visibility conditions defined in themls_rural_23km.tp5
file. The generated ADB file is namedmls_rural_23km.adb
. -
There are two
.sim
files and the only difference is which.scene
file is used (hence, which material is associated with the ground).
If you run either simulation, the radiance output will be in demo.img
and some useful truth is in demo_truth.img
.
Analysis
To perform the reflectance inversion, we extract the key variables from the input atmospheric database (ADB) file and the output radiance image file.
Extracting from the ADB File
The mls_rural_23km.adb
file contains key illumination variables
and this section will attempt to explain what there are, where they
are located in the ADB file and how they can be used.
Direct Illumination
The SOURCE_PATHS
section of the ADB file contains the exoatmospheric
solar and lunar irradiance and the respective transmissions for those
sources down to the ground (the comment in the ADB file should tell you
which column is which variable). What is not in the ADB file (and is not
present in these terms) is the declination angle for the Sun and the Moon.
To estimate the solar irradiance reaching the ground, you need to multiply the exoatmospheric solar irradiance (in the ADB) by the solar transmission (in the ADB) and by the cosine of the solar angle (not in the ADB, but output by DIRSIG during a simulation).
Diffuse Illumination
The DOWNWELLED_PATHS
section of the ADB file contains the radiance
of the sky as a function of zenith (declination) and azimuth (the
comment in the ADB file should tell you which column is which
variable). Each PATH
entry describes a single zenith/azimuth
location in the sky dome. The TOTAL
entry is the total downwelled
irradiance from the entire sky dome, which can be computed by
hemispherically integrating all of the PATH
entries.
Path Radiance and Transmission
The SENSOR_PATHS
section of the ADB file contains the path radiance
and transmission from the sensor the ground (the comment in the ADB
file should tell you which column is which variable). The section
contains multiple PATH
entries, for different ZENITH
and AZIMUTH
samples within the field-of-view. The GROUND_RANGE
is the distance
from the sensor to the ground (in km).
Extracting the Pixel Radiance
The output radiance for the pixel can be extracted to text in a variety of
ways. One of the easiest is to use the DIRSIG image_analyze
tool:
$ image_analyze --image=demo.img --operator=extract > grass_pixel.txt
Approximate Radiative Transfer Equation
The DIRSIG radiometry engine employs a suite of radiometry solver objects to compute the radiance for a given line-of-sight (pixel). The radiance reaching a given pixel is the result of multiple solvers computing individual components including (a) the incident solar irradiance onto a surface, (b) the reflected radiance from a surface, (c) the path radiance from the atmosphere, etc. The complexity of each calculation is hard to capture in a single governing equation, but the following approximation is appropriate for the simple conditions created for this example:
\begin{equation*} L_\mathrm{pixel} = \left [ \tau_\mathrm{up}~\frac{\rho}{\pi} E_\mathrm{sun}~\tau_\mathrm{sun} \cos( \theta_\mathrm{sun} ) \right ] + \left [ \tau_\mathrm{up} \int\limits_{\theta=0}^{\pi/2} \int\limits_{\phi=0}^{2\pi} \frac{\rho}{\pi} L_\mathrm{sky}(\theta,\phi) \sin( \theta ) \cos( \theta ) d\theta d\phi \right ] + \left [ L_\mathrm{up} \right ] \end{equation*}
where Lpixel is the pixel radiance at the sensor, Esun is the exoatmospheric solar irradiance, tsun is the solar transmission to the ground, thetasun is the solar declination angle, rho is the hemispherical (Lambertian) reflectance, tup is the upward path transmission (from the ground to the sensor), Lsky(theta,phi) is the sky radiance form a specific solid angle in the hemisphere and Lup is the upward path radiance (from the ground to the sensor).
This equation has 3 major terms: (a) the directly reflected solar radiance term, (b) the diffusely reflected sky radiance term and (c) the path (upwelled) radiance term. The reflectance rho is divided by pi in all instances because the BRDF of a Lambertian reflector is the total reflectance spread across the solid angle of the hemisphere (and the solid angle of the hemisphere is pi). Because of the Lambertian reflector being used in this scenario, the reflectance does not vary with theta and phi so the reflectance and sky illumination terms can be decoupled, which will allow this term to be simplified. We still need to include the angular variability in the sky, but the total (hemispherical) sky irradiance can be computed as:
\begin{equation*} E_\mathrm{sky} = \int\limits_{\theta=0}^{\pi/2} \int\limits_{\phi=0}^{2\pi} L_\mathrm{sky}(\theta,\phi) \sin( \theta ) \cos( \theta ) d\theta~d\phi \end{equation*}
which allows us to rewrite the reflected sky term in our approximate radiative transfer equation using the total (hemispherical) reflectance and total (hemispherical) sky irradiance:
\begin{equation*} L_\mathrm{pixel} = \left [ \tau_\mathrm{up} \frac{\rho}{\pi} E_\mathrm{sun} \tau_\mathrm{sun} \cos( \theta_\mathrm{sun} ) \right ] + \left [ \tau_\mathrm{up} \frac{\rho}{\pi} E_\mathrm{sky} \right ] + \left [ L_\mathrm{up} \right ] \end{equation*}
Reflectance Retrieval
By solving our approximate radiative transfer equation for rho, and using atmospheric terms from the ADB file with the pixel radiance from output image file, we can retrieve the reflectance of the surface:
\begin{equation*} \rho = \frac{L_\mathrm{pixel} - L_\mathrm{up}} {\tau_\mathrm{up} \frac{1}{\pi} E_\mathrm{sun} \tau_\mathrm{sun} \cos( \theta_\mathrm{sun} ) + \tau_\mathrm{up} \frac{1}{\pi} E_\mathrm{sky}} \end{equation*}
The Excel spreadsheet ReflectanceInversion.xlsx performs this retrieval on a wavelength by wavelength basis. The Excel workbook contains two sheets: one for the 2% gray scenario and one for the dry grass scenario. A screenshot of the sheet for retrieving the 2% gray reflector is shown below:

The columns in the Excel spreadsheet can be mapped to the following data sources:
-
Column B is the pixel radiance from the output radiance image
-
Columns C - G are from the
SOURCES
section of the ADB file -
Columns H - K are from the first
PATH
entry in theSENSOR_PATHS
section of the ADB file (this path is forZENITH = 0.0
, which is the straight down (nadir) path being modeled). -
Columns L - N are from the
TOTAL
entry in theDOWNWELLED_PATHS
section of the ADB file. -
Column O is the retrieved reflectance.
Important
|
The TOTAL data in ADB files dating back back to DIRSIG3
contained values that are actually irradiance over Pi. The
origin of these unconventional units is not understood. In
DIRSIG 4.6 release (and later) this was corrected. If you
are reproducing this demo with DIRSIG 4.5.x or earlier, then
the formula in the Excel spreadsheet should account for this
by not including the 1/pi term associated with the Esky
term.
|
Results
2% Gray Scenario
In the case of the 2% Gray scenario, the retrieved reflectance matches
the input value (rho = 0.02
) at all wavelengths except those where
the atmospheric transmission goes to zero and the calculation is undefined.

Dry Grass Scenario
The retrieval for the dry grass scenario is also a close match. In this case the input reflectance is plotted with the retrieved reflectance and the two curves are indistinguishable except where the atmospheric transmission goes to zero and the calculation is undefined.

Final Notes
This example is able to achieve a good match to the input reflectance because the radiometric scenario was simple and could be easily represented by an invertable radiative transfer equation. The following conditions would make the process more difficult:
-
Shadowing
-
Although the shadow could be approximated by setting Esun to
0
, an object casting a shadow also blocks some portion of the sky. In the reflective region of the spectrum, the sky contains significant asymmetries due to solar scattering, so simply using a fraction of the Lsky term would be a bad approximation of what DIRSIG is doing. Furthermore, DIRSIG doesn’t simply eliminate sky radiance, it finds that part of the hemisphere is an adjacent object reflecting light into the surface. Estimating the light onto and reflected from that shadowing (adjacent) object is another challenge to estimate.
-
-
Transmission
-
If target has any transmission (for example, a leaf), then the radiance transmitted from the object below would need to be approximated. This object would have to include the transmission lose in the illumination terms, which makes the approximation non trivial.
-
-
Non-Lambertian
-
The approximate radiative transfer function was able to use a simplified representation of the directly and diffusely reflected illumination because the surface is Lambertian. Once the surface has a non-Lambertian reflectance these terms become significantly more complicated and harder to write in a closed form that can be easily inverted.
-