-
Notifications
You must be signed in to change notification settings - Fork 13
Description
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:**
uint16 xps_img(wavelength,y,x) [xps] =
Exposure from experiment image (i.e., plants) (known, VNIR, SWIR sensors)uint16 xps_wht(wavelength,x) [xps] =
Exposure from white reference sheet/panel (measured by VNIR, SWIR sampling period? location?)float32 rfl_wht(wavelength) [fraction] =
Reflectance of white reference (factory calibration) (assume time-constant?)float32 flx_dwn(wavelength) [W m-2 um-1] =
Downwelling spectral irradiance (measured by environmental sensor. units?)
Intermediate derived quantities:
float32 cst_cnv(wavelength) [xps/(W m-2 um-1)] =
Proportionality constant between reflected spectral flux and Exposure (derived)float32 flx_upw(wavelength) [W m-2 um-1] =
Upwelling spectral flux (derived. and possibly measured for closure?)
Outputs
float32 rfl_img(wavelength,y,x) [fraction] =
Reflectance of image (i.e., plants)
Proposed Algorithm to retrieve reflectance from measurements:
- Assume image exposure linear with incident spectral flux, this implies
xps_wht=flx_dwn*rfl_wht*cst_cnv
- Derive proportionality constant from calibration:
cst_cnv=xps_wht/(flx_dwn*rfl_wht)
- Assume proportionality constant for calibration sheet and plant image are identical, this implies
xps_img=flx_dwn*rfl_img*cst_cnv
- Derive plant reflectance from exposure
rfl_img=xps_img/(flx_dwn*cst_cnv)
- (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
- (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).
- 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:
- BRDF (angular reflectance properties) of plant/leaves
- 3D orientation of reflective surfaces (plant/leaves)
- BRDF (angular reflectance) of calibration sheet
- 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)