Alteration mapping
Research question 2a: Can alteration zones be read from satellite alone, without a ground-truthed spectral library?
Short answer: Yes for a relative anomaly, no for a mineral identity — and the gap between those two is the whole story.
1. Assemblage first: orogenic, not epithermal
Most "alteration mapping with satellite" tutorials are built around epithermal gold systems, whose advanced-argillic halos carry alunite, kaolinite, and dickite — minerals with sharp, separable Al-OH absorptions near 2.16–2.20 µm that ASTER maps beautifully. That is the canonical story. It is the wrong story for a greenstone belt.
Orogenic (mesothermal / lode) gold forms deeper, in metamorphosed greenstone, along shears and faults. Its alteration assemblage is:
| Halo zone | Minerals | Diagnostic absorption | Sensor that can see it |
|---|---|---|---|
| Phyllic / sericitic (proximal) | sericite, muscovite, illite | Al-OH ~2200 nm | ASTER SWIR b5–b7; HSI; S2 only coarsely |
| Propylitic / carbonate (distal, listwaenite) | chlorite, epidote, calcite / dolomite / ankerite | Mg-OH / carbonate ~2300–2350 nm | ASTER SWIR b7–b9; HSI; not S2 |
| Silicification | quartz | TIR emissivity minimum ~9 µm (no SWIR feature) | ASTER TIR (post-2008 OK); HSI: no |
| Gossan / sulphide (oxidised) | Fe-oxides | Fe³⁺ VNIR | S2 / Landsat — see iron-oxide arm |
Two consequences for this analysis: the carbonate / Mg-OH 2300–2350 nm feature is at least as important as the Al-OH feature (carbonate alteration and listwaenite are classic orogenic-gold vectors), and silica has no shortwave feature at all — it shows only as a TIR emissivity low, which ASTER's surviving TIR detector can read.
Getting the assemblage wrong is the most common way these analyses go silently wrong.
2. Why band ratios need no calibrated library
A spectral library is needed when you want to match a pixel's full spectrum to a named mineral — shape-fitting against reference curves. That is identity, and it requires calibrated, continuum-removed reflectance compared to known endmembers.
A band ratio asks a smaller, library-free question: within this one scene, is band X relatively brighter or darker than band Y at this pixel?
- It compares the scene to itself, so absolute radiometric calibration to a library is unnecessary — the ratio is dimensionless.
- It divides out first-order topographic shading and illumination (both bands dim together on a shaded slope), which matters in steep greenstone terrain.
- A mineral with an absorption in band Y and a shoulder in band X produces a high X/Y ratio relative to the rest of the scene, flagging an anomaly without ever naming the mineral.
Ratios give you a relative alteration anomaly map for free, with no library and no ground truth. What they cannot give you is which mineral — that ceiling is set by how many, and how narrow, the sensor's SWIR bands are.
3. Sentinel-2: a coarse proxy and its hard limit
S2 was designed for vegetation and land cover, not geology. In the SWIR it has only two bands, both at 20 m:
B11 ~1610 nm (1565–1655)
B12 ~2190 nm (2100–2280)
The standard relative clay/hydroxyl ratio is B11 / B12 — the two-SWIR-band analogue of the Landsat TM 5/7 clay ratio. It works, but note what B12's window swallows:
Implemented indices
| Index | Formula | Keys on | Honest read |
|---|---|---|---|
| Clay / hydroxyl | B11 / B12 | relative SWIR hydroxyl anomaly | coarse, undifferentiated; clay-rich laterite lights up like real alteration |
| Ferric–clay composite | B04 / B11 plotted against B11/B12 | two relative axes side by side | lets the holder eyeball "iron-ish vs clay-ish" without fusing into one ambiguous score |
Bands fetched: B04, B08, B11, B12, SCL. B04 and B08 build the NDVI vegetation mask; SCL removes cloud, shadow, cirrus, saturated, and no-data pixels (classes 0, 1, 3, 8, 9, 10).
# research/mineral-prospecting/alteration-mapping/s2_alteration.py
import folia
# fetch S2 L2A bands over the claim AOI
ds = folia.fetch(
"@esa/sentinel-2/l2a",
aoi=AOI_GEOJSON,
bands=["B04", "B08", "B11", "B12", "SCL"],
date_range=("2023-01-01", "2024-12-31"),
cloud_cover_max=20,
)
# relative clay/hydroxyl ratio (library-free, self-referential)
clay_hydroxyl = ds["B11"] / ds["B12"]
# vegetation mask (suppress false positives over dense canopy)
ndvi = (ds["B08"] - ds["B04"]) / (ds["B08"] + ds["B04"])
clay_hydroxyl = clay_hydroxyl.where(ndvi < 0.4)
The S2 answer to Q2a: yes, you get a free, always-available, library-free screening layer for clay/hydroxyl alteration. It is coarse and ambiguous — a "look here first," never a mineral map. This is the floor; ASTER and imaging spectroscopy are the ceiling.
4. ASTER: the right multispectral tool (pre-2008 SWIR only)
ASTER's six SWIR bands at 30 m were designed to straddle exactly the orogenic alteration features S2 blurs together:
ASTER SWIR band centres (µm):
b4 1.65 b5 2.165 b6 2.205 b7 2.26 b8 2.33 b9 2.395
└─Al-OH──┘ └──Mg-OH / carbonate──┘
Al-OH / phyllic index (proximal sericite halo)
Rowan and Mars (2003) phyllic ratio: b5 / b6 — high where the b6 trough marks the Al-OH absorption at 2.205 µm. Variants include b7 / b6 and (b5 + b7) / b6.
Carbonate / Mg-OH / chlorite index (distal halo, listwaenite)
Rowan and Mars (2003) carbonate index: (b6 + b9) / (b7 + b8) — high over the 2.3–2.35 µm carbonate/Mg-OH absorption straddled by b8. A related index, b8 / b9, targets Mg-OH and chlorite more specifically.
These are relative ratios, not mineral maps — the same logic as §2.
# research/mineral-prospecting/alteration-mapping/aster_alteration.py
import numpy as np
import rasterio
from rasterio.windows import from_bounds
import folia
# folia: discovery and URL signing (ASTER SWIR is one 6-band COG, not per-band)
# folia.fetch() returns only band 1 of a multiband COG, so we sign then read
# directly via rasterio — see implementation note below
items = folia.catalog.items_for_aoi(
"@nasa/aster/l1t",
aoi=AOI_GEOJSON,
date_range=("2000-01-01", "2008-01-01"),
)
swir_url = folia.catalog._sign_url(items[0].assets["SWIR"].href)
with rasterio.open(swir_url) as src:
window = from_bounds(*AOI_BOUNDS_UTM, transform=src.transform)
# bands 1–6 of the SWIR COG = ASTER b4–b9 in order
arr = src.read(window=window).astype(float)
arr[arr == 0] = np.nan # mask DN=0 no-data
b4, b5, b6, b7, b8, b9 = arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]
aloh = b5 / b6 # Al-OH / phyllic (sericite)
carbonate = (b6 + b9) / (b7 + b8) # carbonate / Mg-OH
mgoh = b8 / b9 # Mg-OH / chlorite
folia.fetch() returns only band 1 of a multiband COG. ASTER ships its SWIR data as a single 6-band COG, so the script uses folia for discovery and URL signing, then performs the windowed multiband read directly via rasterio. This is a genuine reader gap for multiband COGs, consistent with the known Python/TS COG-reader divergence in the platform. A ticket to handle multiband reads natively is warranted if multiband COGs become common.
ASTER's ceiling: even six SWIR bands discriminate mineral groups (Al-OH vs Mg-OH/carbonate), not species (muscovite vs illite vs phengite). For an arbitrary claim, a usable pre-2008 SWIR scene is roughly a coin-flip; this claim is fortunate.
5. Pre-2008 ASTER coverage of this claim
aster_alteration.py queries @nasa/aster/l1t on the Microsoft Planetary Computer, whose ASTER subset spans approximately 2000–2006 — entirely within the usable SWIR window. Five pre-2008 scenes intersect the AOI, all carrying the SWIR asset. The 2005-11-13 scene was selected and processed.
| Date | Scene ID |
|---|---|
| 2000-08-22 | AST_L1T_00308222000082657_20150411060450 |
| 2001-06-27 | AST_L1T_00306272001204859_20170807204458 |
| 2003-01-26 | AST_L1T_00301262003081917_20150426232615 |
| 2003-11-19 | AST_L1T_00311192003081243_20150502022320 |
| 2005-11-13 | AST_L1T_00311132005204014_20170801221104 (used) |
Outputs are relative Al-OH and carbonate/Mg-OH anomaly ratios written to outputs/aster_*.tif and outputs/aster_coverage.json. They are not mineral maps. The right next step is to overlay the Al-OH and carbonate highs on the structure-lineaments layer and the holder's field notes — alteration on a mapped structure is a far stronger vector than alteration in isolation.
6. Imaging spectroscopy: the true ceiling, and EMIT coverage
The honest top of the ladder is imaging spectroscopy: hundreds of contiguous narrow bands that resolve the shape of the 2200 nm and 2300–2350 nm features well enough to identify sericite vs chlorite vs carbonate by spectral-feature fitting.
EMIT (NASA, on the ISS, approximately 285 bands at 7.5 nm, 60 m) images within approximately ±52° latitude. emit_coverage_check.py queries @nasa/emit/l2a-reflectance via the open STAC browse API (no download).
# research/mineral-prospecting/alteration-mapping/emit_coverage_check.py
import folia
items = folia.catalog.search(
"@nasa/emit/l2a-reflectance",
aoi=AOI_GEOJSON,
date_range=("2022-01-01", "2026-12-31"),
)
# prints granule ids, dates, cloud fraction
# writes outputs/emit_coverage.json
# no byte download — EMIT L2A is behind Earthdata Login
Seven EMIT L2A granules intersect the AOI (2024–2026); three are cloud-free:
| Date | Cloud cover | Granule ID |
|---|---|---|
| 2024-02-23 | 0 % | EMIT_L2A_RFL_001_20240223T115131_2405408_006 |
| 2024-03-02 | 4 % | EMIT_L2A_RFL_001_20240302T084202_2406206_006 |
| 2024-05-02 | 0 % | EMIT_L2A_RFL_001_20240502T083431_2412305_056 |
| 2024-11-04 | 0 % | EMIT_L2A_RFL_001_20241104T065732_2430904_013 |
| 2024-11-12 | 100 % | EMIT_L2A_RFL_001_20241112T132436_2431708_041 |
| 2025-01-15 | 83 % | EMIT_L2A_RFL_001_20250115T120359_2501507_030 |
| 2026-03-02 | 100 % | EMIT_L2A_RFL_001_20260302T074345_2606105_019 |
outputs/emit_coverage.json.
PRISMA (ASI) and EnMAP (DLR) would also resolve this assemblage. Both are tasked sensors (you request an acquisition; archives are thin and partly access-gated) and neither exposes an open STAC catalog to probe the way EMIT does. They are named here as the true tool, not a fetchable layer.
7. EMIT hyperspectral: the alteration ceiling, tested
The coverage check in §6 is only a promise. Here it is cashed: one real EMIT L2A reflectance granule, pulled over the claim, orthorectified, and run through continuum-removal band-depth mapping at the orogenic alteration features. The granule is EMIT_L2A_RFL_001_20240223T115131_2405408_006 (NASA EMIT on the ISS, 2024-02-23, 0% cloud, ~60 m pixels, 240 of 285 bands kept after dropping water-vapor/detector windows). It was the lowest-cloud of the seven intersecting granules.
The honest headline is a caveat, and that caveat is the result.
The one feature whose band depth was decoupled from NDVI (r = -0.03) in the wet scene is a faint Al-OH absorption near 2200 nm, shallow (mean depth 0.04, max 0.11) and concentrated in the NW corner of the AOI at about 3% of pixels. At the time of the wet-season analysis, its vegetation-independence made it a candidate sub-canopy white-mica signal. The dry-season check in the subsection below resolved that question: it is a soil/litter artifact. The figure below shows the wet-season signal as it appeared before that check.
The vegetation-aware classification reports vegetation-dominated for 96.6% of pixels, a faint sub-canopy Al-OH anomaly for 3.4%, and chlorite/carbonate, kaolinite, and mixed alteration at exactly 0%. The apparent carbonate signal was attributed to canopy and withheld. The 3.4% Al-OH class was later identified as a soil/litter artifact by the dry-season check.
Why this still matters. EMIT did not hand back a mineral map; the canopy denied that, and the dry-season check confirmed the denial. What EMIT did do, and what Sentinel-2's single wide B12 band and ASTER's broad SWIR ratios physically cannot, is resolve feature shapes finely enough to diagnose why a signal is not mineralogy. The negative result is only diagnosable at this precision because EMIT separates feature position and shape, not just band depth. That diagnostic capability is the ceiling the lower rungs lack, and it is what made the across-season negative a defensible conclusion rather than an open question.
The full method, granule choice, and every caveat are in research/mineral-prospecting/emit-hyperspectral/README.md.
Dry-season check: the hint was an artifact
The §7 result carries one named caveat: the 2024-02-23 granule is peak wet-season, and the faint NW Al-OH signal that survived the vegetation test could still be a canopy-masked sericite halo rather than a true absence. The obvious lever was a dry-season acquisition: miombo woodland is leaf-off roughly May to October, so a November granule might expose ground and reveal real alteration mineralogy the canopy hid.
The driest available cloud-free granule (EMIT_L2A_RFL_001_20241104T065732_2430904_013, 2024-11-04, 0 % cloud over the AOI) was pulled and run through the identical granule-agnostic pipeline. Full comparison: research/mineral-prospecting/emit-hyperspectral/COMPARISON.md.
The dry scene exposed materially more ground. NDVI median fell from 0.73 to 0.58; 506 pixels (16.6 %) dropped below NDVI 0.40 (sparse vegetation), where the wet scene had zero. For the first time there were genuinely exposed pixels: 49 below NDVI 0.30 with SWIR(2000 nm) reflectance ~0.30, confirming bright substrate, not shadow. The leaf-off experiment worked as a vegetation lever.
It did not decouple a mineral signal from vegetation. Three independent diagnostics show that the Al-OH "depth" strengthening over bare ground is a continuum-removal artifact of bright dry soil and non-photosynthetic vegetation (litter, senescent leaves), not a localized 2200 nm absorption:
The Mg-OH/carbonate signal told the same story: its NDVI correlation weakened from r = +0.73 to +0.31 as the canopy thinned, but it never decoupled into a mineral. Over the 49 genuinely bare pixels the Mg-OH depth was lower than the scene average, and its position stayed near 2307 nm (the litter/ligno-cellulose slope, not the ~2335 nm carbonate or chlorite diagnostic). No carbonate or chlorite story emerged in either scene.
TETRACORDER was correctly not run. The gating rule requires bare or sparse ground with absorptions decoupled from NDVI. The dry scene meets the first condition (49 bare pixels) but fails the second: the apparent Al-OH decoupling (r = -0.76) is the brightness/slope artifact diagnosed above, not a real absorption. Running TETRACORDER here would have forced it onto the only available path (single splib07 reference, the port's weaker variant) over a 97 %-vegetated, litter-dominated surface it was never validated on, labelling the ~45 artifact pixels with discrete mineral names that carry no validation basis. Band-depth plus feature-position plus two-sided shape analysis is the defensible method, and it is precisely what caught the artifact.
The verdict across both seasons: no alteration mineralogy detected in either the wet or the dry scene. The original faint NW phyllic hint is not corroborated; it is best understood as the bright-soil/dry-litter artifact the dry scene exposed. The Al-OH figure above (§7) is retained for transparency and to show the raw wet-season signal, but it should be read as an artifact now identified as such, not as a sericite indicator.
The confirmed negative across both seasons is itself a strong result: it is not a wet-season accident. The remaining lever for this site is finer-resolution true bare-rock exposure (mine faces, road cuts, stripped ground) or in-situ field spectra and samples that can calibrate a library. Structure (DEM) remains the robust free layer.
8. Literature
- Ninomiya, Y. (2003). "A stabilized vegetation index and several mineralogic indices defined for ASTER VNIR/SWIR/TIR data." IGARSS. Defines the OH-bearing, carbonate, and quartz/silica indices used industry-wide.
- Rowan, L.C. and Mars, J.C. (2003). "Lithologic mapping in the Mountain Pass, California area using ASTER data." Remote Sensing of Environment 84(3): 350–366. The widely cited Al-OH (b5/b6) and carbonate ((b6+b9)/(b7+b8)) ratio recipes.
- Mars, J.C. and Rowan, L.C. (2006). "Regional mapping of phyllic- and argillic-altered rocks in the Zagros magmatic arc, Iran, using Advanced Spaceborne Thermal Emission and Reflection Radiometer (ASTER) data and logical operator algorithms." Geosphere 2(3): 161–186. Combines SWIR ratios into decision-rule alteration maps.
- van der Werff, H. and van der Meer, F. (2016). "Sentinel-2 for mapping iron absorption feature parameters." Remote Sensing 8(12): 1035. Quantifies where S2's coarse SWIR sampling limits mineral specificity vs ASTER and HSI — the basis for §3's ceiling.
9. The honest answer
You can map an alteration anomaly from satellite alone with no spectral library, because band ratios are relative, self-referential contrasts that need no calibrated endmembers. What you cannot do with free Sentinel-2 is identify the alteration mineral: its two coarse SWIR bands fuse the Al-OH (2200 nm) and carbonate/Mg-OH (2300–2350 nm) features into one undifferentiated number. Real mineral discrimination needs more SWIR resolution: ASTER's six SWIR bands (available here on five pre-2008 scenes) separate the Al-OH and carbonate halos into distinct relative indices; and imaging spectroscopy — EMIT resolves feature shapes finely enough to diagnose why an apparent signal is or is not mineralogy.
Over this site, EMIT delivered a confirmed negative across both the wet (2024-02-23) and dry (2024-11-04) seasons. No alteration mineralogy was detected in either scene. The faint wet-scene Al-OH anomaly in the NW corner was shown by the dry-season analysis to be a bright-soil and dry-litter artifact. That diagnosis was only possible because EMIT resolved feature position and shape; the same signal would have been unresolvable at ASTER's spectral sampling, let alone Sentinel-2's. The confirmed negative is itself the result, and it is a stronger result than an unverified hint.
Across all three sensors, the output is a where-to-walk-first layer to be cross-checked against mapped structures and ground samples. No pixel — S2, ASTER, or EMIT — should be read as "this is sericite." None of them should be read as "this is gold."