[GIS] Remote sensing reflectance from Sentinel 2 in SNAP, ArcGIS or QGIS

arcgis-desktopqgissentinel-2sentinel-snap

I want to calculate "remote sensing reflectance" from Sentinel 2 image, which is derived from "water leaving radiance reflectance" of a water surface, to extract information of Total Suspended Matter and CDOM in a water body.

From my understanding, I need to perform an atmospheric correction which provides the water leaving radiance reflectance.

Anyone knows how to do this in SNAP, ArcGIS or QGIS?

Best Answer

The scenes are distributed by DC or Digital count. You need to use Quantification value to obtain reflectance.

As @gmorin mentioned, scenes are already in TOA reflectance, but distributed in DC. To calculate reflectance you need to use:

Reflectance (float) = DC ( 16-bit integer) / (QUANTIFICATION_VALUE)

The value of Quantification value is defined in .xml metadata file:

(line 58 of MTD_MSIL1C.xml)

<QUANTIFICATION_VALUE unit="none">10000</L1C_TOA_QUANTIFICATION_VALUE>

If you use Sen2Cor (L2A_Process) you'll obtain also DC in BOA (Bottom Of Atmosphere) reflectance. So you need to use Quantification value also. To obtain reflectance band by band (you can also stack them and apply this once or use arcpy, pyQGIS or R to do it):


Snap

Right-click in the desired band, go to Band Maths:

enter image description here

Enter the expression: B[1-12]/10000 (depends on the band selected)

enter image description here


ArcGIS

Use Raster Calculator (Spatial Analyst extension needed) with the expression Float("band_name")/10000:

enter image description here


 QGIS

Use Raster calculator with the expression "band_name@1"/10000:

enter image description here


BOA (Bottom Of Atmosphere) reflectance

  1. Download Sen2Cor from ESA
  2. Install it in you machine
  3. You can use SNAP as a GUI to make correction. You can also use cmd in Windows or Terminal in OS X/Linux.

For cmd/terminal window

Open cmd/terminal window and just execute the following code:

L2A_Process /path/to/S2A_OPER_*_MSIL1C*.SAFE resolution = 10

The output will be a S2A_USER_*_MSIL2A*.SAFE folder with the same structure than L1C, but in BOA reflectance.

You can set resolution = 20 or resolution = 60. To change other parameters go to sen2cor/cfg/L2A_GIPP.xml, like to change target directory, DEM (doesn't apply in your case) or look-up tables configuration.

You can also do this process into various folders by cmd/terminal windows. In cmd (windows) case, use a loop:

for /d %x in ('/path/to/S2A_OPER_*_MSIL1C*.SAFE') do L2A_Process %x --resolution = 10

Finally, if you have downloaded a scene with a lot of granules and you want to use only one or a few of them, just delete the others granules from S2A_OPER_*_MSIL1C*.SAFE/GRANULE/ folder and apply L2A_Process.

Important

The output will be in Digital Count, so you need to do the above process to extract the real value of reflectance


Water leaving reflectances

With L1C scene, just simply use C2RCC S2-MSI Processor in SNAP. Go to Optical/Thematic Water Processing/C2R Processors/S2-MSI, set it and run it:

enter image description here

Related Question