🎉 75% of content is free forever — Unlock Premium from $10/mo →
CW
đŸ’ŧ Servicesâ„šī¸ Aboutâœ‰ī¸ ContactView Pricing Plansfrom $10

Remote Sensing and Satellite Imagery

Computer VisionđŸŸĸ Free Lesson

Advertisement

Remote Sensing and Satellite Imagery

Module: Computer Vision | Difficulty: Advanced

Remote Sensing Analysis PipelineSatelliteSentinel-213 bands, 10mPreprocessingAtmos. CorrectionCloud RemovalFeature ExtractSpectral IndicesTexture + ShapeClassificationLand Cover MapPixel labelsMapsGIS ExportGeoJSONSpectral AnalysisNDVI, NDWI, NDBI indicesVegetation health monitoringChange DetectionTemporal analysisDeforestation trackingGlobal Monitoring: Sentinel-2 captures entire Earth every 5 days at 10m resolutionApplications: agriculture, urban planning, disaster response, climate monitoring, deforestation

Overview of Remote Sensing and Satellite Imagery

Remote sensing is the acquisition of information about the Earth's surface without direct contact, primarily using satellite and airborne sensors. Modern Earth observation satellites like Sentinel-2, Landsat-8, and commercial constellations (Planet, Maxar) capture multispectral imagery across 10-13+ spectral bands, enabling detailed analysis of vegetation, water, soil, and urban features. The combination of global coverage, regular revisit times, and deep learning analysis has transformed remote sensing from a niche scientific discipline to a critical tool for agriculture, urban planning, disaster response, and climate monitoring.

The scale of modern remote sensing data is unprecedented: Sentinel-2 alone generates 1.6 terabytes of imagery daily, covering the entire Earth's land surface every 5 days. Deep learning has enabled automated analysis of this data at scales impossible with traditional manual interpretation. Convolutional neural networks and vision transformers now achieve human-level or better accuracy on land cover classification, building detection, and crop type mapping, enabling real-time monitoring of global environmental change.

Atmospheric Correction

Raw satellite imagery contains distortions caused by atmospheric scattering and absorption, which must be corrected before meaningful analysis can be performed. Atmospheric correction converts top-of-atmosphere (TOA) reflectance to surface reflectance (SR), removing the effects of aerosols, water vapor, and ozone. This process is critical for multi-temporal analysis because atmospheric conditions vary between acquisitions, and uncorrected imagery will show false changes due to atmospheric variability rather than actual surface changes.

The most widely used atmospheric correction algorithms include Sen2Cor (for Sentinel-2), ACOLITE (for aquatic applications), and 6S (Second Simulation of the Satellite Signal in the Solar Spectrum). These algorithms model the radiative transfer through the atmosphere using auxiliary data (water vapor, aerosol optical depth) and sensor-specific calibration parameters. The corrected surface reflectance values enable consistent comparison across time, sensors, and geographic locations.

Atmospheric Correction Formula

Where each parameter means:

  • — surface reflectance at wavelength
  • — top-of-atmosphere radiance measured by the sensor
  • — path radiance (atmospheric scattering contribution)
  • — atmospheric transmission along the viewing path
  • — solar zenith angle
  • — solar irradiance at the top of the atmosphere
  • — Earth-Sun distance (in astronomical units)
  • Intuition: The formula removes atmospheric effects (path radiance, transmission loss) and normalizes for solar geometry to recover the true surface reflectance

NDVI and Spectral Indices

Spectral indices exploit the unique spectral signatures of different surface materials to identify and monitor specific features. The Normalized Difference Vegetation Index (NDVI) is the most widely used remote sensing index, measuring vegetation health and density by comparing near-infrared (NIR) and red band reflectance. Healthy vegetation strongly absorbs red light for photosynthesis while reflecting NIR light, creating a distinctive spectral signature.

NDVI values range from -1 to +1, where values above 0.3 indicate healthy vegetation, values near 0 indicate bare soil, and negative values indicate water or snow. Multi-temporal NDVI analysis enables crop yield estimation, drought monitoring, and deforestation detection. Other important indices include NDWI (water), NDBI (urban), and NDMI (moisture stress), each exploiting specific spectral relationships for targeted applications.

NDVI Formula

Where each parameter means:

  • — reflectance in the near-infrared band (e.g., Sentinel-2 Band 8, 842nm)
  • — reflectance in the red band (e.g., Sentinel-2 Band 4, 665nm)
  • NDVI ranges from -1 to +1
  • Intuition: Vegetation has high NIR reflectance (cell structure scattering) and low Red reflectance (chlorophyll absorption), producing NDVI > 0.3; bare soil has similar reflectance in both bands, producing NDVI near 0

Second Architecture: U-Net for Semantic Segmentation

Multi-Spectral U-Net for Land Cover Classification13 bands10m resEnc 64256x2563x3 convEnc 128128x128MaxPoolBottleneck64x64x256Dec 128128x128UpsampleDec 64256x256Skip conn7-classsoftmax13-Band InputVNIR + SWIR + NIR + Red EdgeSkip ConnectionsMulti-scale feature fusion7-class land cover: Water, Urban, Forest, Agriculture, Grassland, Wetland, Barren92.3% OA on EuroSAT, 89.7% on BigEarthNet benchmarks

Multi-spectral U-Net adapts the standard U-Net architecture for satellite imagery by accepting 13-band inputs instead of 3-channel RGB. The encoder processes multispectral data through convolutional blocks that learn to extract features across spectral bands, while the decoder produces per-pixel land cover classification maps. Skip connections preserve fine spatial details necessary for accurate boundary delineation between land cover classes.

The architecture handles the unique challenges of satellite imagery including large spatial extent (thousands of pixels per tile), multispectral data with different band resolutions, and class imbalance (urban areas are much smaller than forests). Data augmentation strategies specific to remote sensing include random rotation (satellites have no fixed orientation), brightness adjustment (simulating different illumination conditions), and spectral band dropout (improving robustness to missing bands).

Change Detection in Remote Sensing

Change detection identifies differences in land cover between two or more images acquired at different times. This capability is critical for monitoring deforestation, urban expansion, disaster damage, and seasonal vegetation dynamics. Modern change detection methods use siamese networks or temporal attention mechanisms to compare multi-temporal imagery and produce change maps indicating where and what type of change has occurred.

The challenge of change detection is distinguishing real land cover changes from radiometric differences caused by varying atmospheric conditions, sun angles, and sensor characteristics. Radiometric normalization and change vector analysis help separate true changes from noise. Deep learning approaches learn to suppress these nuisance variations while amplifying genuine land cover changes.

Change Vector Analysis

Where each parameter means:

  • — spectral reflectance vector at time (across all bands)
  • — spectral reflectance vector at time
  • — change vector indicating magnitude and direction of change
  • — Euclidean magnitude of change across all spectral bands
  • Intuition: Large change vectors indicate significant land cover change; the direction of the vector indicates what type of change occurred (e.g., vegetation loss vs. water gain)

Python Implementation: Land Cover Classification

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import Dataset
import numpy as np


class MultiSpectralUNet(nn.Module):
    def __init__(self, in_bands=13, num_classes=7):
        super().__init__()
        self.enc1 = self._conv_block(in_bands, 64)
        self.enc2 = self._conv_block(64, 128)
        self.enc3 = self._conv_block(128, 256)
        self.enc4 = self._conv_block(256, 512)
        self.pool = nn.MaxPool2d(2)
        self.bottleneck = self._conv_block(512, 1024)
        self.up4 = nn.ConvTranspose2d(1024, 512, 2, stride=2)
        self.up3 = nn.ConvTranspose2d(512, 256, 2, stride=2)
        self.up2 = nn.ConvTranspose2d(256, 128, 2, stride=2)
        self.up1 = nn.ConvTranspose2d(128, 64, 2, stride=2)
        self.dec4 = self._conv_block(1024, 512)
        self.dec3 = self._conv_block(512, 256)
        self.dec2 = self._conv_block(256, 128)
        self.dec1 = self._conv_block(128, 64)
        self.output = nn.Conv2d(64, num_classes, 1)

    def _conv_block(self, in_ch, out_ch):
        return nn.Sequential(
            nn.Conv2d(in_ch, out_ch, 3, padding=1, bias=False),
            nn.BatchNorm2d(out_ch),
            nn.ReLU(inplace=True),
            nn.Conv2d(out_ch, out_ch, 3, padding=1, bias=False),
            nn.BatchNorm2d(out_ch),
            nn.ReLU(inplace=True),
        )

    def forward(self, x):
        e1 = self.enc1(x)
        e2 = self.enc2(self.pool(e1))
        e3 = self.enc3(self.pool(e2))
        e4 = self.enc4(self.pool(e3))
        b = self.bottleneck(self.pool(e4))
        d4 = self.dec4(torch.cat([self.up4(b), e4], dim=1))
        d3 = self.dec3(torch.cat([self.up3(d4), e3], dim=1))
        d2 = self.dec2(torch.cat([self.up2(d3), e2], dim=1))
        d1 = self.dec1(torch.cat([self.up1(d2), e1], dim=1))
        return self.output(d1)


class NDVICalculator:
    def __init__(self, nir_band=7, red_band=3):
        self.nir_band = nir_band
        self.red_band = red_band

    def compute(self, image):
        nir = image[:, self.nir_band].astype(float)
        red = image[:, self.red_band].astype(float)
        ndvi = (nir - red) / (nir + red + 1e-10)
        return np.clip(ndvi, -1, 1)

    def classify_vegetation(self, ndvi, thresholds=None):
        if thresholds is None:
            thresholds = {"dense": 0.6, "moderate": 0.4, "sparse": 0.2, "bare": 0.0}
        classes = np.zeros_like(ndvi, dtype=int)
        classes[ndvi > thresholds["dense"]] = 4
        classes[(ndvi > thresholds["moderate"]) & (ndvi <= thresholds["dense"])] = 3
        classes[(ndvi > thresholds["sparse"]) & (ndvi <= thresholds["moderate"])] = 2
        classes[(ndvi > thresholds["bare"]) & (ndvi <= thresholds["sparse"])] = 1
        return classes


class LandCoverClassifier:
    def __init__(self, model_path=None):
        self.model = MultiSpectralUNet(in_bands=13, num_classes=7)
        self.class_names = [
            "Water", "Urban", "Forest", "Agriculture",
            "Grassland", "Wetland", "Barren"
        ]
        if model_path:
            self.model.load_state_dict(torch.load(model_path))

    def classify_tile(self, tile, tile_size=256, overlap=32):
        h, w, bands = tile.shape
        stride = tile_size - overlap
        prediction = np.zeros((h, w, 7))
        count = np.zeros((h, w))
        for i in range(0, h - tile_size + 1, stride):
            for j in range(0, w - tile_size + 1, stride):
                patch = tile[i:i+tile_size, j:j+tile_size]
                patch_tensor = torch.from_numpy(patch.transpose(2, 0, 1)).float()
                with torch.no_grad():
                    pred = self.model(patch_tensor.unsqueeze(0))
                    pred = F.softmax(pred, dim=1).squeeze().numpy()
                prediction[i:i+tile_size, j:j+tile_size] += pred.transpose(1, 2, 0)
                count[i:i+tile_size, j:j+tile_size] += 1
        prediction /= count[:, :, np.newaxis] + 1e-10
        return prediction.argmax(axis=2)

Comparison of Remote Sensing Methods

ModelEuroSat OABigEarthNet F1Input BandsParamsFPS
ResNet-5089.2%78.3%1325M45
U-Net92.3%82.1%1331M30
Vision Transformer93.8%84.6%1386M20
SatMAE95.1%86.2%13100M15
Scale-MAE96.0%87.4%13304M10

Common Challenges in Remote Sensing

  1. Multispectral Data: Satellite sensors capture 10-13+ spectral bands at different spatial resolutions, requiring architectures that handle variable input channels and multi-resolution fusion
  2. Atmospheric Interference: Clouds, haze, and aerosols corrupt satellite imagery, requiring cloud detection and removal as preprocessing steps
  3. Large Spatial Extent: Single satellite scenes can be 100km x 100km, requiring tiling strategies and efficient inference for processing entire scenes
  4. Class Imbalance: Land cover classes are highly imbalanced (oceans dominate global area), requiring weighted sampling and focal loss for training
  5. Temporal Consistency: Multi-temporal analysis requires radiometric normalization to distinguish real changes from atmospheric and illumination differences

Case Study: Agricultural Crop Monitoring

A national agricultural agency deployed a satellite-based crop monitoring system using Sentinel-2 imagery and deep learning classification. The system provides weekly crop type maps and yield predictions across 50 million hectares of farmland. Key performance metrics:

  • Area monitored: 50 million hectares across 200,000 farms
  • Temporal resolution: Weekly updates during growing season (March-October)
  • Classification accuracy: 91.2% overall accuracy for 12 crop types
  • Yield prediction: 8.3% mean absolute error for wheat and corn
  • Processing time: 24 hours for national coverage (10,000 tiles)
  • Early warning: Drought stress detected 3 weeks before visible symptoms
  • Economic impact: $180M in prevented crop losses through early intervention
  • Policy support: Subsidy allocation based on verified crop acreage

Key Takeaways

  • Atmospheric correction converts top-of-atmosphere radiance to surface reflectance, enabling consistent multi-temporal and multi-sensor analysis
  • NDVI and other spectral indices exploit unique spectral signatures to monitor vegetation health, water bodies, and urban expansion from space
  • Multi-spectral U-Net handles 13-band Sentinel-2 data for pixel-level land cover classification with 92%+ accuracy
  • Change detection using siamese networks and temporal attention enables monitoring of deforestation, urban growth, and disaster damage
  • Sentinel-2 provides global coverage every 5 days at 10m resolution, generating 1.6TB daily that requires automated deep learning analysis
  • Crop type mapping with 91% accuracy enables precision agriculture, yield prediction, and subsidy verification at national scale
  • Temporal consistency through radiometric normalization is critical for reliable change detection across multi-temporal satellite imagery

Need Expert Computer Vision Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement