terraref / computing-pipeline

Pipeline to Extract Plant Phenotypes from Reference Data
BSD 3-Clause "New" or "Revised" License
24 stars 13 forks source link

Convert hyperspectral exposure image to reflectance #88

Closed czender closed 7 years ago

czender commented 8 years ago

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... Ip(\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:

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

    Outputs

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

    Proposed Algorithm to retrieve reflectance from measurements:

  8. Assume image exposure linear with incident spectral flux, this implies
    • xps_wht=flx_dwn*rfl_wht*cst_cnv
  9. Derive proportionality constant from calibration:
    • cst_cnv=xps_wht/(flx_dwn*rfl_wht)
  10. Assume proportionality constant for calibration sheet and plant image are identical, this implies
    • xps_img=flx_dwn*rfl_img*cst_cnv
  11. Derive plant reflectance from exposure
    • rfl_img=xps_img/(flx_dwn*cst_cnv)
  12. (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
  13. (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).
  14. 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)