There are quite a few different versions of the SAIL model. This is probably the second simplest, as it assumes a single canopy layer, with a simple hotspot correction. The soil boundary is assumed to be Lambertian, and a combination of two soil spectra (typically one wet and one dry). Leaf optical properties are calculated with PROSPECT 5B (which you should already be familiar with). In total, we have 11 input parameters (as well as the illumination/acquisition geometry, controlled by the solar zenith angle, the view zenith angle and the relative azimuth angle). The input parameters are
The soil is assumed Lambertian, and made up of the linear combination of two spectra, $\rho_{s}^{d}$ and $\rho_{s}^{w}$, dry and wet, respectively. The soil spectrum is calculated as
$$ \rho_{s}=R\cdot\left(P\cdot\rho_{s}^{d} + \left(1-P\right)\cdot \rho_{s}^{w}\right). $$This version of PROSAIL uses a Campbell leaf angle distribution function. Rather than choosing discrete distributions, the Campbell function parameterises the LAD function with a single parameter, the mean leaf angle.
The aim of this exercise is to look at the sensitivity of PROSAIL to different parametes spectrally, in a way that is similar to what you did before with PROSPECT. Remember that this experiment is still a local sensitivity analysis experiment around $\mathbf{x_0}$, so make sure you consider different locations in parameter space. Also consider the effect of acquisition geometry.
You can use the function prosail_sensitivity_ssa
, from prosail_functions
. Remember that this function has extensive help on its syntax.
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from prosail_functions import *
plot_config()
def hspot ( h ):
retval = []
wv = np.arange(400, 2501)
for theta_v in np.arange ( -80,80, 5):
if theta_v < 0:
raa = -180
t = -theta_v
else:
raa = 0
t = theta_v
r = call_prosail ( 1.5, 45, 4, 0.1, 0.0143, 0.007, 4, 45, 4,
1, h, 30, t, raa )[wv==865]
retval.append ( r )
return np.arange ( -80,80, 5), np.array(retval).squeeze()
plt.figure(figsize=(12,12))
x,y = hspot(0.01)
plt.plot(x,y,'-', label="0.01")
x,y = hspot(0.1)
plt.plot(x,y,'-', label="0.1")
x,y = hspot(0.5)
plt.plot(x,y,'-', label="0.5")
x,y = hspot(1)
plt.plot(x,y,'-', label="1")
plt.legend(loc='best')
pretty_axes()
w,s = prosail_sensitivity_ssa(x0=np.array([ 2.5 , 40. , 5. , 0. , 0.011, 0.005, 0.5 ,
45. , 3. , 0.5 , 0.01 ]))
plt.xlim ( 650, 890)
w,s = prosail_sensitivity_ssa(x0=np.array([ 2.5 , 40. , 5. , 0. , 0.011, 0.005, 8 ,
45. , 3. , 0.5 , 0.01 ]))
plt.xlim ( 650, 890)
w,s = prosail_sensitivity_ssa
Perhaps the first thing you've heard about optical remote sensing is about the use of $NDVI$, the normalised difference vegetation index. This index has a long history in remote sensing, and one could say that it is broadly related to the amount of green vegetation. $NDVI$ is calculated using the red and NIR bands (typically, wavelenghts around 680 and 865 nm):
$$ NDVI=\frac{NIR-RED}{NIR+RED}. $$As it is a normalised quantity, NDVI goes between -1 and 1, but for vegetation, we usually find that it goes from $\sim$ 0.2 to 0.9.
$NDVI$ has been correlated to most things. Based on the sensitivity analysis you performed above, can you suggest some of these correlates?
$NDVI$ is often used as a proxy for LAI. You can use the provided function to explore the relationship beween the VI and LAI. What are your observations?
x,r,n = canopy_vi_expt( nuisance=["lai", "cab", "n", "cw"])
The MTCI is a vegetation index that was developed for data from the MERIS sensor onboard the ENVISAT platform, and that relates surface reflectance to canopy chlorophyll content. The index is defined as the ratio of reflectance differences between MERIS bands 10 and 9 to reflectance differences between bands 9 and 8.
$$ MTCI = \frac{R_{753}-R_{705}}{R_{705}-R_{681}}, $$where $R_{x}$ indicated reflectance for a waveband whose centre wavelength is located at $x$. In this experiment, we will use PROSAIL to look at the robustness of such an index. We note that the bandwidth of these three bands is 7.5, 10 and 7.5 $nm$.
x0
to some other value).minvals
and maxvals
dictionaries. Comment on the results, and in particular, in the robustness of the regression.noise_level
parameters. We can assume that noise_level
is the standard deviation of some additive Gaussian noise. Values of 0.01 are probably optimistic for the type of atmospheric correction we typically get.plt.figure(figsize=(12,12))
x, y, p0, p1 = mtci_experiment(nuisance=["lai","cw"])
x, y, p0, p1 = mtci_experiment
x, y, p0, p1 = mtci_experiment
from IPython.core.display import HTML
def css_styling():
styles = open("custom.css", "r").read()
return HTML(styles)
css_styling()