Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Land Use / Land Cover Analysis of Bengaluru using Sentinel Data

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


⚠️ Academic Disclaimer

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.

📌 Abstract

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


📂 Repository Structure

├── 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

🛰️ Data

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.


⚙️ Processing Pipeline

Step 1 — SAR Preprocessing (SAR_pre_processing.py)

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:

  1. TOPSAR-Split — Extracts subswath IW2 and all 9 burst indices for the selected polarization from the full SLC product.
  2. 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.
  3. Calibration — Converts raw pixel DN values to physically meaningful backscatter coefficients (Sigma₀), normalizing for sensor geometry and range spreading loss.
  4. TOPSAR-Deburst — Merges the individual bursts of the IW subswath into a single continuous image, removing burst boundaries.
  5. Multilook — Applies 4 range looks and 1 azimuth look to reduce spatial resolution while averaging out speckle and producing a more square pixel geometry.
  6. Speckle Filter (Lee) — Applies a Lee sigma filter to further suppress multiplicative speckle noise while preserving spatial structure and pixel contrast.
  7. 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.
  8. 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.


Step 2 — MSI Preprocessing (MSI_pre_processing.py)

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.


Step 3 — SAR–MSI Fusion (SAR_MSI_Fusion.py)

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.


Step 4 — Band Mathematics & Index Computation (band_math.py)

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.


🗺️ Results

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.

🛠️ Dependencies & Setup

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_snappy is not installable via pip. It must be configured using the snappy_conf.py script 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.


📚 References

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages