Submitted as a System Level Project for DSP Laboratory (23ECE283) Dept. of Electronics and Communication Engineering, Amrita School of Engineering, Coimbatore Team No. 7, Group 7 – Batch 1
This project is a partial replication and adaptation of the methodology described in:
G. Metrikaityte, J. S. Visockiene, and K. Papsys, "Digital Mapping of Land Cover Changes Using the Fusion of SAR and MSI Satellite Data," Land, vol. 11, no. 7, p. 1023, Jul. 2022. DOI: 10.3390/land11071023
The original study was conducted over a 2000 km² region in western Lithuania using 13 SAR images from 2018–2019, implemented entirely via the ESA SNAP Graph Builder GUI. This project replicates specifically the fourth and most advanced method described in that paper — fusing SAR and MSI data prior to classification and augmenting it with additional spectral indices — and adapts it to a ~1000 km² region of Bengaluru, southern India, using 2025 satellite acquisitions.
The key distinctions from the original work are:
- The processing pipeline has been fully reimplemented in Python using
esa_snappy, SNAP's Python API, running in the Spyder IDE — rather than through the SNAP Graph Builder GUI used in the reference paper. - The study area, satellite imagery, and data source are different — imagery was downloaded from ISRO's Bhoonidhi portal rather than the Copernicus Open Access Hub.
- The land cover classes were adapted to three categories suitable for an Indian urban landscape: vegetation, built-up areas, and water bodies.
- The classification/segmentation step was not implemented; this project covers data acquisition, preprocessing, fusion, and index computation only.
This project demonstrates a remote sensing workflow that integrates Sentinel-1 SAR (Synthetic Aperture Radar) and Sentinel-2 MSI (Multispectral Imagery) data for Land Use / Land Cover (LULC) analysis of Bengaluru. SAR and MSI images are independently preprocessed and then fused into a combined data product. Spectral and SAR-derived indices are computed from the fused image to improve the distinguishability of land cover classes such as vegetation, urban built-up zones, and water bodies. All preprocessing and fusion steps are scripted in Python via the esa_snappy interface to the ESA SNAP toolbox.
Keywords: Image Fusion, SAR, MSI, LULC, SNAP, esa_snappy, Sentinel-1, Sentinel-2, Remote Sensing, Bengaluru
├── Codes/
│ ├── SAR_pre_processing.py # Sentinel-1 SAR preprocessing pipeline (VV & VH)
│ ├── MSI_pre_processing.py # Sentinel-2 MSI subsetting and true color composite
│ ├── SAR_MSI_Fusion.py # Collocation-based SAR + MSI image fusion
│ └── band_math.py # Spectral and SAR index computation on fused product
| Sensor | Product | Acquisition | Source |
|---|---|---|---|
| Sentinel-1A | IW SLC, dual-pol (VV+VH) | 09 June 2025 | Bhoonidhi, NRSC/ISRO |
| Sentinel-2 | L2A MSI | June–August 2025 (cloud < 15%) | Bhoonidhi, NRSC/ISRO |
The Sentinel-2 L2A product is atmospherically and terrain-corrected by ESA at source, making it immediately suitable for fusion without further atmospheric correction. Three months of MSI imagery (June, July, August 2025) were used to account for cloud cover, selecting scenes below 15% cloud coverage.
The Sentinel-1 IW SLC product is processed separately for both VV and VH polarizations through the following sequential chain, with the intermediate result visualized in dB grayscale at each stage:
- TOPSAR-Split — Extracts subswath IW2 and all 9 burst indices for the selected polarization from the full SLC product.
- Apply Orbit File — Refines the satellite's position and velocity metadata using a precise post-acquisition orbital file, critical for accurate geocoding and downstream fusion.
- Calibration — Converts raw pixel DN values to physically meaningful backscatter coefficients (Sigma₀), normalizing for sensor geometry and range spreading loss.
- TOPSAR-Deburst — Merges the individual bursts of the IW subswath into a single continuous image, removing burst boundaries.
- Multilook — Applies 4 range looks and 1 azimuth look to reduce spatial resolution while averaging out speckle and producing a more square pixel geometry.
- Speckle Filter (Lee) — Applies a Lee sigma filter to further suppress multiplicative speckle noise while preserving spatial structure and pixel contrast.
- Linear to dB — Converts Sigma₀ from linear power scale to logarithmic dB scale, stretching dark values and compressing bright values to enhance inter-class contrast.
- Terrain Correction — Geocodes the image to a geographic coordinate system using the SRTM 1 Second HGT digital elevation model at 10 m pixel spacing, correcting for radar layover and foreshortening distortions.
The fully preprocessed SAR product is saved in BEAM-DIMAP format and used as the master dataset in the fusion step.
The Sentinel-2 L2A product is loaded and subsetted to retain only the spectral bands relevant to land cover analysis:
Bands retained: B2 (Blue), B3 (Green), B4 (Red), B5, B6, B7 (Red-Edge), B8 (NIR), B8A (Narrow NIR), B11, B12 (SWIR)
Bands excluded: B1 (Aerosol), B9 (Water Vapour), B10 (Cirrus) — removed to eliminate cloud-sensitive and aerosol-contaminated channels that are not useful for land cover characterization.
A true color composite (B4, B3, B2) is generated using 2nd–98th percentile stretch normalization for visual inspection, and the subsetted product is saved in BEAM-DIMAP format.
The preprocessed VH SAR product, VV SAR product, and MSI subset are co-registered into a single fused data product using SNAP's Collocate operator with bilinear interpolation resampling. The VH SAR image serves as the master, meaning all other datasets are resampled and aligned to its spatial grid. This choice is consistent with the reference methodology, where SAR is preferred as master due to the high spatial precision achieved after orbit file correction.
The resulting fused product contains all SAR bands (Sigma₀_VH_dB, Sigma₀_VV_dB) alongside all retained MSI spectral bands as a unified, spatially consistent dataset.
Six spectral and radar indices are computed on the fused product using SNAP's BandMaths operator, accessed via jpy's Java interop. These indices serve as additional discriminative bands to improve separability between land cover classes:
| Index | Formula | Land Cover Purpose |
|---|---|---|
| NDVI | (B8 − B4) / (B8 + B4) | Vegetation health and density |
| S2REP | 705 + 35 × ((B7 + B4)/2 − B5) / (B6 − B5) | Vegetation red-edge transition; chlorophyll estimation |
| GNDVI | (B3 − B4) / (B3 + B4) | Photosynthetic intensity; sensitive to chlorophyll concentration |
| NDWI | (B3 − B8) / (B3 + B8) | Water body detection |
| NDBI | (B11 − B8) / (B11 + B8) | Built-up / urban area identification |
| Sigma₀ Ratio (dB) | Sigma₀_VV_dB − Sigma₀_VH_dB | SAR polarization ratio; differentiates surface textures and scattering mechanisms |
The final data product consists of the 10 MSI spectral bands, the 2 SAR backscatter bands, and the 6 computed indices — 18 bands in total — saved as a BEAM-DIMAP product ready for classification.
After computing the band indices on the fused product, the following land cover characteristics were observed over the Bengaluru study area:
- NDVI highlighted vegetated zones in the urban periphery and green corridors.
- NDWI effectively isolated lakes and water bodies around the city.
- GNDVI identified areas of high photosynthetic activity.
- NDBI delineated built-up urban zones, with a zoomed view clearly resolving structures including Bengaluru International Airport.
- Sigma₀ Ratio differentiated surface textures not distinguishable by optical bands alone.
This project requires a working installation of ESA SNAP (version 9 or later) with the esa_snappy Python module configured. esa_snappy acts as a Python bridge to SNAP's Java-based Graph Processing Framework (GPF), allowing all SNAP operators to be called programmatically.
esa_snappy # Python-SNAP bridge (configured via snappy_conf)
jpy # Java-Python interop layer used by esa_snappy
numpy
matplotlib
opencv-python # Used for image downscaling in visualization
Note:
esa_snappyis not installable via pip. It must be configured using thesnappy_conf.pyscript bundled with ESA SNAP. Refer to the official ESA SNAP documentation for setup instructions.
The input file paths in each script are hardcoded to the local development environment (Windows paths). These must be updated to point to your local data directories before running.
- G. Metrikaityte, J. S. Visockiene, and K. Papsys, "Digital Mapping of Land Cover Changes Using the Fusion of SAR and MSI Satellite Data," Land, vol. 11, no. 7, p. 1023, Jul. 2022. DOI: 10.3390/land11071023 — Primary reference paper
- National Remote Sensing Centre (NRSC), ISRO, Bhoonidhi – ISRO's Earth Observation Data Hub. https://bhoonidhi.nrsc.gov.in/
- ESA SNAP Toolbox: https://step.esa.int/main/toolboxes/snap/