6S Outputs Question

250 views
Skip to first unread message

Craig Stutts

unread,
Apr 17, 2018, 12:02:44 PM4/17/18
to Py6S
I'm trying to follow the Orfeo Toolbox Top-of-atmosphere Reflectance to Surface Reflectance workflow. Their equations (12.10, 12.11) for calculating the ground reflectance list the upward and downward transmittance. I'm trying to map these values to what Py6S outputs, but I'm not sure I'm grabbing the correct outputs. Below is what I have. Am I correct? Note: OTB's spherical albedo should be Sx (typo on their part).

OTB Documentation

            #Run the Atmosphere
            sixS.run()
            #Get Atmospheric output
            Sx = sixS.outputs.spherical_albedo
            rho_atmos = sixS.outputs.atmospheric_intrinsic_reflectance
            tGas = sixS.outputs.total_gaseous_transmittance
            #TODO Check to see if these are the correct Tup and Tdown Values I need
            Tup = sixS.outputs.transmittance_global_gas.upward
            Tdown = sixS.outputs.transmittance_global_gas.downward

            #TOA Reflectance to Surface Reflectance Calculation
            A = np.divide(dataOut - rho_atmos,Tup * Tdown * tGas)
            dataOut = np.divide(A,1 + Sx * A)

Thanks,
Craig

Robin Wilson

unread,
Apr 17, 2018, 2:34:16 PM4/17/18
to py...@googlegroups.com
Hi,

From my reading of the OTB docs, the Tup and Tdown values need to be total transmittance. The value you're extracting at the moment is just the transmittance due to gases in the atmosphere: it ignores scattering. Unfortunately Py6S doesn't provide a direct output of total transmittance (the underlying 6S model doesn't provide it), but it is fairly easy to calculate. Transmittance is just the fraction of light that is left after passing through the atmosphere, so you can combine transmittances by multiplication, thus you should be able to calculate Tup and Tdown as:

Tup = sixS.outputs.transmittance_global_gas.upward * sixS.outputs.transmittance_total_scattering.upward
Tdown = sixS.outputs.transmittance_global_gas.downward * sixS.outputs.transmittance_total_scattering.downward

I'm intrigued as to why you are trying to run through the OTB procedure using Py6S? From my reading of the OTB documentation, this is already implemented in OTB, using their own interface to the 6S model. Also, if you're trying to do atmospheric correction using Py6S then there is built-in functionality in Py6S to generate atmospheric correction coefficients (see http://py6s.readthedocs.io/en/latest/params.html#Py6S.AtmosCorr, and the s.outputs.xa, s.outputs.xb and s.outputs.xc outputs). Furthermore, if you're wanting to do full atmospheric correction of a satellite image then I'd recommend using something like ARCSI (https://www.arcsi.remotesensing.info/) - which uses Py6S internally, but applies it to images in a nice easy, efficient way.

Cheers,

Robin
--
You received this message because you are subscribed to the Google Groups "Py6S" group.
To unsubscribe from this group and stop receiving emails from it, send an email to py6s+uns...@googlegroups.com.
To post to this group, send email to py...@googlegroups.com.
Visit this group at https://groups.google.com/group/py6s.
Reply all
Reply to author
Forward
0 new messages