On 24 September 2020 at 15:59:55, Matthew McCarthy (mj...@mail.usf.edu) wrote:
Hello Robert and all,I would like to implement Py6S for automated atmospheric correction of high-resolution satellite imagery, and want to clarify a few things before scaling up.1. When applying the xa, xb, xc coefficients to convert from TOA radiance to surface reflectance, are these accounting for Earth-Sun distance, irradiance, and cos(theta)? Theta being the solar zenith angle.
Yes they should take into account all of those.
2. Because I want to generate these coefficients and correct every pixel in an image, should I use 0 (zero) for my radiance input to AtmosCorrLambertianFromRadiance(radiance)? I am creating the coefficients for each of the multispectral channels individually.
It won't matter what you put in as the radiance input - the xa, xb and xc coefficients will be the same regardless what you enter, as they aren't based on the input radiance at all.
3. Is there any validation I can cite to indicate that the coefficient method is similarly robust as the LUT approach with Py6S?
I'm not aware of any good references on this. It will be more accurate to do a full LUT-based approach, as that can take into account the variation in various parameters across the image - for example, view angle, AOT changes and so on.
4. I noticed that changing the aerosol model (e.g. AeroProfile.Continental vs Maritime) and Lambertian vs BRDF functions does not change the coefficients - is that correct?
A change to the aerosol model should change the coefficients - I've tested this on my machine and I get different numbers when switching from Maritime to Continental. Can you send the code you're using, in case there are any errors in how you're setting the aerosol profile?
The coefficients don't take into account any angular settings for BRDF (eg. angular variation in reflectance), so there will be no difference using Lambertian vs BRDF functions.
5. Is there a way to account for off-nadir viewing angles in the atmospheric correction scheme?
Only by creating a lookup-table for viewing angles. The simple way to do this would be to create a lookup table that 'looked-up' the values of xa, xb and xc, so that you basically had a list of 10 viewing angles and then for each of them you had an xa, xb and xc value. Then, to look up the coefficients for a given view angle you interpolate within that table to get an estimate of the xa, xb and xc values (or, just find the nearest one, if you're not so concerned about absolutely accuracy). This would be fairly easy to implement using a for loop and some arrays/lists.
Hope that helps,
Robin
Thanks,Matt McCarthyRemote Sensing GroupOak Ridge National Lab
--
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 view this discussion on the web, visit https://groups.google.com/d/msgid/py6s/1e5b8459-656e-4839-85b7-dd7829bffbb9n%40googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/py6s/c52048cc-d97e-4647-906e-41074b29d9f3n%40googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/py6s/675ecfae-fd6c-44d7-af08-2b485f92b771n%40googlegroups.com.