Skip to content

Convert hyperspectral exposure image to reflectance #88

@czender

Description

@czender

This is a draft algorithm to retrieve spectral reflectance based on my understanding of the (possibly soon-to-be) available inputs. Suggestions and correction welcome (the more specific, the better). For simplicity, the algorithm description currently omits the time dimension. It is implicit in all quantities below except rfl_wht.

NOTE: proposal below has been migrated to documentation which supports Latex for ease of reading.
https://terraref.gitbooks.io/terraref-documentation/content/hyperspectral_data.html But the commenting isn't that great,

So please comment below on this issue, or propose changes to the algorithm text as a pull request: https://github.com/terraref/documentation/blob/master/hyperspectral_data.md


Inputs and Outputs

syntax: Variable(dimensions) [units]
$$$
% Someone please make LaTeX typeset this...
I_p(\lambda,y,x) = F_{\lambda}(\lambda) R_p(\lambda) C(\lambda)
$$$

Inputs: Required known or measured inputs:**

  1. uint16 xps_img(wavelength,y,x) [xps] =Exposure from experiment image (i.e., plants) (known, VNIR, SWIR sensors)
  2. uint16 xps_wht(wavelength,x) [xps] =Exposure from white reference sheet/panel (measured by VNIR, SWIR sampling period? location?)
  3. float32 rfl_wht(wavelength) [fraction] =Reflectance of white reference (factory calibration) (assume time-constant?)
  4. float32 flx_dwn(wavelength) [W m-2 um-1] =Downwelling spectral irradiance (measured by environmental sensor. units?)

Intermediate derived quantities:

  1. float32 cst_cnv(wavelength) [xps/(W m-2 um-1)] =Proportionality constant between reflected spectral flux and Exposure (derived)
  2. float32 flx_upw(wavelength) [W m-2 um-1] =Upwelling spectral flux (derived. and possibly measured for closure?)

Outputs

  1. float32 rfl_img(wavelength,y,x) [fraction] =Reflectance of image (i.e., plants)

Proposed Algorithm to retrieve reflectance from measurements:

  1. Assume image exposure linear with incident spectral flux, this implies
    • xps_wht=flx_dwn*rfl_wht*cst_cnv
  2. Derive proportionality constant from calibration:
    • cst_cnv=xps_wht/(flx_dwn*rfl_wht)
  3. Assume proportionality constant for calibration sheet and plant image are identical, this implies
    • xps_img=flx_dwn*rfl_img*cst_cnv
  4. Derive plant reflectance from exposure
    • rfl_img=xps_img/(flx_dwn*cst_cnv)
  5. (Optional) Derive upwelling spectral flux from reflectance and compare it to measured upwelling spectral flux (if available) for closure/validation
    • flx_upw=flx_dwn*rfl_img
  6. (Optional) Apply PAR-sensor SRF to downwelling irradiance, integrate, compare to measured PAR for closure (integration would require detailed information or assumptions about bandpass of each spectral channel).
  7. More?

Before implementing this, I would like feedback and/or sign-off by @dlebauer @nfahlgren @max-zilla @pless @solmazhajmohammadi and @LTBen.

Next steps

More assumptions, input measurements, and/or more sophisticated algorithms would incorporate these additional sources of information:

  1. BRDF (angular reflectance properties) of plant/leaves
  2. 3D orientation of reflective surfaces (plant/leaves)
  3. BRDF (angular reflectance) of calibration sheet
  4. Direct/diffuse partitioning of downwelling flux

Notes

  • Units of exposure are vague. Exposure is similar to a photon counter modulated by the spectral response function (SRF) of the sensor. The units are denoted [xps] and range from [0..2^16-1] = [0..65535].
  • add QAQC tests for sensitivity and saturation in each band
  • cross validate with other sensors with know spectral response functions.
  • NB: Three required inputs (xps_wht, rfl_wht, flx_dwn) are not ready to use. Their location, units, and/or sampling intervals are unknown. Only xps_img is ready. Please tell me how to get the other three in the notes below. (@LTBen, @markus-radermacher-lemnatec)

Metadata

Metadata

Assignees

Labels

sensor/hyperspectralissues relating to VNIR and SWIR scanners

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions