Reducing terrain-induced reflectance distortion in satellite imagery of a portion of the Karakoram mountain range in Himachal Pradesh, India.
In mountainous terrain, variations in slope and aspect affect the angle of solar illumination, leading to inconsistent surface reflectance in satellite data — even when surface materials are the same. Using Shuttle Radar Topography Mission (SRTM) elevation data and spectral imagery from Landsat 8, topographic correction was applied to produce reflectance values more representative of actual surface characteristics and less influenced by terrain-induced shading.
Project highlights
- Aligned Landsat 8 and SRTM raster datasets with differing projections and spatial resolutions
- Applied topographic correction using terrain-based illumination modeling
- Mitigated slope and aspect effects to enhance spectral comparability in mountainous terrain
Study area
Portion of the Karakoram mountain range in Himachal Pradesh, India.

Terrain shadows and directional reflectance variation are evident across mountain slopes.

Healthy vegetation appears in dark red; urban or barren areas appear in light tones. Terrain shading still affects reflectance.
Elevation data
The SRTM image provides terrain information — slope, aspect, and elevation — needed to correct the Landsat imagery for illumination variation caused by complex topography. This correction helps distinguish true land cover characteristics from artifacts caused by shading or terrain tilt.

Lighter tones represent higher elevations, while darker areas are lower in elevation.
Illumination modeling
Illumination across the study area was modeled using terrain characteristics (slope and aspect) calculated from the SRTM DEM, combined with solar geometry values (sun elevation and azimuth) obtained from Landsat 8 metadata.
# Calculate terrain variables from the SRTM DEM
slope = terrain(srtm_masked, v='slope')
aspect = terrain(srtm_masked, v='aspect')
# Set sun elevation and azimuth from Landsat metadata (Sun Elevation LORA and Sun Azimuth LORA fields)
sunelev = 34.28733739 # Input from Sun Elevation LORA
sunazimuth = 158.83663766 # Input from Sun Azimuth LORA
# Calculate illumination
IlluMod = topCor(L8_masked, slope, aspect, azimuth = sunazimuth, elevation = sunelev, method="illu")
plot(IlluMod)
# Apply topographic correction to masked Landsat 8 imagery
L8_maskedCor = topCor(L8_masked, slope, aspect, azimuth = sunazimuth, elevation = sunelev)
Plotting the illumination model demonstrates how slope orientation influences the amount of sunlight each surface receives. Brighter areas receive more direct sunlight, while darker zones remain in partial or complete shadow.

The illumination model helps visualize which areas receive stronger solar exposure.
Topographic correction applied to Landsat imagery
The same terrain and solar inputs were then used to apply a topographic correction to the Landsat 8 imagery. This adjustment minimizes reflectance differences caused by terrain shadows, producing more consistent spectral values across the landscape.


Topographic correction enhances the accuracy of surface reflectance in mountainous regions, enabling more reliable vegetation analysis, land cover classification, and change detection. With terrain-induced illumination effects reduced, further analysis can focus more confidently on true surface conditions.
Sources
Imagery derived from data available on USGS EarthExplorer:
- SRTM DEM: SRTM1N31E077V3
- Landsat 8 ID: LC08_L2SP_147038_20241126_20241202_02_T1