[GRASS-user] Low reflectance values with i.atcorr and Landsat 8

Hi Micha,

did you refer to the input range?
I did so and checked bands 1-9 with r.info -r. Top of atmosphere reflectance values are all in the range of -0.01 - 2.12. The negative value seems to be a outlier and I check in addition with the range 0-2.12.
I used these values for the input range in i.atcorr -r and used 0,1 as output range.
However I get even smaller reflectance values (0.15 respectively 0.29 for vegetation in band5)

Regards, Lisa.

Yes, the input range. I meant in the first i.landsat.toar step. The input (DN) values should be up to 700 or so. Landsat 8, with its 12 bit data can have max DN values of 4096. But I didn’t use that full range, rather the actual DN range of the original images.

···

On 6/15/2015 3:25 PM, John, Lisa wrote:

Hi Micha,

did you refer to the input range?

I did so and checked bands 1-9 with r.info -r. Top of atmosphere reflectance values are all in the range of -0.01 - 2.12. The negative value seems to be a outlier and I check in addition with the range 0-2.12.
I used these values for the input range in i.atcorr -r and used 0,1 as output range.

However I get even smaller reflectance values (0.15 respectively 0.29 for vegetation in band5)

Regards, Lisa.

This mail was received via Mail-SeCure System.

_______________________________________________
grass-user mailing list
[grass-user@lists.osgeo.org](mailto:grass-user@lists.osgeo.org)
[http://lists.osgeo.org/mailman/listinfo/grass-user](http://lists.osgeo.org/mailman/listinfo/grass-user)
This mail was received via Mail-SeCure System.

Something is fishy here, reflectance values should always be within 0-1 range.

Please manually remove all values outside of that range (use r.mapcalc) and make a histogram of your TOAR band. if the histogram is of expected shape, and is not truncated at 1.0 threshold then you are OK. if there is a problem here, that means the TOAR processing had an issue. Stretching output from an unknown histogram skewness could be giving you funny results.

On Mon, Jun 15, 2015 at 6:47 PM Micha Silver <micha@arava.co.il> wrote:

On 6/15/2015 3:25 PM, John, Lisa wrote:

Hi Micha,

did you refer to the input range?

Yes, the input range.

I did so and checked bands 1-9 with r.info -r. Top of atmosphere reflectance values are all in the range of -0.01 - 2.12. The negative value seems to be a outlier and I check in addition with the range 0-2.12.
I used these values for the input range in i.atcorr -r and used 0,1 as output range.

I meant in the first i.landsat.toar step. The input (DN) values should be up to 700 or so. Landsat 8, with its 12 bit data can have max DN values of 4096. But I didn’t use that full range, rather the actual DN range of the original images.

However I get even smaller reflectance values (0.15 respectively 0.29 for vegetation in band5)

Regards, Lisa.

This mail was received via Mail-SeCure System.


_______________________________________________
grass-user mailing list
[grass-user@lists.osgeo.org](mailto:grass-user@lists.osgeo.org)
[http://lists.osgeo.org/mailman/listinfo/grass-user](http://lists.osgeo.org/mailman/listinfo/grass-user)
This mail was received via Mail-SeCure System.


grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

Hello,
just a note to this discussion. I never understood the input/output stretching parameters of i.atcor, so I have no advice here, just couple of thoughts.
I especially don't see why these scale parameters seem to be always used in any tutorial, either always set to 0,1 both, or worse, to actual range of input for the input scaling parameter. I would understand their use, if the input TOA reflectance was in percent or in reflectance multiplied by 10000, or quantized as DN values are - then such input stretching min,max could be used to correct for this (not based on actual values in the image, but on its metadata, though). Similarly, if we needed output in percent reflectance or reflectance muptiplied by 10000, then the output streching could be used.
But if the input is in values of TOA reflectance already and we need output in values of ground reflectance, there should be no stretching involved at all, not even stretching to 0,1. And not even if there are pixels in the scene having TOA reflectace over 1, and not again if there are no pixels having reflectance over 0.5. Because both is possible - although reflectance over 1 is of course not possible by definition, it can be measured for surfaces not meeting measurement assumptions.
A scene band can contain pixels with TOA reflectance seemingly over 1 very easily, nothing fishy about that. Because keep in mind, we are speaking about *spectral directional reflectance* and it is measured with assumption of lambertian surfaces. Reflectance value of 1 should be value of pixel of absolutely white object with *lambertian surface*. But there can be an object with a mirror-like surface, like water or metal roof and if such object is reflecting light toward the sensor (glint), it can easily reach radiance values equivalent to lambertian surface reflectance well above 1. And of course there can be invalid pixels, like dead pixels in CCD cameras. So the algorithm (or the user) should not try to scale the whole input or output reflectance, regardless of if these pixels were removed from the scene or not. If unscaled TOA reflectance, even containing reflectances over 1 at places should be fed to the ATCOR algorithm unscaled, the result should be ground reflectance unscaled.
And of course, it is normal, that the result may again contain reflectances above 1 - it could be the pixels mentioned before, but also for example clouds - because the reflectance is true only for surfaces on the ground. Highly reflective surfaces high above ground can again reach radiance values higher than what absolutely white object on ground could have, because to the cloud in 10 km altitude there comes much more light than to the surface below filtered by the thick atmosphere down there, and we are not correcting for this, as we do for high mountains with DMT, do we?

Regards,
Tomas Brunclik

Yann Chemin napsal(a):

Something is fishy here, reflectance values should always be within 0-1 range.

Please manually remove all values outside of that range (use r.mapcalc) and make a histogram of your TOAR band. if the histogram is of expected shape, and is not truncated at 1.0 threshold then you are OK. if there is a problem here, that means the TOAR processing had an issue. Stretching output from an unknown histogram skewness could be giving you funny results.

On Mon, Jun 15, 2015 at 6:47 PM Micha Silver <micha@arava.co.il <mailto:micha@arava.co.il>> wrote:

    On 6/15/2015 3:25 PM, John, Lisa wrote:

    Hi Micha,

    did you refer to the input range?

    Yes, the input range.

    I did so and checked bands 1-9 with r.info <http://r.info> -r.
    Top of atmosphere reflectance values are all in the range of
    -0.01 - 2.12. The negative value seems to be a outlier and I
    check in addition with the range 0-2.12.
    I used these values for the input range in i.atcorr -r and used
    0,1 as output range.

    I meant in the first i.landsat.toar step. The input (DN) values
    should be up to 700 or so. Landsat 8, with its 12 bit data can
    have max DN values of 4096. But I didn't use that full range,
    rather the actual DN range of the original images.

    However I get even smaller reflectance values (0.15 respectively
    0.29 for vegetation in band5)

    Regards, Lisa.

    This mail was received via Mail-SeCure System.

    _______________________________________________
    grass-user mailing list
    grass-user@lists.osgeo.org <mailto:grass-user@lists.osgeo.org>
    http://lists.osgeo.org/mailman/listinfo/grass-user
    This mail was received via Mail-SeCure System.

    _______________________________________________
    grass-user mailing list
    grass-user@lists.osgeo.org <mailto:grass-user@lists.osgeo.org>
    http://lists.osgeo.org/mailman/listinfo/grass-user

_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

in old times, 8-bit was the best for storage/resolution (still there somehow…) but also for processing. rescaling IMHO is a legacy mostly of that time. Someone should look into i.atcorr with a specific target at modernizing this bit.

On Fri, Jun 19, 2015 at 3:20 PM Tomáš Brunclík <brunclik@atlas.cz> wrote:

Hello,
just a note to this discussion. I never understood the input/output
stretching parameters of i.atcor, so I have no advice here, just couple
of thoughts.
I especially don’t see why these scale parameters seem to be always used
in any tutorial, either always set to 0,1 both, or worse, to actual
range of input for the input scaling parameter. I would understand their
use, if the input TOA reflectance was in percent or in reflectance
multiplied by 10000, or quantized as DN values are - then such input
stretching min,max could be used to correct for this (not based on
actual values in the image, but on its metadata, though). Similarly, if
we needed output in percent reflectance or reflectance muptiplied by
10000, then the output streching could be used.
But if the input is in values of TOA reflectance already and we need
output in values of ground reflectance, there should be no stretching
involved at all, not even stretching to 0,1. And not even if there are
pixels in the scene having TOA reflectace over 1, and not again if there
are no pixels having reflectance over 0.5. Because both is possible -
although reflectance over 1 is of course not possible by definition, it
can be measured for surfaces not meeting measurement assumptions.
A scene band can contain pixels with TOA reflectance seemingly over 1
very easily, nothing fishy about that. Because keep in mind, we are
speaking about spectral directional reflectance and it is measured
with assumption of lambertian surfaces. Reflectance value of 1 should be
value of pixel of absolutely white object with lambertian surface. But
there can be an object with a mirror-like surface, like water or metal
roof and if such object is reflecting light toward the sensor (glint),
it can easily reach radiance values equivalent to lambertian surface
reflectance well above 1. And of course there can be invalid pixels,
like dead pixels in CCD cameras. So the algorithm (or the user) should
not try to scale the whole input or output reflectance, regardless of if
these pixels were removed from the scene or not. If unscaled TOA
reflectance, even containing reflectances over 1 at places should be fed
to the ATCOR algorithm unscaled, the result should be ground reflectance
unscaled.
And of course, it is normal, that the result may again contain
reflectances above 1 - it could be the pixels mentioned before, but also
for example clouds - because the reflectance is true only for surfaces
on the ground. Highly reflective surfaces high above ground can again
reach radiance values higher than what absolutely white object on ground
could have, because to the cloud in 10 km altitude there comes much more
light than to the surface below filtered by the thick atmosphere down
there, and we are not correcting for this, as we do for high mountains
with DMT, do we?

Regards,
Tomas Brunclik

Yann Chemin napsal(a):

Something is fishy here, reflectance values should always be within
0-1 range.

Please manually remove all values outside of that range (use
r.mapcalc) and make a histogram of your TOAR band. if the histogram is
of expected shape, and is not truncated at 1.0 threshold then you are
OK. if there is a problem here, that means the TOAR processing had an
issue. Stretching output from an unknown histogram skewness could be
giving you funny results.

On Mon, Jun 15, 2015 at 6:47 PM Micha Silver <micha@arava.co.il
mailto:[micha@arava.co.il](mailto:micha@arava.co.il)> wrote:

On 6/15/2015 3:25 PM, John, Lisa wrote:

Hi Micha,

did you refer to the input range?
Yes, the input range.

I did so and checked bands 1-9 with r.info <http://r.info> -r.
Top of atmosphere reflectance values are all in the range of
-0.01 - 2.12. The negative value seems to be a outlier and I
check in addition with the range 0-2.12.
I used these values for the input range in i.atcorr -r and used
0,1 as output range.
I meant in the first i.landsat.toar step. The input (DN) values
should be up to 700 or so. Landsat 8, with its 12 bit data can
have max DN values of 4096. But I didn’t use that full range,
rather the actual DN range of the original images.

However I get even smaller reflectance values (0.15 respectively
0.29 for vegetation in band5)

Regards, Lisa.

This mail was received via Mail-SeCure System.


grass-user mailing list
grass-user@lists.osgeo.org mailto:[grass-user@lists.osgeo.org](mailto:grass-user@lists.osgeo.org)
http://lists.osgeo.org/mailman/listinfo/grass-user
This mail was received via Mail-SeCure System.


grass-user mailing list
grass-user@lists.osgeo.org mailto:[grass-user@lists.osgeo.org](mailto:grass-user@lists.osgeo.org)
http://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user


grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user