Vegetation Science Lecture #4:
Non-linear Canopy Reflectance Model Inversion
(MSc. Remote Sensing)
P. Lewis
Remote Sensing Unit,
Dept. Geography
University College London,
26 Bedford way,
London WC1H 0AP
+44-71-387-7050 x 5557
e-mail: plewis@geog.ucl.ac.uk
.
The data files are in the input format required by kuusk_invert (so shouldn't need to be changed). The format of the files is as follows:
nSamples nBands band1 band2 band3 band4 ..........
vz va sz sa refl1 refl2 refl3 refl4 .........
i.e. the same as files output by the forward modelling code, kuusk. However, rather than looking at directional variations in reflectance as we did in the forward modelling case, we're going to look at spectral inversion i.e. we have a single directional sample, but many wavelengths (344, between 404nm and 900nm).
ba_112_06_08_97.refl.dat - measured data recorded at nadir viewing,
with a solar zenith angle of 35 degrees (the crop has been harvested by
this time so there is a mixture of soil and cut stalks on the ground).
The .plot files are simply the reflectance data in a form that can be plotted using generate_graph/xvgr. You will want to copy these to look at too.
If you want to experiment with the minimisation parameters that control each of the various algorithms, you may like to copy the files powell.file, amoeba.file, and anneal.file, then look at the man page for kuusk_invert to see how these files are used. Most of the parameters only make subtle differences e.g. tolerance limits for line minimsations in 1D etc. (recall lecture material)
The file param.file contains the initial values of the various parameters for kuusk_invert, which you have already come across (see man kuusk.model for description). You will need to copy this, and you might like to experiment with changing these values. Inversions may become 'stuck' and fail to find a solution: changing the starting values of the prarmeters may overcome this. You can either do this by simply editing the file, or you can use a shell we have written for this called invert.kuusk.model. In the same way we generated multiple parameter files for the forward modelling of kuusk, varying LAI say, we can do the same using invert.kuusk.model (see man page).
Copy the files into your directory, and examine the spectra shown.
Copy the shell ~plewis/public_html/invert/practical/lutMe
and modify it for an example datafile.
The shell builds a '3D' lut using the Kuusk model, over Chlorophyll,
soil brightness and LAI. Of its various outputs, you should examine:
for example, you can see the top 10 lowest RMSE values. This should
give you some clue as to what to expect from the other methods - e.g. whether
it has some or no sensitivity to any of the parameters.
You should use a command such as:
Have a look at the man page for kuusk_invert,
and have a go at running it as suggested below.
kuusk_invert -powell -vary 2 0 4 -param param.file -o out.params -v < ba_119_13_05_97.refl.dat > ba_119_13_05_97.refl.dat.forward
where param.file is the file with initial estimates, out.params contains the final values of the inverted parameters, and the output file (ba_119_13_05_97.refl.dat.forward) contains the forward modelled reflectance using the inverted model parameters. This allows you to compare the forward modelled refletance (with the inverted parameters) with the measured reflectance. To plot one against the other, you need to filter the forward modelled reflectance using the gawk script filt.awk in the same directory i.e.
kuusk_invert -powell -vary 2 0 4 -param param.file -o out.params -v < ba_119_13_05_97.refl.dat | gawk -f filt.awk > ba_119_13_05_97.refl.dat.forward.plot
you can then graph ba_119_13_05_97.refl.plot and ba_119_13_05_97.refl.dat.forward.plot and compare them.
An important feature to note is the -vary parameter on the command line: the first number is the number of parameters we want to vary, and the subsequent numbers are the (starting at zero) numbers of the parameters in the param.file i.e. in the example above, 2 parameters are varied, the first and fifth.
It is suggested that initially you experiment inverting with only two paramters, LAI and chlorophyll to start with. Take on board what you learned from the LUT processing about what a reasonable value of soil brightness might be to fix in the inversions.
The parameter file param.file has been set up with soil reflectance
information inverted from bare soil data, and so should provide a reasonable
estimate of the soil parameters. The code outputs rmse during the inversion,
and give an indication of how the inversion is progressing i.e. where the
values of the parameters stand currently. Look at how the forward modelled
reflectance differs (if it does) from the measured, and comment on the
differences.
foreach l ( 1 2 3 4 5 ) # loop over LAI invert.kuusk.model -LAI $l > param.file.LAI.$l # generates parameter file kuusk_invert -powell -vary 2 0 4 -param param.file.LAI.$l -o out.params.LAI.$l -v < ba_119_13_05_97.refl.dat | gawk -f filt.awk > ba_119_13_05_97.refl.dat.forward.$l.plot end
foreach inv ( powell anneal amoeba ) # loop over inversion algorithms
kuusk_invert -${inv} -vary 2 0 4 -param param.file -o out.params.$inv -v < ba_119_13_05_97.refl.dat | gawk -f filt.awk > ba_119_13_05_97.refl.dat.forward.$inv.plot
end
Comment on what is likely to be happening if the RMSE obviously shoots
up to very large values, bearing in mind what we have learned about boundary
constraints during minimsation. Does it come back down? What is happening
in this case?
Think about these factors in terms of what you learned from the LUT/error
surface visualisations and results.