Minimal Atmospheric Compensation for Hyperspectral Images:
Strictly speaking, only Numpy is required, but the demo relies on the HYPSO package.
The atmospheric correction is written at R_surface = (R_ToA - S) / T, where S is the amount of sunlight scattered off the atmospher back to the satellite (as a fraction of solar irradiance) and T is the proportion of light transmitted through the atmosphere.
The variable S is initialized with the dark pixel subtraction technique, and T is initiallized as 1-S_0. This initialization is expected to be updated in a future version.
The the MACHI algorithm alternately updates estimates of the transmission and scattering in order to minimize the derivative of the spectra with respect to wavelength, averaged over the whole image. This objective function roughly corresponds to the notion that the reflectance spectra of most materials are relatively smooth, while the gaseous transmission spectra through the atmosphere are not.
Beware of trusting MACHI too much:
- Minimal in situ validation (we're working on this!)
- Simplistic light propagation model
- Needs "expected minimum reflectance" input (default 1%)
- Can't (yet) handle AC varying across image, alhtough it does vary (aerosols, sun glint, water vapor)
- Problems with nearly complete absorption within a band
- No sun glint correction at all
- Poor estimation of Rayleigh and aerosol scattering, because they are spectrally smooth
If you find this useful, please let us know and we'll share a draft of our upcoming paper. If you are interested in assisting with in situ validation, we'd be happy for you to join us.