[GRASS-user] i.atcorr with Sentinel2

Moritz Lennert mlennert at club.worldonline.be
Mon Dec 18 08:06:01 PST 2017


See also discussion here: 
http://forum.step.esa.int/t/the-quantification-value-has-a-true-value-dn-to-toa-reflectance/1220/



On 18/12/17 16:57, Moritz Lennert wrote:
> On 18/12/17 16:35, Stefan Blumentrath wrote:
>> Hi Moritz,
>>
>> Thanks for helping with troubleshooting!
>> QUANTIFICATION_VALUE is 10000, Thus dividing with it gives a maximum value of 2.8...
>> Any idea how to figure out if it is 12 or 16 bit image. It is directly downloaded from ESA...
> 
> Check which proportion of the image is > 1. AFAIR (which is a bit
> limited), you might have reflectances above 1 in saturated pixels. I
> just checked on a random image and I also have some pixels above 1, but
> only 0.25% of the pixels:
> 
> GRASS 7.5.svn (UTM32N):/data/home/mlennert > r.mapcalc "test =
> if(b04_refl>1,1,0)"
>    100%
> GRASS 7.5.svn (UTM32N):/data/home/mlennert > r.stats -cp test
>    100%
> 0 120259106 99.75%
> 1 301294 0.25%
> 
> And all the pixels with value 1 are in clouded areas.
> 
> Moritz
> 
>>
>> Cheers
>> Stefan
>>
>> -----Original Message-----
>> From: grass-user [mailto:grass-user-bounces at lists.osgeo.org] On Behalf Of Moritz Lennert
>> Sent: mandag 18. desember 2017 16.26
>> To: Žofie Cimburová <zoficimburova at gmail.com>
>> Cc: GRASS user list <grass-user at lists.osgeo.org>
>> Subject: Re: [GRASS-user] i.atcorr with Sentinel2
>>
>> On 18/12/17 16:13, Žofie Cimburová wrote:
>>> Dear Moritz,
>>>
>>> According to
>>> https://earth.esa.int/web/sentinel/user-guides/sentinel-2-msi/product-
>>> types , the L1C product I am using already is in top of atmosphere
>>> reflectance, so this should not be the problem (?).
>>> I tried running i.atcorr both with and without the -r flag.
>>
>> Reflectance is the percentage of light that is reflected either from the top of the atmosphere or from the surface. Reflectance values should thus be real values between 0 and 1. Your data have
>>
>> Range of data:    min = 1  max = 28000
>>
>> This means that they are expressed in digital (integer) numbers. Try transforming these DN into real numbers. IIRC, in the metadata, you have a variable QUANTIFICATION_VALUE. Divide your pixel values by that value to get real TOA reflectance values.
>>
>> AFAIK, it also depends on whether you directly imported the original 12-bit file, or possibly a modified, e.g. 16-bit, version.
>>
>> Moritz
>>
>>> On Mon, Dec 18, 2017 at 3:35 PM, Moritz Lennert
>>> <mlennert at club.worldonline.be <mailto:mlennert at club.worldonline.be>> wrote:
>>>
>>>       On 18/12/17 13:14, Žofie Cimburová wrote:
>>>
>>>           Hi all,
>>>           Now the 6S parameters are complete, but the output map contains
>>>           only NULLs, no matter what combinations of input parameters and
>>>           flags I use. Have anyone encountered the same issue? (Info
>>> below.)
>>>
>>>
>>>       In the i.atcorr man page it says:
>>>
>>>       "If flag -r is used, the input raster data are treated as
>>>       reflectance. Otherwise, the input raster data are treated as
>>>       radiance values"
>>>
>>>       IIUC, your data is still in DN. You might want to try to transform
>>>       this into radiance values before sending it into i.atcorr.
>>>
>>>       Moritz
>>>
>>>
>>>           Thanks again.
>>>           Zofie
>>>
>>>           ----------------------------------------
>>>           Version:
>>>           g.version -g
>>>           version=7.4.0RC1
>>>           date=2017
>>>           revision=exported
>>>           build_date=2017-11-18
>>>           build_platform=x86_64-pc-linux-gnu
>>>           build_off_t_size=8
>>>
>>>           ----------------------------------------
>>>           Region:
>>>           g.region -p
>>>           projection: 1 (UTM)
>>>           zone:       33
>>>           datum:      etrs89
>>>           ellipsoid:  grs80
>>>           north:      6653695
>>>           south:      6643685
>>>           west:       256495
>>>           east:       266505
>>>           nsres:      10
>>>           ewres:      10
>>>           rows:       1001
>>>           cols:       1001
>>>           cells:      1002001
>>>
>>>           ----------------------------------------
>>>           Input data: Sentinel2 L1C product B02 (tried with B01 too)
>>>           r.info <http://r.info> <http://r.info>
>>>           map=test_B02 at p_Sentinel4Nature_S2_Oslo
>>>              +----------------------------------------------------------------------------+
>>>              | Map:      test_B02 at p_Sentinel4Nat  Date: Wed Dec  6
>>>           12:06:39 2017
>>>              | Mapset:   p_Sentinel4Nature_S2_Oslo      Login of Creator:
>>>           stefan.blumentr
>>>              | Location: ETRS_33N
>>>              | DataBase: /data/grass
>>>              | Title:
>>>           S2A_OPER_PRD_MSIL1C_PDMC_20160907T044118_R008_V20160905T104022_2
>>>              | Timestamp: none
>>>              |----------------------------------------------------------------------------|
>>>              |
>>>              |   Type of Map:  raster               Number of Categories: 0
>>>              |   Data Type:    CELL
>>>              |   Rows:         1001
>>>              |   Columns:      1001
>>>              |   Total Cells:  1002001
>>>              |        Projection: UTM (zone 33)
>>>              |            N:    6653695    S:    6643685   Res:    10
>>>              |            E:     266505    W:     256495   Res:    10
>>>              |   Range of data:    min = 1  max = 28000
>>>              |
>>>              |   Data Description:
>>>              |    generated by r.in.gdal
>>>              
>>> +---------------------------------------------------------------------
>>> -------+
>>>
>>>           ----------------------------------------
>>>           6s file:
>>>           25- geometrical conditions=Sentinel-2A
>>>           9 5 10.6728 10.73413 59.90647- month day hh.ddd longitude latitude
>>>           4 - atmospheric model=subarctic summer
>>>           3- aerosol model=urban
>>>           50- visibility [km] (aerosol model concentration) (this is
>>>           estimated, I also tried with AOD specified)
>>>           -0.055- mean target elevation above sea level [km]
>>>           -1000- sensor height
>>>           166- Sentinel2A Blue band B2 (440nm - 535nm)
>>>
>>>           ----------------------------------------
>>>           Command:
>>>           i.atcorr input=test_B02 at p_Sentinel4Nature_S2_Oslo range=1,28000
>>>           elevation=dem_10m_25833 at p_Sentinel4Nature_S2_Oslo
>>>           parameters=/home/NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt
>>>           <http://NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt>
>>>           <http://NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt
>>>           <http://NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt>>
>>>           output=test_B02_atcorr
>>>             >Atmospheric correction...
>>>             >Atmospheric correction complete.
>>>
>>>           (I am not sure about the range parameter, tried with 0,255 too.
>>>           The DEM contains no NULLs. Also tried running with -r and -a
>>> flags.)
>>>
>>>           ----------------------------------------
>>>           Output:
>>>           r.info <http://r.info> <http://r.info>
>>>           map=test_B02_atcorr at p_Sentinel4Nature_S2_Oslo
>>>              +----------------------------------------------------------------------------+
>>>              | Map:      test_B02_atcorr at p_Sentinel4N  Date: Mon Dec 18
>>>           13:10:14 2017
>>>              | Mapset:   p_Sentinel4Nature_S2_Oslo      Login of Creator:
>>>           zofie.cimburova
>>>              | Location: ETRS_33N
>>>              | DataBase: /data/grass
>>>              | Title:    test_B02_atcorr2
>>>              | Timestamp: none
>>>              |----------------------------------------------------------------------------|
>>>              |
>>>              |   Type of Map:  raster               Number of Categories: 0
>>>              |   Data Type:    FCELL
>>>              |   Rows:         1001
>>>              |   Columns:      1001
>>>              |   Total Cells:  1002001
>>>              |        Projection: UTM (zone 33)
>>>              |            N:    6653695    S:    6643685   Res:    10
>>>              |            E:     266505    W:     256495   Res:    10
>>>              |   Range of data:    min = -nan  max = -nan
>>>              |
>>>              |   Data Description:
>>>              |    generated by i.atcorr
>>>              |
>>>              |   Comments:
>>>              |    i.atcorr input="test_B02 at p_Sentinel4Nature_S2_Oslo"
>>>           range=1,28\
>>>              |    000 elevation="dem_10m_25833 at p_Sentinel4Nature_S2_Oslo"
>>>           para\
>>>              |
>>>           meters="/home/NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt <http://NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt>
>>>           <http://NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt
>>>           <http://NINA.NO/zofie.cimburova/Sentinel4Nature/DATA/6s.txt>>" o\
>>>              |    utput="test_B02_atcorr2" rescale=0,255
>>>              |
>>>              
>>> +---------------------------------------------------------------------
>>> -------+
>>>
>>>
>>>
>>>           On Fri, Dec 15, 2017 at 5:12 PM, Žofie Cimburová
>>>           <zoficimburova at gmail.com <mailto:zoficimburova at gmail.com>
>>>           <mailto:zoficimburova at gmail.com
>>>           <mailto:zoficimburova at gmail.com>>> wrote:
>>>
>>>                Dear Markus,
>>>                thanks for your reply, this is exactly what I need to know!
>>>
>>>                Best, Zofie
>>>
>>>                On Fri, Dec 15, 2017 at 5:09 PM, Markus Neteler
>>>           <neteler at osgeo.org <mailto:neteler at osgeo.org>
>>>                <mailto:neteler at osgeo.org <mailto:neteler at osgeo.org>>> wrote:
>>>
>>>
>>>                    On Dec 15, 2017 3:54 PM, "Žofie Cimburová"
>>>                    <zoficimburova at gmail.com
>>>           <mailto:zoficimburova at gmail.com> <mailto:zoficimburova at gmail.com
>>>           <mailto:zoficimburova at gmail.com>>> wrote:
>>>                    >
>>>                    > Dear all,
>>>                    > I am trying to use i.atcorr (GRASS 7.4) to apply
>>>           atmospheric corrections for Sentinel 2 data. The documentation
>>>           provides a great help, but there are two points I am not sure
>>>           about -         >
>>>                    > - I don't need the atmospheric correction to be
>>>           applied to the whole scene, so I only imported a small clip of
>>>           the scene to GRASS. What longitude and latitude shall I then
>>>           specify in the 6S parameters?
>>>
>>>                    I'd use the center coordinates of the clipped area.
>>>
>>>                    > Or is it necessary to apply the corrections to the
>>>           entire scene?
>>>
>>>                    No since it is a pixel based algorithm.
>>>
>>>                    > - How can I estimate the value of visibility (aerosol
>>>           model concentration)?
>>>                    There are AERONET data online somewhere which might be
>>>           the best
>>>                    choice.
>>>
>>>                    Markus
>>>
>>>
>>>
>>>
>>>
>>>           _______________________________________________
>>>           grass-user mailing list
>>>           grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>
>>>           https://lists.osgeo.org/mailman/listinfo/grass-user
>>>           <https://lists.osgeo.org/mailman/listinfo/grass-user>
>>>
>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> grass-user mailing list
>> grass-user at lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/grass-user
>>
> 
> 
> _______________________________________________
> grass-user mailing list
> grass-user at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/grass-user
> 




More information about the grass-user mailing list