Earth Observation Sentinel-2 & Landsat 8-9 RGB Composite Synthesis

Satellite Band Combination Matrix & Synthesizer

Interactive spectral channel mapper for Sentinel-2 MSI and Landsat 8-9 OLI/TIRS. Explore radiometric response profiles, configure false-color RGB band composites, and generate verified Google Earth Engine and GDAL command-line recipes.

Multispectral Band Compositor & Code Generator
Sensor Selection:
Approximates natural human vision; optimal for initial landscape reconnaissance and water body delineation.
Display Channel Assigned Band Center Wavelength Native GSD
Google Earth Engine (JavaScript API)
GDAL CLI VRT & Translate Recipe
Sensor Constellation
Sentinel-2 MSI / Landsat 8-9
Dual sun-synchronous optical observation platforms providing 5-day and 8-day global revisit cycles at high radiometric quality.
Spectral Coverage
0.443 to 2.290 μm
Continuous optical sampling bridging coastal blue, chlorophyll visible absorption, red-edge transition, and dual shortwave infrared windows.
Native Spatial Sampling
10 m / 20 m / 30 m
Sentinel-2 offers 10m visible/NIR bands and 20m red-edge/SWIR bands; Landsat OLI provides 30m multispectral and 15m panchromatic bands.
Radiometric Quantization
12-bit / 14-bit Integer
Stored as scaled Level-2A surface reflectance (DN / 10,000 for Sentinel-2; scale factor 0.0000275 - 0.2 for Landsat Collection 2).

⚒ Theoretical and Mathematical Foundation

Optical remote sensing is governed by the fundamental physical principles of electromagnetic radiation (EMR) interacting with terrestrial materials. Solar irradiance passing downward through the atmosphere undergoes absorption and scattering by atmospheric gases, ozone, water vapor, and suspended aerosols. The radiation reaching the land surface is partitioned into reflected, absorbed, and transmitted EMR, described by the principle of conservation of energy:

E_incident(lambda) = E_reflected(lambda) + E_absorbed(lambda) + E_transmitted(lambda)

The spectral reflectance rho(lambda) is the dimensionless ratio of reflected radiant flux to incident radiant flux as a function of wavelength lambda:

rho(lambda) = [Phi_reflected(lambda) / Phi_incident(lambda)]

Because distinct surface materials (vegetative canopies, exposed mineral soils, artificial impervious structures, and liquid water bodies) possess diagnostic atomic and chemical structures, their spectral reflectance profiles differ substantially across the electromagnetic spectrum.

Diagnostic Spectral Signatures Across Wavelength Domains

Remote sensing instruments sample specific atmospheric transmission windows where atmospheric gas absorption is minimal:

Additive RGB Color Synthesis Theory

Standard digital displays reproduce color by stimulating the human eye's red, green, and blue retinal cones using three additive color primaries. A multispectral satellite sensor captures dozens of discrete wavelength bands beyond human vision. False-color compositing maps any three selected spectral bands to the display's Red, Green, and Blue channels:

Display Output = [ R_display(lambda_A),   G_display(lambda_B),   B_display(lambda_C) ]

By selecting bands that maximize spectral contrast between target classes, features that appear indistinguishable in natural color (such as dry bare agricultural fields versus impervious concrete pavements) become visually distinct.

Cross-Sensor Spectral Homology Between Sentinel-2 and Landsat 8-9

Spectral Region Sentinel-2 MSI Band Sentinel-2 Center & Width Landsat 8-9 OLI Band Landsat Center & Width Primary Biophysical Application
Coastal Aerosol Band 1 (B01) 443 nm (21 nm) Band 1 (B1) 443 nm (16 nm) Atmospheric correction, coastal aerosol, shallow bathymetry
Visible Blue Band 2 (B02) 490 nm (66 nm) Band 2 (B2) 482 nm (60 nm) Atmospheric haze detection, soil-vegetation differentiation
Visible Green Band 3 (B03) 560 nm (36 nm) Band 3 (B3) 561 nm (57 nm) Vegetation peak reflectance, water body delineation
Visible Red Band 4 (B04) 665 nm (31 nm) Band 4 (B4) 655 nm (37 nm) Maximum chlorophyll absorption, soil albedo boundary
Red Edge 1 / 2 / 3 Bands 5, 6, 7 705, 740, 783 nm N/A (No OLI Red Edge) N/A Canopy chlorophyll content, leaf area index, crop senescence
Near Infrared (NIR) Band 8 (Broad) / 8A 842 nm / 865 nm Band 5 (B5) 865 nm (28 nm) Biomass vigor, cell wall scattering, water surface absorption
Shortwave Infrared 1 Band 11 (B11) 1610 nm (91 nm) Band 6 (B6) 1609 nm (85 nm) Moisture stress, urban sealing, bare soil discrimination
Shortwave Infrared 2 Band 12 (B12) 2190 nm (175 nm) Band 7 (B7) 2201 nm (187 nm) Mineralogy, clay absorption, fire scar delineation

⚙ Step-by-Step Desktop GIS and Command-Line Workflow

Building multi-band composites from raw Level-2A data requires stacking individual monochromatic raster bands into a unified multi-band raster container.

Virtual Raster Compositing in QGIS Desktop

  1. Import Surface Reflectance Bands: Drag the target single-band GeoTIFF files into the QGIS Layers panel (e.g. T33TXF_B04_10m.jp2, T33TXF_B03_10m.jp2, and T33TXF_B02_10m.jp2).
  2. Open Virtual Raster Builder: Navigate to the main menu and select Raster -> Miscellaneous -> Build Virtual Raster.
  3. Select Input Layers: Click the ellipsis button and check the layers in exact channel order (Band 1 = Red, Band 2 = Green, Band 3 = Blue).
  4. Enforce Separate Bands: Check the box labeled Place each input file into a separate band. This is essential; failing to check this box creates an unstitched spatial mosaic rather than an RGB composite.
  5. Save and Style: Execute the tool. Right-click the resulting layer, select Properties -> Symbology, and set Render type to Multiband color. Adjust contrast enhancement to Stretch to MinMax using a 2% cumulative count cut.

GDAL Command-Line Compositing Recipes

Using the GDAL CLI allows processing full scenes without graphical overhead:

BASH GDAL Virtual Raster Stack Recipe
# 1. Build a false-color urban composite (B12, B11, B04) from Sentinel-2
gdalbuildvrt -separate urban_composite.vrt \
  B12_20m.jp2 \
  B11_20m.jp2 \
  B04_10m.jp2

# 2. Translate virtual raster into a Cloud-Optimized GeoTIFF with Deflate compression
gdal_translate -of COG \
  -co COMPRESS=DEFLATE \
  -co PREDICTOR=2 \
  urban_composite.vrt \
  urban_composite_cog.tif

Python Rasterio Multi-Band Stack Generation

The Python script below stacks individual reflectance bands and writes a georeferenced 3-band GeoTIFF with standardized metadata:

PYTHON create_rgb_composite.py
import rasterio
import numpy as np

# File paths for Sentinel-2 bands (e.g. Urban composite: B12, B11, B04)
band_paths = ["B12.tif", "B11.tif", "B04.tif"]

# Read metadata from first band
with rasterio.open(band_paths[0]) as src0:
    meta = src0.meta.copy()

# Update metadata for 3-band Float32 surface reflectance
meta.update({
    "count": 3,
    "dtype": "float32",
    "compress": "deflate"
})

with rasterio.open("sentinel2_urban_composite.tif", "w", **meta) as dst:
    for idx, path in enumerate(band_paths, start=1):
        with rasterio.open(path) as src:
            # Read band, cast to float, scale raw integer DN (0-10000) to reflectance (0.0-1.0)
            data = src.read(1).astype("float32") / 10000.0
            # Clip residual negative or cloud glare outliers
            data = np.clip(data, 0.0, 1.0)
            dst.write(data, idx)
            dst.set_band_description(idx, f"Channel_{idx}_{path}")

print("Multispectral composite exported successfully.")

⚠ Common Pitfalls and Field Troubleshooting

Creating false-color composites requires strict radiometric discipline. Ignoring sensor calibration factors or spatial grids degrades analytical rigor.

1. Spatial Resolution Mismatches in Sentinel-2 MSI

Sentinel-2 features bands at 10m, 20m, and 60m spatial resolutions. Attempting to build a composite combining Band 12 (20m) with Band 4 (10m) without spatial harmonization can cause GDAL or QGIS to default to the lowest resolution (20m) or throw non-matching grid dimensions errors. Always resample 20m bands to 10m using bilinear interpolation before stacking.

2. Digital Numbers vs Surface Reflectance Scale Factors

Raw satellite imagery files store surface reflectance as integer Digital Numbers (DN) to reduce file size. In Sentinel-2 Level-2A products, surface reflectance is stored as integer values scaled by 10,000 (reflectance = DN / 10000.0). However, following the ESA processing baseline change in January 2022 (PB 04.00), a radiometric offset of -1000 was introduced to accommodate negative surface reflectance values caused by dark target atmospheric overcorrection. In Landsat 8-9 Collection 2 Level-2 data, surface reflectance uses a multiplicative scale factor of 0.0000275 and an additive offset of -0.2:

Landsat 8-9 Reflectance: rho = (DN * 0.0000275) - 0.2

Failing to apply these specific sensor scale factors leads to inverted contrast, crushed black levels, or blown-out white pixels.

3. Cross-Sensor Band Number Confusion

A frequent operational trap is using identical band numbers across different satellite platforms. The table below highlights critical band index traps:

Band Index Sentinel-2 MSI Payload Landsat 8-9 OLI/TIRS Payload Consequence of Direct Substitution
Band 5 Vegetation Red Edge 1 (705 nm, 20m) Near Infrared (865 nm, 30m) Composites lose red edge specificity or display inverted vegetative colors
Band 8 Broad Near Infrared (842 nm, 10m) Panchromatic (590 nm, 15m) Composites mix grayscale panchromatic albedo with color channels
Band 10 SWIR Cirrus (1375 nm, 60m) Thermal Infrared TIRS 1 (10.9 μm, 100m) Confuses atmospheric cloud ice detection with surface kinetic temperature

❓ Frequently Asked Questions

What is the optimal band combination for mapping urban expansion and impervious surfaces? +

The SWIR2, SWIR1, and Red band combination (Bands 12, 11, 4 on Sentinel-2; Bands 7, 6, 4 on Landsat 8-9) is the gold standard for urban mapping. Artificial construction materials (asphalt, concrete, roofing membranes) exhibit elevated reflectance across both SWIR channels while absorbing in the visible, causing built structures to appear in bright lavender, magenta, and cyan hues. Surrounding agricultural soils appear in soft earth tones, and vegetated areas appear green.

Why does water appear deep blue or black in false-color infrared composites? +

Water molecules strongly absorb electromagnetic radiation at wavelengths longer than 750 nanometers. In NIR and SWIR bands, clear water reflects less than 1 percent of incident radiation. When NIR or SWIR bands are assigned to display channels in false-color composites, those channels receive near-zero digital numbers, resulting in pitch-black or very dark navy blue rendering of water bodies.

Can Landsat 8-9 thermal bands be composited with optical bands? +

Yes. Band 10 (Thermal Infrared TIRS 1) measures emitted thermal radiation rather than reflected solar EMR. Compositing Band 10 with optical bands (e.g. Band 10 as Red, Band 5 NIR as Green, Band 4 Red as Blue) creates an urban heat island visualization where high surface temperatures appear bright red while cool, vegetated canopies appear green. Note that TIRS data has a native spatial resolution of 100 meters, resampled to 30 meters by the USGS.

How does the Sentinel-2 Harmonized collection in Google Earth Engine handle processing baselines? +

In January 2022, the European Space Agency introduced Processing Baseline 04.00, which added an additive offset of -1000 DN (-0.1000 reflectance) to all Sentinel-2 Level-2A surface reflectance bands. The COPERNICUS/S2_SR_HARMONIZED collection in Google Earth Engine automatically detects this baseline shift and shifts the pixel values back to match pre-2022 radiometric scales, ensuring seamless multi-year time-series analysis without artificial discontinuities.

What causes pan-sharpening artifacts in Landsat 8-9 composites? +

Pan-sharpening fuses the 15-meter Band 8 Panchromatic band with 30-meter multispectral bands (Bands 2, 3, 4) to produce higher-resolution color imagery. However, because Band 8 covers 500 to 680 nanometers (green and red), it lacks sensitivity to the blue spectrum. Fusing Band 8 with Blue can introduce color fringe distortion, spectral bleeding along high-contrast water-land boundaries, and slight radiometric alteration that degrades spectral index calculations.