Planetary-scale answers, unlocked.
A Hands-On Guide for Working with Large-Scale Spatial Data. Learn more.
Authors
Hyperspectral imaging records a continuous spectrum for every pixel. A typical sensor records 200 to 450 narrow bands, each 5 to 10 nanometers wide, across visible, near-infrared, and shortwave infrared light. Multispectral imagery records 3 to 15 broad bands. The narrow bands let analysts identify minerals, crops, and gases by their absorption features, the wavelengths a material absorbs. This article tests one claim at Cuprite, Nevada. A ratio of two Sentinel-2 bands can map where alteration minerals are (minerals formed where hot fluids changed the rock). Its twelve bands cannot show which minerals they are.
Hyperspectral imaging, also called imaging spectroscopy, measures the spectrum of light reflected from each point in a scene. Alexander Goetz, Gregg Vane, Jerry Solomon, and Barrett Rock introduced it for Earth observation in Imaging Spectrometry for Earth Remote Sensing (Science, 1985). They showed that a reflectance spectrum sampled finely enough to record its absorption features identifies the surface material in each pixel.
A hyperspectral image is a data cube. Two dimensions are the picture and the third is wavelength. A single pixel is a full reflectance curve: the share of light the surface reflects at each wavelength. The defining property is narrow, contiguous bands, so the spectrum has no gaps and absorption features stay intact. Covering 400 to 2,500 nm at 7 to 10 nm spacing takes 200 to 300 bands.
A hyperspectral imaging camera captures a cube in one of a few ways. A pushbroom (line-scan) spectrometer images one strip at a time through a slit. A grating or prism spreads the strip's light by wavelength onto a two-dimensional detector. The image builds as the aircraft, satellite, or conveyor moves. Other designs scan wavelength with tunable filters, or record a whole cube at once with snapshot optics. Orbital spectrometers such as EMIT (Earth Surface Mineral Dust Source Investigation) and EnMAP (Environmental Mapping and Analysis Program) are pushbroom designs. The Airborne Visible/Infrared Imaging Spectrometer (AVIRIS) of NASA's Jet Propulsion Laboratory (JPL) has flown since 1987. It was the first imaging spectrometer to cover the solar reflected spectrum from 400 to 2,500 nm, in 224 contiguous channels at 10 nm intervals (Green et al., 1998).
From orbit or aircraft, the sensor measures radiance, the light that reaches it through the atmosphere. Atmospheric correction converts radiance to surface reflectance. Water vapour and other gases absorb light in narrow bands next to surface features. So the correction fits atmosphere and surface together, as in David Thompson and colleagues' optimal estimation method (Remote Sensing of Environment, 2018). Scenes are stored as multi-band rasters with one band per wavelength. The file format is GeoTIFF, NetCDF, HDF5 (Hierarchical Data Format version 5), or ENVI, the format of the ENVI image analysis software. EMIT's reflectance product, for example, is NetCDF4 at 60 m with 285 bands from 381 to 2,493 nm (NASA Earthdata).
Molecules absorb light at wavelengths set by their structure: electrons moving between energy levels, and chemical bonds vibrating. In the shortwave infrared, the 2,000 to 2,400 nm window holds absorption features of clays, micas, sulfates, carbonates, and methane:
These features sit 40 to 90 nm apart, so telling them apart takes bands a few nanometers wide. Reference spectra come from laboratory libraries such as the U.S. Geological Survey (USGS) Spectral Library Version 7 (Kokaly et al., 2017). It holds reflectance spectra of thousands of materials, from minerals to plants.
Spectral matching, spectral unmixing, and target detection turn a cube into a map. Spectral matching compares each pixel with library spectra. Spectral unmixing estimates the fractions of pure materials inside a mixed pixel. Target detection searches for one known signature, such as a gas plume, against an unknown background. The research section below traces the papers behind each.
Sentinel-2 has 13 bands and Landsat has 11. They image every land surface every few days, which suits monitoring and land cover classification. Each band sums any absorption feature inside it into a single value. Hyperspectral sensors have larger pixels and image less often, in exchange for spectral detail. Many workflows use hyperspectral imagery to identify materials and calibrate, and multispectral imagery to monitor. Both belong to the wider field of Earth observation data. In the Havasu catalog, Sentinel-2 seasonal mosaics and the U.S. Department of Agriculture's National Agriculture Imagery Program (NAIP) aerial imagery are the multispectral side of that pairing.
Mission sources: Hyperion (Pearlman et al., 2003), PRISMA (Cogliati et al., 2021), EnMAP at DLR, EMIT at NASA Earthdata, and Tanager at Planet. ESA's CHIME will add routine hyperspectral observation from 400 to 2,500 nm to the Copernicus programme.
Hyperspectral imaging is used on satellites, aircraft, and factory lines:
How much of Cuprite's mineral detail does a multispectral scene record? The district sits about 14 km south of Goldfield on US Highway 95. The Sentinel-2 L2A scene index in Wherobots Open Data lists every scene and its band files. Fourteen scenes from June to September 2024 cover Cuprite with less than 1% cloud. The clearest, S2A_11SMB_20240616, has 0.08%.
Two WherobotsDB queries read these sources:
wherobots_open_data.sentinel2.l2a_source_items
One engine reads the rasters, builds the vector cells, and computes the statistics.
This query reads each band's centre wavelength and width from the scene metadata. It opens each band file as an out-db raster with RS_FromPath. An out-db raster stays in its file; the row holds a pointer to it. It then summarises each band over a 10.6 by 10 km box on the district, from 117.26 to 117.14°W and 37.49 to 37.58°N, with RS_ZonalStatsAll. Only the tiles under the box are read. The array lists all 12 band files, and RS_ScaleX reads each band's pixel size.
WITH s AS ( SELECT explode(array( named_struct('band', 'coastal', 'wl', assets.coastal.`eo:bands`[0].center_wavelength, 'fwhm', assets.coastal.`eo:bands`[0].full_width_half_max, 'href', assets.coastal.href), named_struct('band', 'blue', 'wl', assets.blue.`eo:bands`[0].center_wavelength, 'fwhm', assets.blue.`eo:bands`[0].full_width_half_max, 'href', assets.blue.href), named_struct('band', 'green', 'wl', assets.green.`eo:bands`[0].center_wavelength, 'fwhm', assets.green.`eo:bands`[0].full_width_half_max, 'href', assets.green.href), named_struct('band', 'red', 'wl', assets.red.`eo:bands`[0].center_wavelength, 'fwhm', assets.red.`eo:bands`[0].full_width_half_max, 'href', assets.red.href), named_struct('band', 'rededge1', 'wl', assets.rededge1.`eo:bands`[0].center_wavelength, 'fwhm', assets.rededge1.`eo:bands`[0].full_width_half_max, 'href', assets.rededge1.href), named_struct('band', 'rededge2', 'wl', assets.rededge2.`eo:bands`[0].center_wavelength, 'fwhm', assets.rededge2.`eo:bands`[0].full_width_half_max, 'href', assets.rededge2.href), named_struct('band', 'rededge3', 'wl', assets.rededge3.`eo:bands`[0].center_wavelength, 'fwhm', assets.rededge3.`eo:bands`[0].full_width_half_max, 'href', assets.rededge3.href), named_struct('band', 'nir', 'wl', assets.nir.`eo:bands`[0].center_wavelength, 'fwhm', assets.nir.`eo:bands`[0].full_width_half_max, 'href', assets.nir.href), named_struct('band', 'nir08', 'wl', assets.nir08.`eo:bands`[0].center_wavelength, 'fwhm', assets.nir08.`eo:bands`[0].full_width_half_max, 'href', assets.nir08.href), named_struct('band', 'nir09', 'wl', assets.nir09.`eo:bands`[0].center_wavelength, 'fwhm', assets.nir09.`eo:bands`[0].full_width_half_max, 'href', assets.nir09.href), named_struct('band', 'swir16', 'wl', assets.swir16.`eo:bands`[0].center_wavelength, 'fwhm', assets.swir16.`eo:bands`[0].full_width_half_max, 'href', assets.swir16.href), named_struct('band', 'swir22', 'wl', assets.swir22.`eo:bands`[0].center_wavelength, 'fwhm', assets.swir22.`eo:bands`[0].full_width_half_max, 'href', assets.swir22.href) )) AS b FROM wherobots_open_data.sentinel2.l2a_source_items WHERE year = 2024 AND month = 6 AND id = 'S2A_11SMB_20240616_0_L2A' ), z AS ( SELECT b, RS_FromPath(b.href) AS r, RS_ZonalStatsAll(RS_FromPath(b.href), ST_SetSRID(ST_PolygonFromEnvelope(-117.26, 37.49, -117.14, 37.58), 4326), 1) AS z FROM s ) -- stored values are reflectance x 10,000. The STAC record lists a -0.1 offset -- that these files do not carry (the darkest pixels would go negative with it) SELECT b.band, ROUND(b.wl * 1000) AS centre_nm, -- STAC lists micrometres ROUND(b.fwhm * 1000) AS width_nm, ROUND(RS_ScaleX(r)) AS pixel_m, ROUND(z.mean * 0.0001, 3) AS mean_reflectance, z.count AS pixels FROM z
The band files store reflectance times 10,000 and carry no scale metadata. RS_FromPath returns the stored values, so the query multiplies the mean by 0.0001. The scene's STAC catalog record also lists an offset of minus 0.1, which these files do not carry. In the B02 file, 1% of pixels have stored values below 790, and the offset would turn them into negative reflectance. Each mean spans the whole box, so it blends altered and unaltered ground.
Reflectance rises through the visible and near-infrared, peaks at 0.370 in B11, and drops to 0.306 in B12, a ratio of 1.21. The drop means that some material absorbs light between 2,069 and 2,311 nm, the span of B12. Alunite, kaolinite, and buddingtonite all absorb inside that span, so twelve values are too few to separate them.
The second query maps where that absorption is strongest. It cuts the box into 60 by 45 cells of 0.002 degrees, about 176 by 222 m each. For each cell, RS_ZonalStats computes the means of B11 and B12. It also computes the minimum and maximum of the scene classification layer (SCL), a per-pixel class such as cloud, water, or bare ground:
WITH s AS ( SELECT RS_FromPath(assets.swir16.href) AS r11, RS_FromPath(assets.swir22.href) AS r12, RS_FromPath(assets.scl.href) AS rscl FROM wherobots_open_data.sentinel2.l2a_source_items WHERE year = 2024 AND month = 6 AND id = 'S2A_11SMB_20240616_0_L2A' ), g AS ( SELECT i, j, ST_SetSRID(ST_PolygonFromEnvelope( -117.26 + i * 0.002, 37.49 + j * 0.002, -117.26 + (i + 1) * 0.002, 37.49 + (j + 1) * 0.002), 4326) AS cell FROM (SELECT explode(sequence(0, 59)) AS i) a CROSS JOIN (SELECT explode(sequence(0, 44)) AS j) b ), c AS ( SELECT g.i, g.j, RS_ZonalStats(s.r11, g.cell, 1, 'mean') AS m11, RS_ZonalStats(s.r12, g.cell, 1, 'mean') AS m12, RS_ZonalStats(s.rscl, g.cell, 1, 'min') AS scl_min, RS_ZonalStats(s.rscl, g.cell, 1, 'max') AS scl_max FROM g CROSS JOIN s ) -- stored values are reflectance x 10,000. The STAC record lists a -0.1 offset -- that these files do not carry (the darkest pixels would go negative with it) SELECT i, j, scl_min, scl_max, m11 * 0.0001 AS b11, m12 * 0.0001 AS b12, m11 / m12 AS b11_b12_ratio FROM c
In all 2,700 cells, the SCL minimum and maximum are both class 5, bare and unvegetated. The usual cloud mask keeps classes 4 and 5, vegetation and bare ground, so it keeps every cell. The mask and the two bands use the same cell geometry, so they line up.
The ratio runs from 1.02 to 1.64 with a median of 1.19. A fixed threshold such as 1.5 keeps only 60 cells. So the map uses the top 10% of cells, the 270 with a ratio above 1.36. They fall into two groups of columns: 157 cells between about 117.23 and 117.20°W and 113 cells between about 117.19 and 117.16°W. The three columns between, from about 117.196 to 117.190°W, have none. The two groups match the two alteration centres that straddle US Highway 95.
A Sentinel-2 ratio narrows the search to a tenth of the district. Telling alunite from kaolinite inside those cells takes an imaging spectrometer such as EMIT, EnMAP, or Tanager. The grid query is also a coarse form of spectral-spatial analysis, which uses neighbouring pixels along with each pixel's spectrum. Averaging over a 176 by 222 m cell loses detail and reduces noise.
The same functions run on a 224- or 285-band cube. RS_NumBands reports how many bands a scene holds, RS_Band extracts a subset, and RS_MapAlgebra applies an expression across any bands by index. Scenes load as out-db rasters, so a query reads only the bands and tiles it uses (the out-of-database raster architecture behind WherobotsDB). Havasu stores scenes as rows. RasterFlow runs PyTorch models over multi-band mosaics through its bring-your-own-rasters path. Its inference config takes a list of band indices as features.
Many hyperspectral results are joined to vector features such as facilities and parcels. Because a few Four Corners sources emit most of the gas, mitigation depends on tying each plume to the facility under it. Thorpe's EMIT study does that across sectors. WherobotsDB runs raster and vector data in one engine; most stacks pick one. A raster-derived mineral zone or plume polygon joins to claims, well pads, or parcels in the same query with a spatial join.
Imaging spectrometry began with Goetz and colleagues' 1985 paper and AVIRIS. The work since has gone into four problems: matching spectra to materials, unmixing mixed pixels, detecting targets such as methane, and classifying hundreds of correlated bands with few labels.
The first analysis tools compared each pixel with laboratory spectra. Fred Kruse and colleagues' Spectral Image Processing System (Remote Sensing of Environment, 1993) introduced the spectral angle mapper. It treats two spectra as vectors and measures the angle between them, so overall brightness does not change the match. Clark and colleagues' Tetracorder (2003) fits the shape of each absorption feature against a library with expert rules. Swayze's Cuprite maps were made with it. Both depend on reference libraries such as the USGS spectral library.
A 30 or 60 m pixel at Cuprite covers outcrop, soil, and desert surfaces. Its spectrum is a blend of theirs. Nirmal Keshava and John Mustard set out the linear mixing model and its variants in Spectral unmixing (IEEE Signal Processing Magazine, 2002). The model treats a pixel's spectrum as a weighted sum of pure-material spectra. Joseph Boardman, Fred Kruse, and Robert Green's pixel purity index (1995) ranks the purest pixels as candidate endmembers, the pure materials in a scene. Dar Roberts and colleagues' multiple endmember spectral mixture analysis (MESMA, Remote Sensing of Environment, 1998) lets the endmember set change from pixel to pixel. José Bioucas-Dias, Antonio Plaza, and colleagues' hyperspectral unmixing overview (IEEE JSTARS, 2012) compares the geometric, statistical, and sparse-regression approaches. A feature smaller than a pixel appears only as a fraction of its spectrum, so pixel size affects every result.
Target detection looks for one known signature against an unknown background. Joseph Harsanyi and Chein-I Chang's orthogonal subspace projection (IEEE TGRS, 1994) removes known background signatures from each pixel before matching. Methane is the leading application. David Thompson and colleagues ran real-time methane detection onboard AVIRIS-NG (Atmospheric Measurement Techniques, 2015), the instrument behind the Four Corners survey. Daniel Cusworth and colleagues published Potential of next-generation imaging spectrometers to detect and quantify methane point sources from space (Atmospheric Measurement Techniques, 2019). They showed that orbital spectrometers with 7 to 10 nm resolution in the 2,200 to 2,400 nm window could detect single point sources of about 100 kg per hour. EMIT's source attribution in 2023 put that into practice from orbit.
G. F. Hughes studied classifier accuracy in On the mean accuracy of statistical pattern recognizers (IEEE Transactions on Information Theory, 1968). He showed that, for a fixed number of training samples, accuracy rises and then falls as measurements are added. Hyperspectral data is the textbook case, with hundreds of correlated bands and few labelled pixels. That is why Indian Pines is still a standard benchmark. Band selection, unmixing, and principal component analysis, which combines correlated bands into a few new ones, reduce the dimensions.
Early classifiers treated each pixel as an isolated spectrum. Farid Melgani and Lorenzo Bruzzone applied support vector machines to hyperspectral classification (IEEE TGRS, 2004). Mathieu Fauvel, Yuliya Tarabalka, Jón Atli Benediktsson, Jocelyn Chanussot, and James Tilton reviewed spectral-spatial classification (Proceedings of the IEEE, 2013), which uses each pixel's neighbourhood alongside its spectrum. Yushi Chen and colleagues brought deep learning to hyperspectral classification (IEEE JSTARS, 2014), and convolutional networks are now trained on spectral and spatial features together. Foundation models, pretrained on large unlabelled datasets, are one response to the label shortage. Danfeng Hong and colleagues' SpectralGPT (IEEE TPAMI, 2024) is pretrained on one million spectral images. Its 3D tokens cover space and spectrum.
Naoto Yokoya, Claas Grohnfeldt, and Jocelyn Chanussot compared ten hyperspectral and multispectral fusion methods (IEEE Geoscience and Remote Sensing Magazine, 2017). They combine fine multispectral pixels with fine hyperspectral bands. The Cuprite walkthrough is the simplest form of the idea. The Sentinel-2 ratio gives the location, and a hyperspectral cube gives the mineral.
Kruse, Boardman, and Huntington's comparison of EO-1 Hyperion with airborne data (IEEE TGRS, 2003) found Hyperion useful for mineral maps. They called for a higher signal-to-noise ratio, a stronger signal relative to sensor noise, in later spaceborne sensors. PRISMA, EnMAP, EMIT, and Tanager followed, and CHIME and NASA's Surface Biology and Geology study (Cawse-Nicholson et al., 2021) aim for routine coverage.
Routine coverage needs distributed computing across many machines. One EMIT scene has 285 bands, and a multi-year archive has thousands of scenes. Jia Yu, Jinxuan Wu, and Mohamed Sarwat introduced GeoSpark (ACM SIGSPATIAL, 2015). Yu, Zongsi Zhang, and Sarwat described its spatial partitioning, indexing, and join design in Spatial data management in Apache Spark (GeoInformatica, 2019). GeoSpark became Apache Sedona, the engine under WherobotsDB. Kanchan Chowdhury and Sarwat's GeoTorch (ACM SIGSPATIAL, 2022) brought deep learning on raster imagery to Sedona and PyTorch. The Cuprite grid query runs the same way over a whole scene or archive, because each cell is computed on its own.
At Cuprite, a two-band Sentinel-2 ratio located the alteration zones, and identifying the minerals inside them takes hyperspectral bands a few nanometers wide.
Run band math on hyperspectral imagery in SQL with WherobotsDB at cloud.wherobots.com.
A hyperspectral image is a data cube. Two dimensions are the picture, and the third is wavelength. Every pixel holds a full reflectance spectrum: the share of light the surface reflects, in hundreds of narrow, contiguous bands. Earth observation sensors typically cover about 400 to 2,500 nanometers.
An imaging spectrometer splits incoming light into hundreds of narrow, contiguous wavelength bins and records each one for every pixel. The result is a data cube. Two dimensions form the image, and the third is wavelength. Each pixel holds a full reflectance curve from about 400 to 2,500 nanometers. Analysts then match each curve to the absorption features of known materials.
Hyperspectral imaging identifies what a surface is made of. Each material absorbs light at its own wavelengths. Narrow bands record those absorption features, so analysts can tell one mineral, gas, plant species, or plastic from another. Multispectral imaging separates broad classes such as vegetation, water, and soil.
Passive. Hyperspectral sensors record sunlight reflected from the surface and emit no energy of their own, unlike active sensors such as lidar and radar.
Hyperspectral imagery records 100 or more narrow, contiguous bands, giving each pixel a full reflectance spectrum. Multispectral imagery records 3 to 15 broad bands chosen for general use. Hyperspectral imagery can identify specific materials such as minerals and gases. Multispectral imagery separates broad classes such as vegetation, water, and built surfaces. Sentinel-2’s band 12, for example, is 242 nm wide, as wide as about 32 EMIT bands.
Orbital hyperspectral imagery typically has 200 to 450 bands, each 5 to 10 nanometers wide. The bands are contiguous across the visible, near-infrared, and shortwave infrared range from about 400 to 2,500 nanometers. NASA’s EMIT has 285 bands, EnMAP has 224, PRISMA has about 240, and Planet’s Tanager about 426. The airborne AVIRIS-NG has 425.
Hyperspectral imagery is used to identify materials by their spectral signature. Common uses include mineral exploration, methane and carbon dioxide plume detection, crop and vegetation species mapping, soil and water quality monitoring, and snow and ice studies. Laboratory and factory cameras sort food, recycled materials, and pharmaceuticals the same way. It also serves as reference data for calibrating multispectral analyses.
Cost depends on the source. Satellite hyperspectral data from NASA’s EMIT is free, and EnMAP and PRISMA scenes are free on registration. Commercial satellite imagery from Planet’s Tanager and Pixxel is licensed. Hyperspectral cameras and airborne surveys are priced by their vendors and vary with spectral range, resolution, and platform.
Hyperspectral sensor prices vary widely and are set by each vendor. A camera that covers visible and near-infrared light is a different instrument from one that also covers the shortwave infrared to 2,500 nanometers. Airborne and spaceborne spectrometers are custom systems. For Earth observation, free data from EMIT, EnMAP, and PRISMA is an alternative to buying a sensor.
Some hyperspectral imagery is free. NASA’s EMIT data is open through NASA’s Land Processes Distributed Active Archive Center. EnMAP and PRISMA scenes are free on registration with DLR and ASI, and NASA’s AVIRIS archive is public. Commercial hyperspectral imagery from Planet’s Tanager and Pixxel is licensed, and free coverage is sparse compared with multispectral.
Well-known examples include AVIRIS mineral maps of Cuprite, Nevada, and AVIRIS-NG surveys that found more than 250 methane plumes in the Four Corners region. Two more well-known examples are EMIT detections of methane sources in the oil and gas, waste, and energy sectors, and the Indian Pines AVIRIS scene used to benchmark crop classification.
Imaging spectrometry for Earth observation was developed at NASA’s Jet Propulsion Laboratory in the early 1980s. Alexander Goetz, Gregg Vane, Jerry Solomon, and Barrett Rock described it in Science in 1985, and JPL’s AVIRIS, proposed in 1983, first measured spectral images in 1987.
Spectral unmixing estimates which pure materials, called endmembers, make up a pixel and in what proportion. A 30 or 60 m pixel usually covers several surfaces. Its spectrum is modelled as a mix of the endmember spectra. The output is one abundance map per material.
Hyperspectral pixels have hundreds of correlated bands, while labelled training samples are usually scarce. Hughes showed in 1968 that, for a fixed number of training samples, classifier accuracy can fall as more measurements are added. Band selection, principal component analysis, and spectral-spatial methods that use neighbouring pixels reduce the problem.
What is a Kelvin Wave? Speed, El Niño and 2026 Data
A Kelvin wave is a long, low ocean wave that carries warm water east along the equator in an El Niño. In the 30 days to 10 November 2026, the sea at San Diego stood a record 41.2 cm above NOAA's tide prediction.
What Is an ETL Pipeline? Steps, Examples and Spatial ETL
An ETL (extract, transform, load) pipeline moves data from sources into storage. Learn the steps with examples. Then see a spatial mistake that passed the usual checks: rounding coordinates emptied 27% of Denver's building outlines.
What is an MCP Server? Spatial Context for AI Agents
An MCP server gives AI agents tools to call. With no tools, Claude Code gave no count of San Francisco's buildings. Via Wherobots MCP, it counted 162,538.
share this article
Awesome that you’d like to share our articles. Where would you like to share it to: