i.atcorr(1grass)
hey bestie ๐ welcome to the i.atcorr(1grass) page from the GRASS User's Manual. it's giving atmospheric correction realness, and we're gonna read it together like the iconic manual it is. no cap. โจ
โจ NAME โจ
i.atcorr โ Performs atmospheric correction using the 6S algorithm. 6S - Second Simulation of Satellite Signal in the Solar Spectrum.
โจ KEYWORDS โจ
imagery, atmospheric correction, radiometric conversion, radiance, reflectance, satellite
โจ SYNOPSIS โจ
i.atcorr
i.atcorr --help
i.atcorr [-irab] input=name [range=min,max] [elevation=name]
[visibility=name] parameters=name output=name [rescale=min,max]
[--overwrite] [--help] [--verbose] [--quiet] [--ui]
Flags
-iโ Output raster map as integer-rโ Input raster map converted to reflectance (default is radiance)-aโ Input from ETM+ image taken after July 1, 2000-bโ Input from ETM+ image taken before July 1, 2000--overwriteโ Allow output files to overwrite existing files--helpโ Print usage summary--verboseโ Verbose module output--quietโ Quiet module output--uiโ Force launching GUI dialog
Parameters
input=name[required] โ Name of input raster maprange=min,maxโ Input range. Default:0,255elevation=nameโ Name of input elevation raster map (in m)visibility=nameโ Name of input visibility raster map (in km)parameters=name[required] โ Name of input text file with 6S parametersoutput=name[required] โ Name for output raster maprescale=min,maxโ Rescale output raster map. Default:0,255
โจ DESCRIPTION โจ
okay so i.atcorr does atmospheric correction on your input raster map using the 6S algorithm (Second Simulation of Satellite Signal in the Solar Spectrum). a detailed algorithm description is available at the Land Surface Reflectance Science Computing Facility website. ๐
Important: Current region settings are ignored! The region is adjusted to cover the input raster map before the atmospheric correction is performed. The previous settings are restored afterwards.
If the -r flag is used, the input raster map is treated as reflectance. Otherwise, the input raster map is treated as radiance values and it is converted to reflectance at the i.atcorr runtime. The output data are always reflectance.
The satellite overpass time has to be specified in Greenwich Mean Time (GMT).
An example of the 6S parameters could be:
8 - geometrical conditions=Landsat ETM+
2 19 13.00 -47.410 -20.234 - month day hh.ddd longitude latitude ("hh.ddd" is in decimal hours GMT)
1 - atmospheric model=tropical
1 - aerosols model=continental
15 - visibility [km] (aerosol model concentration)
-0.600 - mean target elevation above sea level [km] (here 600 m asl)
-1000 - sensor height (here, sensor on board a satellite)
64 - 4th band of ETM+ Landsat 7
If the position is not available in longitude-latitude (WGS84), the m.proj conversion module can be used to reproject from a different reference system.
โจ 6S CODE PARAMETER CHOICES โจ
the original has a big table with columns Code, Description, Details. we're turning it into a list, but every cell is here, exactly. no skips, no cuts. periodt. ๐
A. Geometrical conditions
pick your fighter from this absolute roster of geometrical condition codes. ๐
1โ meteosat observation โenter month,day,decimal hour (universal time-hh.ddd) n. of column,n. of line. (full scale 5000*2500)2โ goes east observation โenter month,day,decimal hour (universal time-hh.ddd) n. of column,n. of line. (full scale 17000*12000)c3โ goes west observation โenter month,day,decimal hour (universal time-hh.ddd) n. of column,n. of line. (full scale 17000*12000)4โ avhrr (PM noaa) โenter month,day,decimal hour (universal time-hh.ddd) n. of column(1-2048),xlonan,hna give long.(xlonan) and overpass hour (hna) at the ascendant node at equator5โ avhrr (AM noaa) โenter month,day,decimal hour (universal time-hh.ddd) n. of column(1-2048),xlonan,hna give long.(xlonan) and overpass hour (hna) at the ascendant node at equator6โ hrv (spot) โenter month,day,hh.ddd,long.,lat. *7โ tm (landsat) โenter month,day,hh.ddd,long.,lat. *8โ etm+ (landsat7) โenter month,day,hh.ddd,long.,lat. *9โ liss (IRS 1C) โenter month,day,hh.ddd,long.,lat. *10โ aster โenter month,day,hh.ddd,long.,lat. *11โ avnir โenter month,day,hh.ddd,long.,lat. *12โ ikonos โenter month,day,hh.ddd,long.,lat. *13โ RapidEye โenter month,day,hh.ddd,long.,lat. *14โ VGT1 (SPOT4) โenter month,day,hh.ddd,long.,lat. *15โ VGT2 (SPOT5) โenter month,day,hh.ddd,long.,lat. *16โ WorldView 2 โenter month,day,hh.ddd,long.,lat. *17โ QuickBird โenter month,day,hh.ddd,long.,lat. *18โ LandSat 8 โenter month,day,hh.ddd,long.,lat. *19โ Geoeye 1 โenter month,day,hh.ddd,long.,lat. *20โ Spot6 โenter month,day,hh.ddd,long.,lat. *21โ Spot7 โenter month,day,hh.ddd,long.,lat. *22โ Pleiades1A โenter month,day,hh.ddd,long.,lat. *23โ Pleiades1B โenter month,day,hh.ddd,long.,lat. *24โ Worldview3 โenter month,day,hh.ddd,long.,lat. *25โ Sentinel-2A โenter month,day,hh.ddd,long.,lat. *26โ Sentinel-2B โenter month,day,hh.ddd,long.,lat. *27โ PlanetScope 0c 0d โenter month,day,hh.ddd,long.,lat. *28โ PlanetScope 0e โenter month,day,hh.ddd,long.,lat. *29โ PlanetScope 0f 10 โenter month,day,hh.ddd,long.,lat. *30โ Worldview4 โenter month,day,hh.ddd,long.,lat. *31โ AVIRIS โenter month,day,hh.ddd,long.,lat. *32โ Hyperion VNIR โenter month,day,hh.ddd,long.,lat. *33โ Hyperion SWIR โenter month,day,hh.ddd,long.,lat. *
NOTE: for HRV, TM, ETM+, LISS and ASTER experiments, longitude and latitude are the coordinates of the scene center. Latitude must be > 0 for northern hemisphere and < 0 for southern. Longitude must be > 0 for eastern hemisphere and < 0 for western.
B. Atmospheric model
0โ no gaseous absorption1โ tropical2โ midlatitude summer3โ midlatitude winter4โ subarctic summer5โ subarctic winter6โ us standard 627โ okay bestie, define your own atmospheric model as a set of the following 5 parameters per each measurement:altitude [km] pressure [mb] temperature [k] h2o density [g/m3] o3 density [g/m3]. For example: there is one radiosonde measurement for each altitude of0-25kmat a step of1km, one measurement for each altitude of25-50kmat a step of5km, and two single measurements for altitudes70kmand100km. This makes34measurements. In that case, there are34*5values to input.8โ define your own atmospheric model providing values of the water vapor and ozone content:uw [g/cm2] uo3 [cm-atm]. The profile is taken fromus62.
๐ C. Aerosols model ๐
0โ no aerosols1โ continental model2โ maritime model3โ urban model4โ shettle model for background desert aerosol5โ biomass burning6โ stratospheric model7โ define your own model- Enter the volumic percentage of each component:
c(1) = volumic % of dust-like c(2) = volumic % of water-soluble c(3) = volumic % of oceanic c(4) = volumic % of soot. All values should be between0and1.
- Enter the volumic percentage of each component:
8โ define your own model. Size distribution function: Multimodal Log Normal (up to 4 modes).9โ define your own model. Size distribution function: Modified gamma.10โ define your own model. Size distribution function: Junge Power-Law.11โ define your own model. Sun-photometer measurements,50values max, entered as:randd V / d (logr)whereris the radius[micron],Vis the volume,d V / d (logr)[cm3/cm2/micron]. Followed by:nrandnifor each wavelength wherenrandniare respectively the real and imaginary part of the refractive index.
๐ D. Aerosol concentration model (visibility) ๐
If you have an estimate of the meteorological parameter visibility v, enter directly the value of v [km] (the aerosol optical depth (AOD) will be computed from a standard aerosol profile).
If you have an estimate of aerosol optical depth, enter 0 for the visibility and in a following line enter the aerosol optical depth at 550nm (iaer means โiโ for input and โaerโ for aerosol), for example:
0 - visibility
0.112 - aerosol optical depth at 550 nm
NOTE: ifiaeris0, enter-1for visibility.
NOTE: if a visibility map is provided, these parameters are ignored.
๐ฆ E. Target altitude (xps), sensor platform (xpp) ๐ฆ
Target altitude (xps, in negative [km]): xps >= 0 means the target is at the sea level. otherwise xps expresses the altitude of the target (e.g., mean elevation) in [km], given as negative value
Sensor platform (xpp, in negative [km] or -1000):
xpp = -1000means that the sensor is on board a satellite.xpp = 0means that the sensor is at the ground level.-100 < xpp < 0defines the altitude of the sensor expressed in[km]; this altitude is given relative to the target altitude as negative value.
For aircraft simulations only (xpp is neither equal to 0 nor equal to -1000): puw (water vapor content between the aircraft and the surface) po3 (ozone content between the aircraft and the surface) taerp (the aerosol optical thickness at 550nm between the aircraft and the surface)
If these data are not available, enter negative values for all of them. puw,po3 will then be interpolated from the us62 standard profile according to the values at the ground level; taerp will be computed according to a 2 km exponential profile for aerosol.
๐ F. Sensor band ๐
There are two possibilities: either define your own spectral conditions (codes -2, -1, 0, or 1) or choose a code indicating the band of one of the pre-defined satellites.
โจ Define your own spectral conditions โจ
Note that "wlinf" and "wlsup" refer to the limits of the wavelength range defined by the user for a given simulation. Specifically:
wlinf: This represents the lower wavelength limit (or minimum wavelength) of the spectral band for which the simulation is being performed.wlsup: This represents the upper wavelength limit (or maximum wavelength) of the spectral band for the simulation.-2โ Enterwlinf,wlsup. The filter function will be equal to1over the whole band (asiwave=0) but step by step output will be printed.-1โ Enterwl(monochr. cond, gaseous absorption is included).0โ Enterwlinf,wlsup. The filter function will be equal to1over the whole band.1โ Enterwlinf,wlsupand userโs filter functions (lambda)by step of0.0025 micrometer.
๐ฐ๏ธ Pre-defined satellite bands ๐ฐ๏ธ
2โ meteosat vis band (0.350-1.110)3โ goes east band vis (0.490-0.900)4โ goes west band vis (0.490-0.900)5โ avhrr (noaa6) band 1 (0.550-0.750)6โ avhrr (noaa6) band 2 (0.690-1.120)7โ avhrr (noaa7) band 1 (0.500-0.800)8โ avhrr (noaa7) band 2 (0.640-1.170)9โ avhrr (noaa8) band 1 (0.540-1.010)10โ avhrr (noaa8) band 2 (0.680-1.120)11โ avhrr (noaa9) band 1 (0.530-0.810)12โ avhrr (noaa9) band 1 (0.680-1.170)13โ avhrr (noaa10) band 1 (0.530-0.780)14โ avhrr (noaa10) band 2 (0.600-1.190)15โ avhrr (noaa11) band 1 (0.540-0.820)16โ avhrr (noaa11) band 2 (0.600-1.120)17โ hrv1 (spot1) band 1 (0.470-0.650)18โ hrv1 (spot1) band 2 (0.600-0.720)19โ hrv1 (spot1) band 3 (0.730-0.930)20โ hrv1 (spot1) band pan (0.470-0.790)21โ hrv2 (spot1) band 1 (0.470-0.650)22โ hrv2 (spot1) band 2 (0.590-0.730)23โ hrv2 (spot1) band 3 (0.740-0.940)24โ hrv2 (spot1) band pan (0.470-0.790)25โ tm (landsat5) band 1 (0.430-0.560)26โ tm (landsat5) band 2 (0.500-0.650)27โ tm (landsat5) band 3 (0.580-0.740)28โ tm (landsat5) band 4 (0.730-0.950)29โ tm (landsat5) band 5 (1.5025-1.890)30โ tm (landsat5) band 7 (1.950-2.410)31โ mss (landsat5) band 1 (0.475-0.640)32โ mss (landsat5) band 2 (0.580-0.750)33โ mss (landsat5) band 3 (0.655-0.855)34โ mss (landsat5) band 4 (0.785-1.100)35โ MAS (ER2) band 1 (0.5025-0.5875)36โ MAS (ER2) band 2 (0.6075-0.7000)
okay so the band list did not come to play ๐ญ it just keeps going, and we are not skipping a single one of these, so buckle up bestie ๐
- MAS (ER2) band 3 โ
(0.8300-0.9125)๐ฆ - MAS (ER2) band 4 โ
(0.9000-0.9975) - MAS (ER2) band 5 โ
(1.8200-1.9575) - MAS (ER2) band 6 โ
(2.0950-2.1925) - MAS (ER2) band 7 โ
(3.5800-3.8700) - MODIS band 1 โ
(0.6100-0.6850)โจ - MODIS band 2 โ
(0.8200-0.9025) - MODIS band 3 โ
(0.4500-0.4825) - MODIS band 4 โ
(0.5400-0.5700) - MODIS band 5 โ
(1.2150-1.2700) - MODIS band 6 โ
(1.6000-1.6650) - MODIS band 7 โ
(2.0575-2.1825) - avhrr (noaa12) band 1 โ
(0.500-1.000)๐ธ - avhrr (noaa12) band 2 โ
(0.650-1.120) - avhrr (noaa14) band 1 โ
(0.500-1.110) - avhrr (noaa14) band 2 โ
(0.680-1.100)
POLDER really said "we come with receipts" โ the little (non polar) notes and the P1 tags are part of the whole vibe, so take them as they come ๐
- POLDER band 1 โ
(0.4125-0.4775)๐ - POLDER band 2 (non polar) โ
(0.4100-0.5225) - POLDER band 3 (non polar) โ
(0.5325-0.5950) - POLDER band 4 P1 โ
(0.6300-0.7025) - POLDER band 5 (non polar) โ
(0.7450-0.7800) - POLDER band 6 (non polar) โ
(0.7000-0.8300) - POLDER band 7 P1 โ
(0.8100-0.9200) - POLDER band 8 (non polar) โ
(0.8650-0.9400) - etm+ (landsat7) band 1 blue โ
(435nm - 517nm)๐ - etm+ (landsat7) band 2 green โ
(508nm - 617nm) - etm+ (landsat7) band 3 red โ
(625nm - 702nm) - etm+ (landsat7) band 4 NIR โ
(753nm - 910nm) - etm+ (landsat7) band 5 SWIR โ
(1520nm - 1785nm) - etm+ (landsat7) band 7 SWIR โ
(2028nm - 2375nm) - etm+ (landsat7) band 8 PAN โ
(505nm - 917nm) - liss (IRC 1C) band 2 โ
(0.502-0.620)๐ - liss (IRC 1C) band 3 โ
(0.612-0.700) - liss (IRC 1C) band 4 โ
(0.752-0.880) - liss (IRC 1C) band 5 โ
(1.452-1.760)
aster showed up with NINE whole bands like it's got nothing to prove ๐ iconic honestly
- aster band 1 โ
(0.480-0.645)โญ - aster band 2 โ
(0.588-0.733) - aster band 3N โ
(0.723-0.913) - aster band 4 โ
(1.530-1.750) - aster band 5 โ
(2.103-2.285) - aster band 6 โ
(2.105-2.298) - aster band 7 โ
(2.200-2.393) - aster band 8 โ
(2.248-2.475) - aster band 9 โ
(2.295-2.538) - avnir band 1 โ
(408nm - 517nm)๐ซถ - avnir band 2 โ
(503nm - 612nm) - avnir band 3 โ
(583nm - 717nm) - avnir band 4 โ
(735nm - 922nm) - Ikonos Green band โ
(408nm - 642nm)๐ - Ikonos Red band โ
(448nm - 715nm) - Ikonos NIR band โ
(575nm - 787nm) - RapidEye Blue band โ
(440nm - 512nm)๐ - RapidEye Green band โ
(515nm - 592nm) - RapidEye Red band โ
(628nm - 687nm) - RapidEye Red edge band โ
(685nm - 735nm) - RapidEye NIR band โ
(750nm - 860nm) - VGT1 (SPOT4) band 0 โ
(420nm - 497nm)๐ฆ - VGT1 (SPOT4) band 2 โ
(603nm - 747nm) - VGT1 (SPOT4) band 3 โ
(740nm - 942nm) - VGT1 (SPOT4) MIR band โ
(1540nm - 1777nm) - VGT2 (SPOT5) band 0 โ
(423nm - 492nm)๐ฆ - VGT2 (SPOT5) band 2 โ
(600nm - 737nm) - VGT2 (SPOT5) band 3 โ
(745nm - 945nm) - VGT2 (SPOT5) MIR band โ
(1523nm - 1757nm)
WorldView2 walking in with the Panchromatic + Coastal Blue + Yellow + Red edge + NIR1 + NIR2 combo, like, ok main character energy fr ๐
- WorldView2 Panchromatic band โ
(448nm - 812nm)๐ - WorldView2 Coastal Blue band โ
(395nm - 457nm) - WorldView2 Blue band โ
(440nm - 517nm) - WorldView2 Green band โ
(503nm - 587nm) - WorldView2 Yellow band โ
(583nm - 632nm) - WorldView2 Red band โ
(623nm - 695nm) - WorldView2 Red edge band โ
(698nm - 750nm) - WorldView2 NIR1 band โ
(760nm - 905nm) - WorldView2 NIR2 band โ
(853nm - 1047nm) - QuickBird Panchromatic band โ
(385nm - 1060nm)๐ฆ - QuickBird Blue band โ
(420nm - 585nm) - QuickBird Green band โ
(448nm - 682nm) - QuickBird Red band โ
(560nm - 747nm) - QuickBird NIR1 band โ
(650nm - 935nm)
Landsat 8 said "let's do the entire rainbow and then some" ๐ and honestly? we love that for them
- Landsat 8 Coastal aerosol band โ
(433nm - 455nm)๐ - Landsat 8 Blue band โ
(448nm - 515nm) - Landsat 8 Green band โ
(525nm - 595nm) - Landsat 8 Red band โ
(633nm - 677nm) - Landsat 8 Panchromatic band โ
(498nm - 682nm) - Landsat 8 NIR band โ
(845nm - 885nm) - Landsat 8 Cirrus band โ
(1355nm - 1390nm) - Landsat 8 SWIR1 band โ
(1540nm - 1672nm) - Landsat 8 SWIR2 band โ
(2073nm - 2322nm) - GeoEye 1 Panchromatic band โ
(448nm - 812nm)๐๏ธ - GeoEye 1 Blue band โ
(443nm - 525nm) - GeoEye 1 Green band โ
(503nm - 587nm) - GeoEye 1 Red band โ
(653nm - 697nm) - GeoEye 1 NIR band โ
(770nm - 932nm) - Spot6 Blue band โ
(440nm - 532nm)๐ฐ๏ธ - Spot6 Green band โ
(515nm - 600nm) - Spot6 Red band โ
(610nm - 710nm) - Spot6 NIR band โ
(738nm - 897nm) - Spot6 Pan band โ
(438nm - 760nm) - Spot7 Blue band โ
(445nm - 532nm)๐ฐ๏ธ - Spot7 Green band โ
(525nm - 607nm) - Spot7 Red band โ
(610nm - 727nm) - Spot7 NIR band โ
(745nm - 902nm) - Spot7 Pan band โ
(443nm - 760nm)
Pleiades1A and Pleiades1B are out here twinning, matching bands, matching energy ๐ซถ
- Pleiades1A Blue band โ
(433nm - 560nm)๐ - Pleiades1A Green band โ
(500nm - 617nm) - Pleiades1A Red band โ
(590nm - 722nm) - Pleiades1A NIR band โ
(740nm - 945nm) - Pleiades1A Pan band โ
(460nm - 845nm) - Pleiades1B Blue band โ
438nm - 560nm)๐
ok don't come for me, that missing opening bracket is upstream's, not mine โ i'm just reporting it faithfully, no cap. leaving it exactly as it lives.
- Pleiades1B Green band โ
(498nm - 615nm) - Pleiades1B Red band โ
(608nm - 727nm) - Pleiades1B NIR band โ
(750nm - 945nm) - Pleiades1B Pan band โ
(460nm - 845nm) - Worldview3 Pan band โ
(445nm - 812nm)๐ฅ - Worldview3 Coastal blue band โ
(395nm - 455nm)
and bestieโฆ we are still not done ๐ญ hold on, there's more coming ๐ธ
151โ Worldview3 Blue band (443nm - 517nm)152โ Worldview3 Green band (508nm - 587nm)153โ Worldview3 Yellow band (580nm - 630nm)154โ Worldview3 Red band (625nm - 697nm)155โ Worldview3 Red edge band (698nm - 752nm)156โ Worldview3 NIR1 band (760nm - 902nm)157โ Worldview3 NIR2 band (855nm - 1042nm)158โ Worldview3 SWIR1 band (1178nm - 1242nm)159โ Worldview3 SWIR2 band (1545nm - 1600nm)160โ Worldview3 SWIR3 band (1633nm - 1687nm)161โ Worldview3 SWIR4 band (1698nm - 1762nm)162โ Worldview3 SWIR5 band (2133nm - 2195nm)163โ Worldview3 SWIR6 band (2170nm - 2235nm)164โ Worldview3 SWIR7 band (2225nm - 2295nm)165โ Worldview3 SWIR8 band (2283nm - 2377nm)166โ Sentinel2A Coastal blue band B1 (430nm - 455nm)167โ Sentinel2A Blue band B2 (440nm - 530nm)168โ Sentinel2A Green band B3 (540nm - 580nm)169โ Sentinel2A Red band B4 (648nm - 682nm)170โ Sentinel2A Red edge band B5 (695nm - 712nm)171โ Sentinel2A Red edge band B6 (733nm - 747nm)172โ Sentinel2A Red edge band B7 (770nm - 795nm)173โ Sentinel2A NIR band B8 (775nm - 905nm)174โ Sentinel2A Red edge band B8A (850nm - 880nm)175โ Sentinel2A Water vapour band B9 (933nm - 957nm)176โ Sentinel2A SWIR Cirrus band B10 (1355nm - 1392nm)177โ Sentinel2A SWIR band B11 (1558nm - 1667nm)178โ Sentinel2A SWIR band B12 (2088nm - 2315nm)179โ Sentinel2B Coastal blue band B1 (430nm - 455nm)180โ Sentinel2B Blue band B2 (440nm - 530nm)181โ Sentinel2B Green band B3 (538nm - 580nm)182โ Sentinel2B Red band B4 (648nm - 682nm)183โ Sentinel2B Red edge band B5 (695nm - 712nm)184โ Sentinel2B Red edge band B6 (730nm - 747nm)185โ Sentinel2B Red edge band B7 (768nm - 792nm)186โ Sentinel2B NIR band B8 (778nm - 905nm)187โ Sentinel2B Red edge band B8A (850nm - 877nm)188โ Sentinel2B Water vapour band B9 (930nm - 955nm)189โ Sentinel2B SWIR Cirrus band B10 (1358nm - 1397nm)190โ Sentinel2B SWIR band B11 (1555nm - 1667nm)191โ Sentinel2B SWIR band B12 (2075nm - 2300nm)192โ PlanetScope 0c 0d Blue band B1 (440nm - 570nm)193โ PlanetScope 0c 0d Green band B2 (450nm - 690nm)194โ PlanetScope 0c 0d Red band B3 (460nm - 700nm)195โ PlanetScope 0c 0d NIR band B4 (770nm - 880nm)196โ PlanetScope 0e Blue band B1 (430nm - 700nm)197โ PlanetScope 0e Green band B2 (450nm - 700nm)198โ PlanetScope 0e Red band B3 (460nm - 700nm)199โ PlanetScope 0e NIR band B4 (760nm - 880nm)200โ PlanetScope 0f 10 Blue band B1 (450nm - 680nm)201โ PlanetScope 0f 10 Green band B2 (450nm - 680nm)202โ PlanetScope 0f 10 Red band B3 (450nm - 680nm)203โ PlanetScope 0f 10 NIR band B4 (760nm - 870nm)204โ Worldview4 Pan band (424nm - 842nm)205โ Worldview4 Blue band (416nm - 567nm)206โ Worldview4 Green band (488nm - 626nm)207โ Worldview4 Red band (639nm - 711nm)208โ Worldview4 NIR1 band (732nm - 962nm)209โ AVIRIS b1 band (365nm)210โ AVIRIS b2 band (375nm).โ AVIRIS b. band (+10nm)431โ AVIRIS b223 band (2486nm)432โ AVIRIS b224 band (2496nm)433โ Hyperion VNIR b8 band (427nm)434โ Hyperion VNIR b9 band (437.16326nm).โ Hyperion VNIR b. band (+10.16326nm)480โ Hyperion VNIR b56 band (914.83648nm)481โ Hyperion VNIR b57 band (924.99974nm)482โ Hyperion SWIR b77 band (912nm)483โ Hyperion SWIR b78 band (922.0884nm).โ Hyperion SWIR b. band (+10.0884nm)627โ Hyperion SWIR b223 band (2384.9064nm)628โ Hyperion SWIR b224 band (2394.9948nm)
๐ EXAMPLES ๐
โจ Atmospheric correction of a Sentinel-2 band โจ
okay bestie so this example is literally about doing atmospheric correction on a Sentinel-2 scene in the North Carolina project ๐ซถ
So picture this: you've got a Sentinel-2 L1C scene named
S2A_OPER_PRD_MSIL1C_PDMC_20161029T092602_R054_V20161028T155402_20161028T155402
and you downloaded it and imported it with region cropping (peep r.import for that part ๐) into the PERMANENT mapset of the North Carolina project. The computational region was set to the extent of the elevation map in the North Carolina dataset. Now you're sitting there with 13 individual bands (B01-B12) that you want the atmospheric correction applied to. The following steps get applied to each band separately, one at a time, no skipping ๐
๐ Create the parameters file for i.atcorr ๐
Step one, bestie: we make a file that holds the 6S parameters for one specific scene and one specific band. To cook up a 6S file, we need to gather up this info:
- geometrical conditions,
- moth, day, decimal hours in GMT, decimal longitude and latitude of measurement,
- atmospheric model,
- aerosol model,
- visibility or aerosol optical depth,
- mean target elevation above sea level,
- sensor height and,
- sensor band.
yes bestie, the original really does say "moth" ๐ฆ โ we're quoting the vibe faithfully, no cap.
1 โ Geometrical conditions
For Sentinel-2A, the geometrical conditions take the value 25, and for Sentinel-2B the geometrical conditions value is 26 (see table A). Our scene comes from the Sentinel-2A mission โ you can tell because the file name starts with S2A_... โจ
2 โ Day, time, longitude and latitude of measurement
The day and the time of the measurement are lowkey hiding in the filename โ specifically the second datum in the file name, with format YYYYMMDDTHHMMSS โ and they're also noted in the metadata file, which is included in the downloaded scene (the file with the .xml extension).
Our sample scene was taken on October 28th (20161028) at 15:54:02 (155402). Real talk though: the time has to be specified in decimal hours in Greenwich Mean Time (GMT). Good news, the time in the scene name is already in GMT, so we just convert it like this:
15 + 54/60 + 2/3600 = 15.901
Longitude and latitude refer to the centre of the computational region (which can totally be smaller than the scene), and they must be in WGS84 decimal coordinates. To grab the centre coords, run:
g.region -bg
The longitude and latitude of the centre are stored in ll_clon and ll_clat. In our case: ll_clon=-78.691 and ll_clat=35.749 ๐บ๏ธ
3 โ Atmospheric model
You get to pick between the various atmospheric models defined at the beginning of this manual. For North Carolina, we can choose 2 - midlatitude summer ๐
4 โ Aerosol model
Same deal โ there are various aerosol models as defined at the beginning of this manual, pick your fave. For North Carolina, we can choose 1 - continental model ๐ซ๏ธ
5 โ Visibility or Aerosol Optical Depth
For Sentinel-2 scenes, the visibility is not measured, so instead we have to estimate the aerosol optical depth, e.g. from AERONET. With a bit of luck ๐ you can find a station nearby your location that measured the Aerosol Optical Depth at 500 nm at the same time as the scene was taken. In our case, on 28th October 2016, the EPA-Res_Triangle_Pk station measured AOD = 0.07 (approximately).
6 โ Mean target elevation above sea level
Mean target elevation above sea level = the mean elevation of the computational region. You can estimate it from the digital elevation model, e.g. by running:
r.univar -g elevation
The mean elevation is stored in mean. In our case, mean=110. In the 6S file it will be displayed in [-km], i.e., -0.110 โฐ๏ธ
- Sensor height ๐ฐ๏ธ โ bestie, our sensor is literally up on a satellite, so you set this one to
-1000. Every single time. No thoughts, just-1000. - Sensor band ๐ โ the whole glow-up of satellite bands lives in table F (scroll up, it's right there โ๏ธ). For Sentinel-2A the band numbers go from
166to178, and for Sentinel-2B they run from179to191.
Okay so this is what the 6S file looks like for Band 02 of our scene ๐ and to actually use it in i.atcorr we just save it as a text file, like params_B02.txt for example. Slay.
25
10 28 15.901 -78.691 35.749
2
1
0
0.07
-0.110
-1000
167
โจ Compute atmospheric correction โจ
Next up, we run i.atcorr on the band we picked, B02 of our Sentinel 2 scene ๐. Parameters we gotta feed it:
inputโ the raster band to be processed, duh.parametersโ path to the 6S file we just created in the previous step (tho ngl you could also just enter the values directly).outputโ the name for your output corrected raster band ๐rangeโ from 1 to theQUANTIFICATION_VALUEstored in the metadata file. For both Sentinel-2A and Sentinel-2B that value is10000.rescaleโ the output range of values for the corrected bands. This one is up to you, main character's choice ๐ for example:0-255,0-1,1-10000.
And if the data is available, you can also specify these ๐:
elevationโ raster of digital elevation modelvisibilityโ raster of visibility model
Finally, this is the command to apply atmospheric correction to band B02:
i.atcorr input=B02 parameters=params_B02.txt output=B02.atcorr range=1,10000 rescale=0,255 elevation=elevation
And here's the tea ๐: to apply atmospheric correction to the remaining bands, only the last line in the 6S parameters file (that's the sensor band, bestie) needs changing. Everything else stays exactly the same. Lowkey iconic.
Figure: Sentinel-2A Band 02 with applied atmospheric correction (histogram equalization grayscale color scheme)
๐ฐ๏ธ Atmospheric correction of a Landsat-7 band ๐ฐ๏ธ
This example is also based on the North Carolina sample dataset (GMT -5 hours). First we set the computational region to the satellite map, like band 4:
g.region raster=lsat7_2002_40 -p
It is so important to verify the available metadata for the sun position, because it has to be defined for the atmospheric correction. One option: check the satellite overpass time with the sun position as reported in the metadata file (file copy; North Carolina sample dataset). For the North Carolina sample dataset, these values have been stored for each channel and you can grab them with:
r.info lsat7_2002_40
In this case we have: SUN_AZIMUTH = 120.8810347, SUN_ELEVATION = 64.7730999.
If the sun position metadata are unavailable ๐, we can also calculate them from the overpass time like this (r.sunmask uses SOLPOS):
r.sunmask -s elev=elevation out=dummy year=2002 month=5 day=24 hour=10 min=42 sec=7 timezone=-5
# .. reports: sun azimuth: 121.342461, sun angle above horz.(refraction corrected): 65.396652
And if the overpass time is unknown, use the NASA LaRC Satellite Overpass Predictor. Periodt.
๐งฎ Convert digital numbers (DN) to radiance at top-of-atmosphere (TOA) ๐งฎ
For Landsat and ASTER, the conversion can be conveniently done with i.landsat.toar or i.aster.toar, respectively. Chef's kiss.
In case of different satellites, the conversion of DN (digital number = pixel values) to radiance at top-of-atmosphere (TOA) can also be done manually, using e.g. the formula:
# formula depends on satellite sensor, see respective metadata
Lฮป = ((LMAXฮป - LMINฮป)/(QCALMAX-QCALMIN)) * (QCAL-QCALMIN) + LMINฮป
where,
Lฮป= Spectral Radiance at the sensor's aperture in Watt/(meter squared * ster * ยตm), the apparent radiance as seen by the satellite sensor;QCAL= the quantized calibrated pixel value in DN;LMINฮป= the spectral radiance that is scaled toQCALMINin watts/(meter squared * ster * ยตm);LMAXฮป= the spectral radiance that is scaled toQCALMAXin watts/(meter squared * ster * ยตm);QCALMIN= the minimum quantized calibrated pixel value (corresponding toLMINฮป) in DN;QCALMAX= the maximum quantized calibrated pixel value (corresponding toLMAXฮป) in DN=255.
LMINฮป and LMAXฮป are the radiances related to the minimal and maximal DN value, and they are reported in the metadata file of each image. High gain or low gain is also reported in the metadata file of each satellite image. For Landsat ETM+, the minimal DN value (QCALMIN) is 1 (see Landsat handbook, chapter 11), and the maximal DN value (QCALMAX) is 255. QCAL is the DN value for every separate pixel in the Landsat image.
We extract the coefficients and apply them in order to obtain the radiance map ๐:
CHAN=4
r.info lsat7_2002_${CHAN}0 -h | tr โ\nโ โ โ | sed โs+ ++gโ | tr โ:โ โ\nโ | grep "LMIN_BAND${CHAN}\|LMAX_BAND${CHAN}"
LMAX_BAND4=241.100,p016r035_7x20020524.met
LMIN_BAND4=-5.100,p016r035_7x20020524.met
QCALMAX_BAND4=255.0,p016r035_7x20020524.met
QCALMIN_BAND4=1.0,p016r035_7x20020524.met
Conversion to radiance (this calculation is done for band 4, for the other bands, the numbers will need to be replaced with their related values):
r.mapcalc "lsat7_2002_40_rad = ((241.1 - (-5.1)) / (255.0 - 1.0)) * (lsat7_2002_40 - 1.0) + (-5.1)"
Again, the r.mapcalc calculation is only needed when working with satellite data other than Landsat or ASTER ๐ซถ.
๐ Create the parameters file for i.atcorr ๐
The underlying 6S model is parametrized through a control file, indicated with the parameters option. This is a text file defining geometrical and atmospherical conditions of the satellite overpass. Here we create a control file icnd_lsat4.txt for band 4 (NIR), based on metadata. For the overpass time, we need to define decimal hours:
10:42:07 NC local time = 10.70 decimal hours (decimal minutes: 42 * 100 / 60) which is 15.70 GMT.
8 - geometrical conditions=Landsat ETM+
5 24 15.70 -78.691 35.749 - month day hh.ddd longitude latitude ("hh.ddd" is in GMT decimal hours)
2 - atmospheric model=midlatitude summer
1 - aerosols model=continental
50 - visibility [km] (aerosol model concentration)
-0.110 - mean target elevation above sea level [km]
-1000 - sensor on board a satellite
64 - 4th band of ETM+ Landsat 7
Finally, run the atmospheric correction (-r for reflectance input map; -a for date > July 2000):
i.atcorr -r -a lsat7_2002_40_rad elevation=elevation parameters=icnd_lsat4.txt output=lsat7_2002_40_atcorr
Okay important bestie ๐ โ note that the altitude value from'icnd_lsat4.txt'file is read at the beginning to compute the initial transform. Therefore, it is necessary to provide a value that might be the mean value of the elevation model (r.univar elevation). For the atmospheric correction per se, the elevation values from the raster map are used.
Also note the process is computationally intensive ๐ญ. And note that i.atcorr reports solar elevation angle above horizon rather than solar zenith angle. That's the plot twist, don't @ me.
๐ง REMAINING DOCUMENTATION ISSUES ๐ง
The influence and importance of the visibility value or map should be explained, also how to obtain an estimate for either visibility or aerosol optical depth at 550nm.
๐ REFERENCES ๐
- Vermote, E.F., Tanre, D., Deuze, J.L., Herman, M., and Morcrette, J.J., 1997, Second simulation of the satellite signal in the solar spectrum, 6S: An overview., IEEE Trans. Geosc. and Remote Sens. 35(3):675-686.
- 6S Manual: PDF1, PDF2, and PDF3
- RapidEye sensors have been provided by RapidEye AG, Germany
- Barsi, J.A., Markham, B.L. and Pedelty, J.A., 2011, The operational land imager: spectral response and spectral uniformity., Proc. SPIE 8153, 81530G; doi:10.1117/12.895438
๐ SEE ALSO ๐
- GRASS Wiki page about Atmospheric correction
i.aster.toari.colors.enhancei.landsat.toarr.infor.mapcalcr.univar
๐ AUTHORS ๐
Original version of the program for GRASS 5:
Christo Zietsman, 13422863(at)sun.ac.za
Code clean-up and port to GRASS 6.3, 15.12.2006:
Yann Chemin, ychemin(at)gmail.com
Documentation clean-up + IRS LISS sensor addition 5/2009:
Markus Neteler, FEM, Italy
ASTER sensor addition 7/2009:
Michael Perdue, Canada
AVNIR, IKONOS sensors addition 7/2010:
Daniel Victoria, Anne Ghisla
RapidEye sensors addition 11/2010:
Peter Lรถwe, Anne Ghisla
VGT1 and VGT2 sensors addition from 6SV-1.1 sources, addition 07/2011:
Alfredo Alessandrini, Anne Ghisla
Added Landsat 8 from NASA sources, addition 05/2014:
Nikolaos Ves
Geoeye1 addition 7/2015:
Marco Vizzari
Worldview3 addition 8/2016:
Markus Neteler, mundialis.de, Germany
Sentinel-2A addition 12/2016:
Markus Neteler, mundialis.de, Germany
Sentinel-2B addition 1/2018:
Stefan Blumentrath, Zofie Cimburova, Norwegian Institute for Nature Research, NINA, Oslo, Norway
Worldview4 addition 12/2018:
Markus Neteler, mundialis.de, Germany
AVIRIS/Hyperion addition 11/2023:
Yann Chemin, SOPHIA Engineering, FR
๐ SOURCE CODE ๐
Available at: i.atcorr source code (history)
Latest change: Friday Apr 17 01:04:26 2026 in commit: 32a143358df26b2e518b03c7e0d79541e8d1e5b1
Main index | Imagery index | Topics index | Keywords index | Graphical index | Full index
ยฉ 2003-2026 GRASS Development Team, GRASS 8.5.0 Reference Manual
and that's the whole page bestie, we ate and left absolutely no crumbs ๐
this lil love letter to atmospheric correction comes straight outta the GRASS 8.5.0 Reference Manual for i.atcorr (1grass), with its latest change dated Friday Apr 17 01:04:26 2026 ๐ฆ go correct some atmospheres, you absolute icon ๐โจ
๐ฆ where this page comes from
- alpine 3.24: grass-gis-doc 8.5.0-r1 ยท GPL-2.0-or-later
- ubuntu stonking: grass-doc 8.5.0-1ubuntu1 ยท GPL-2.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms