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.
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)
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:**
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:
xps_wht=flx_dwn*rfl_wht*cst_cnv
cst_cnv=xps_wht/(flx_dwn*rfl_wht)
xps_img=flx_dwn*rfl_img*cst_cnv
rfl_img=xps_img/(flx_dwn*cst_cnv)
flx_upw=flx_dwn*rfl_img
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:
Notes