Vegetation Science

MSc. Remote Sensing
 
 

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
 
 

PRACTICAL 4

The aim of this experiment is to look at some of the factors affecting the inversion of a non-linear canopy reflectance model against measured reflectance data. The model we will be inverting is the Kuusk CR model you have already come across. The numerical inversion algorithms used have been introduced to you in the lecture - the downhill simplex, powell and simulated annealing. The program you will be using is called kuusk_invert (see man page), an inverse version of the kuusk CR model.
 

1.0 Experiments

1.1 Data files

The data you are going to be inverting the Kuusk model against (in ~plewis/bin/csh/eg/invert_kuusk) are canopy reflectance data measured using a hand-held radiometer in Norfolk, during the summer of 1997. There are data from 24/4, 13/5, 4/6 and 6/8 (bare soil). The simulated canopy shown is from late April.

.

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_104_24_04_97.refl.dat - measured data recorded at nadir viewing, with a solar zenith angle of 51 degrees. LAI is between 0.5 and 1.
  • ba_112_13_05_97.refl.dat - measured data recorded at nadir viewing, with a solar zenith angle of 36.4 degrees. LAI is between 3 and 4.
  • ba_119_13_05_97.refl.dat - measured data recorded at nadir viewing, with a solar zenith angle of 40 degrees. LAI is ~ between 3 and 4 (slightly higher than ba_112_13_04_97 data.
  • ba_119_04_06_97.refl.dat - measured data recorded at nadir viewing, with a solar zenith angle of 58 degrees. LAI is ~ between 4 and 5.

  • 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.
     

    1.2 Building a LUT

    Before attempting to use other non-linear inversion methods, it is instructive to examine 'error surfaces' for the various datafiles and consider a coarse-grain LUT inversion.

    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:
     

    1.3 Powell Inversion


    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
    
    
    

    1.4 Using different inversion algorithms

  • Vary the minimisation algorithm used and comment on their relative merits. You could also do this using a shell e.g.
  • 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.
     

    2.0 Write Up

    As usual.


    Take me home..