Topographic correction of Landsat imagery using GRASS GIS

The GRASS module i.topo.corr to correct topographic effects on imagery works quite impressively on the Landsat imagery using the recently released Enhanced Shuttle Land Elevation Data with a 1 arc / 30 meter spatial resolution. Here is a quick example to show the difference of the original image and the corrected image that was processed using i.topo.corr and the enhanced SRTM elevation model in GRASS GIS:

Landsat 8 scene (Band 5) uncorrected

Landsat 8 scene (Band 5) topographically corrected

Gif animation: Landsat 8 scene (Band 5) before and after topographical correction

On the uncorrected scene the mountains are clearly visible by the shadows they cast because the sun was not in zenith during the capture of the image. Using the SRTM 1arc DEM makes it possible to model the illumination of the earths surface at the moment of the image capturing. Having this model, it is possible to correct the topographic shadow effect on the image.

The illumination model can be created as follows:


   i.topo.corr -i base=<name_of_elevation_model> \
   zenith=<solar zenith angle> azimuth=<sun azimuth angle> \


The solar zenith angle equals “90°- (sun elevation)”. The “sun elevation” can be derived from the Metadata-File (*MTL.txt) of the image. The azimuth angle can also be found there under “sun azimuth”.

After the illumination model is created, it can be used to correct the desired bands of the image:


   i.topo.corr in=<input image band(s)> \
   out=<prefix for corrected output raster map(s)> \
   zenith=<solar zenith angle> \
   basemap=<illumination model>


Visually the results are very impressive and a huge part of the topographic shadow effect can be corrected by this method. However, according to my experience the correction will not eradicate 100% of the shadow effects, especially in very mountainous areas. This might not be visible at first sight but it becomes apparent with automated image classifications (e.g. i.cluster/i.maxlik in GRASS GIS), where shadow-leftovers might still be miss-classified as dark objects (e.g. water). These could again be filtered out using other algorithms, e.g. areas with high slopes would be very unlikely to represent water basins.

For further information on Landsat processing using GRASS GIS I can recommend very much the GRASS Landsat Wiki. Some very good instructions on Landsat 8 processing in GRASS GIS are also available on Markus Netelers Blog.

Tags: , ,

Leave a Reply

Your email address will not be published. Required fields are marked *