Short answer
Bare-soil mapping is the problem of finding pixels where the substrate — soil or rock — is exposed rather than hidden under green or dry vegetation. No single threshold does it reliably, because senescent vegetation, crop residue and bright impervious surfaces all mimic soil in one index or another. The robust approach combines a low-NDVI gate (typically < 0.2–0.25) with a soil-positive index such as the Bare Soil Index (BSI) or a low NBR2, and, where vegetation is seasonal, a bare-soil composite that, per pixel, keeps the date when that pixel was barest. For geological work, bare soil is the gateway to substrate, lithology and alteration signals that vegetation otherwise blocks.
Why bare soil is hard, spectrally
Soil, dry vegetation and rock all have low NDVI, so NDVI alone cannot separate them. What distinguishes them is the SWIR:
- Bare soil / rock: relatively bright and smoothly rising into the SWIR (B11 ~1.61 µm, B12 ~2.19 µm on Sentinel-2), modulated by moisture (which darkens), clay (Al-OH absorption near 2.2 µm) and iron oxides.
- Dry / senescent vegetation and litter: also low NDVI, but shows a lignin–cellulose absorption near 2.1 µm, so SWIR2 dips relative to SWIR1. This is exactly what NBR2 = (B11 − B12)/(B11 + B12) captures.
- Impervious / built-up: bright across the board; needs an NDBI or external settlement mask.
So a good bare-soil rule is multi-condition: not green (NDVI low) and not dry-vegetation (NBR2 low / BSI high) and not built-up.
The indices, with formulas
Using Sentinel-2 band names (B2 blue, B4 red, B8 NIR, B11 SWIR1, B12 SWIR2):
NDVI = (B8 − B4) / (B8 + B4) — vegetation gate. Bare surfaces typically < 0.2–0.25.
Bare Soil Index (BSI) = ((B11 + B4) − (B8 + B2)) / ((B11 + B4) + (B8 + B2)). Designed to be high over bare soil and low over vegetation and water; ranges roughly −1 to 1, with bare soil commonly > 0.
NBR2 = (B11 − B12) / (B11 + B12). Low/negative over green and dry vegetation that has the 2.1 µm absorption, higher over bare mineral soil. A common bare-soil composite rule keeps pixels where NBR2 is low and NDVI is low — the "barest" combination.
NDBI (built-up) = (B11 − B8) / (B11 + B8) — used to exclude settlements.
Landsat 8/9 equivalents: red B4, NIR B5, blue B2, SWIR1 B6, SWIR2 B7. The same formulas apply with those band numbers.
Worked example: a multi-index bare-soil mask in GDAL
Assume Sentinel-2 L2A surface-reflectance bands resampled to 20 m and scaled to reflectance (apply the 1/10000 scale and any BOA offset first). Compute NDVI and BSI, then combine:
# NDVI
gdal_calc.py -A B08.tif -B B04.tif \
--calc="(A.astype(float)-B)/(A+B+0.0001)" --outfile=ndvi.tif --type=Float32
# BSI
gdal_calc.py -X B11.tif -R B04.tif -N B08.tif -L B02.tif \
--calc="((X+R)-(N+L))/((X+R)+(N+L)+0.0001)" --outfile=bsi.tif --type=Float32
# Bare-soil mask: low vegetation AND soil-positive
gdal_calc.py -V ndvi.tif -S bsi.tif \
--calc="((V<0.20)&(S>0.0))*1" --outfile=baresoil_mask.tif --type=Byte --NoDataValue=0
In QGIS the same logic runs through the Raster Calculator (("ndvi@1" < 0.2) AND ("bsi@1" > 0)), and you can refine the thresholds against the histogram and a few known bare and vegetated control sites.
Bare-soil compositing for seasonal cover
In temperate or agricultural belts a single date rarely shows much bare ground. The fix is temporal: stack a year (or several) of cloud-masked Sentinel-2 L2A scenes and, for each pixel, select the observation when it was least vegetated. Two common selection criteria are minimum NDVI or barest NBR2. In Google Earth Engine this is a per-pixel reducer over an ImageCollection:
var col = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterDate('2024-01-01','2024-12-31')
.filterBounds(aoi)
.map(maskS2clouds) // use the SCL band
.map(function(img){
var ndvi = img.normalizedDifference(['B8','B4']).rename('NDVI');
return img.addBands(ndvi);
});
// keep the value of each band on the date of minimum NDVI
var barest = col.qualityMosaic('NDVI').multiply(-1); // or build a per-pixel argmin
(In practice you invert NDVI so qualityMosaic selects the lowest NDVI date, or compute a per-pixel minimum explicitly.) The European GEOS3/SCMaP soil-composite methods formalise this: filter to bare-soil pixels with NDVI and NBR2 thresholds, then composite over multiple years to maximise substrate exposure. The output is a synthetic "soil reflectance" image far better suited to lithological and soil-property mapping than any single scene.
Geological use of the result
Once you have reliable bare-soil pixels, the SWIR signal over them becomes interpretable: clay ratios (B11/B12 region), iron-oxide ratios (B4/B2), and texture/brightness can be carried into substrate and alteration mapping. Bare-soil masking is therefore a precondition for honest mineral indicators — running a clay ratio over vegetated ground produces a vegetation map dressed up as geology.
Common pitfalls and why they happen
- Using NDVI alone. Dry vegetation and crop residue pass a low-NDVI gate and get mislabelled as soil; add NBR2/BSI to reject them via the 2.1 µm absorption.
- Ignoring soil moisture. Wet soil is much darker in SWIR and can read like shadow or water; a post-rain scene under-detects bare ground. Prefer dry-season imagery.
- No cloud/shadow mask. Cloud shadow has low NDVI and low brightness and leaks into bare-soil classes. Always apply the Sentinel-2 SCL or Landsat QA mask first.
- Built-up confusion. Bright impervious surfaces satisfy BSI; exclude with NDBI or a settlement layer.
- Single-date thinking in seasonal landscapes. You will badly under-map bare soil; use a multi-temporal composite.
- Skipping atmospheric correction. Indices on TOA data are scene-dependent; start from L2A/Level-2 surface reflectance.
Quality and validation
- Apply the SCL/QA cloud-shadow-water mask before any index.
- Check thresholds against a handful of known bare and known vegetated control points; adjust per region and season.
- Inspect the SWIR spectrum of "bare soil" pixels — flat-bright with possible clay/iron features confirms soil; a 2.1 µm dip flags residual dry vegetation.
- For composites, record the number of valid observations per pixel; sparse stacks give noisy results.
- Cross-check against a soil or land-cover map and document thresholds, dates and the compositing rule.
Bathyl perspective
We map bare soil as the doorway to substrate, not as an end product: a defensible multi-index mask plus multi-year compositing exposes the ground that geology depends on. Every bare-soil layer we deliver carries its thresholds, the cloud-mask source and the observation count, so downstream mineral or soil-property work rests on something auditable.
Related reading
- Cloud Masking for Earth Observation
- Atmospheric Correction for Geological Imagery
- ASTER vs Landsat for Mineral Indicators
- Remote sensing and Earth data