Hyperspectral Analysis
Technical & Scientific Documentation
A complete single-page reference for the planned hyperspectral toolbox: spectral preprocessing, dimensionality reduction, endmember discovery, spectral-library classification, and sub-pixel unmixing.
1. Scope & Final Hyperspectral Toolbox
This module starts after radiometric and atmospheric preprocessing. Its preferred input is a calibrated reflectance cube with reliable wavelength metadata. The tools are intentionally independent: users do not have to run every tool in sequence.
Hyperspectral ├─ Spectral Smoothing ├─ Spectral Derivative ├─ Continuum Removal ├─ Minimum Noise Fraction (MNF) ├─ Endmember Extraction ├─ Spectral Library Matching │ ├─ SAM — Spectral Angle Mapper │ └─ SID — Spectral Information Divergence └─ Spectral Unmixing
| Tool | Main Purpose | Input Bands | Main Output | Output Dimension |
|---|---|---|---|---|
| Spectral Smoothing | Reduce spectral noise while preserving spectral shape | N wavelength bands | Smoothed spectral cube | Usually N bands |
| Spectral Derivative | Emphasize slope, edge, and absorption-shape changes | N wavelength bands | Derivative spectral cube | N recommended; mathematically N−1/N−2 is also possible |
| Continuum Removal | Normalize absorption features relative to an upper continuum | N wavelength bands | Continuum-removed cube | N bands |
| MNF | Separate signal from noise and reduce dimensionality | N bands | M MNF components | M ≤ N, commonly M ≪ N |
| Endmember Extraction | Find spectrally pure/extreme signatures | N bands or selected MNF components | K spectral signatures + locations | K rows × N wavelengths in the preferred physical library |
| Spectral Library Matching | Whole-pixel material identification/classification | N spectral bands + reference spectra | Class/material raster + score | 1 class band + optional score/rule bands |
| Spectral Unmixing | Estimate sub-pixel material fractions | N bands + K endmembers | Abundance raster | K abundance bands (+ residual/RMSE optional) |
2. Scientific Foundation
2.1 Hyperspectral pixel as a vector
A hyperspectral pixel is not a single brightness value. It is a vector containing measurements across many narrow spectral bands. For a pixel with N bands:
If the image contains 200 bands, each pixel is a point in a 200-dimensional spectral space. A material such as vegetation, water, soil, kaolinite, calcite, or iron oxide can have a characteristic spectral shape or “spectral fingerprint”.
2.2 Reflectance domain
Reflectance is dimensionless. Physically, a reflectance of 0.20 corresponds to 20% reflectance under the measurement definition. In real corrected remote-sensing products, valid values can occasionally fall slightly below 0 or above 1 because of noise, correction artifacts, adjacency effects, scaling, or retrieval uncertainty. Therefore the analysis engine should not automatically clip all values to [0,1] unless the selected method specifically requires it.
2.3 Wavelength alignment is fundamental
For spectral matching or endmember-based analysis, the numerical band index is not enough. The engine should know each band's center wavelength and preferably its spectral response or FWHM. Two spectra can only be compared meaningfully when they represent the same wavelength space. Reference libraries therefore normally require spectral resampling to the image wavelengths.
3. Recommended Workflow
The seven tools form a toolbox, not a mandatory linear pipeline.
3.1 Two important final branches
Whole-pixel spectral classification
SAM/SID compare each image spectrum to a reference spectrum and can assign one dominant material/class to each pixel.
Pixel spectrum
+
Reference library
↓
SAM / SID
↓
1-band class mapSub-pixel decomposition
Spectral Unmixing estimates the fractional contribution of multiple endmembers to the same pixel.
Pixel spectrum
+
K endmembers
↓
Unmixing
↓
K abundance bands4. Recommended Input Data Contract
4.1 Required or strongly recommended metadata
| Metadata | Requirement | Reason |
|---|---|---|
| Band count | Required | Defines spectral vector dimension. |
| Center wavelength λ | Strongly recommended | Needed for derivatives, continuum analysis, spectral resampling and library matching. |
| Wavelength units | Required for matching | nm and μm must not be mixed silently. |
| FWHM / spectral response | Recommended | Improves library-to-sensor resampling. |
| Scale / offset | Required if encoded | Converts stored integer values to physical reflectance. |
| NoData / bad-band mask | Recommended | Prevents atmospheric absorption/noisy bands from corrupting analysis. |
| Product level | Recommended | Allows the system to distinguish DN/radiance/TOA/surface reflectance. |
4.2 Preferred data state
Preferred: Surface Reflectance + wavelength metadata + bad-band mask + valid scale/offset already applied or declared Accepted with warning: Radiance / TOA Reflectance Unknown wavelength metadata Generic band-index-only raster
Band-index-only mode can still support some mathematical processing, but physically meaningful spectral matching should be marked as limited or rejected when wavelength alignment cannot be established.
5. Spectral Smoothing
Spectral smoothing reduces high-frequency noise along the spectral axis. It does not blur the image spatially. For a 200-band cube, the preferred output remains 200 bands so that the wavelength grid remains unchanged.
5.1 Moving-average smoothing
5.2 Weighted/Gaussian smoothing
5.3 Savitzky–Golay smoothing
Savitzky–Golay smoothing fits a low-order polynomial to a moving local spectral window using least squares. The center value of the fitted polynomial becomes the smoothed value. It is attractive for spectroscopy because it can preserve peak shape and can also provide analytical derivative estimates.
5.4 Recommended parameters
- Method: Savitzky–Golay / Moving Average / Gaussian.
- Window size: odd number such as 5, 7, 9, 11 bands.
- Polynomial order: commonly 2 or 3 for Savitzky–Golay.
- Wavelength-aware mode: preferred when band spacing is irregular.
- Bad bands: should be masked or interpolated before smoothing.
5.5 Output
Input : 200-band surface reflectance Output: 200-band smoothed spectral cube Band 1 → same λ1 Band 2 → same λ2 ... Band 200→ same λ200
6. Spectral Derivative
Spectral derivatives emphasize changes in the shape of a spectrum. They can suppress broad baseline effects and reveal absorption edges, inflection points, and subtle spectral differences. The output is not reflectance; its units depend on wavelength units.
6.1 First derivative
6.2 Second derivative
For approximately uniform spectral spacing Δλ:
6.3 Savitzky–Golay derivative
The same local polynomial used for Savitzky–Golay smoothing can be differentiated analytically, often producing a more stable derivative than applying a finite difference directly to noisy spectra.
6.4 Why smoothing often precedes derivative
Differentiation amplifies high-frequency noise. Therefore:
Surface Reflectance
↓
Spectral Smoothing
↓
1st / 2nd Derivative6.5 Output dimension
Mathematically, naïve differencing may yield N−1 or N−2 samples. For a raster-analysis platform, the recommended contract is to preserve N output bands by using centered differences for interior wavelengths, one-sided differences or declared NoData at edges, and retaining original wavelength metadata.
7. Continuum Removal
Continuum removal normalizes a spectrum relative to an upper continuum, usually represented by a convex hull over the spectrum. It is especially useful for comparing the position, shape and depth of absorption features.
7.1 Basic equation
At wavelengths where the measured spectrum touches the continuum, RCR is close to 1. Inside an absorption feature, it is typically less than 1.
7.2 Absorption depth
7.3 Output
Input : 200-band reflectance Output: 200-band continuum-removed cube Original wavelength dimension is preserved. Output values are normalized spectral response, not original surface reflectance.
7.4 Spectral subset matters
The continuum depends on the wavelength interval used to construct it. The UI should therefore allow all valid bands, a wavelength range, or selected spectral windows.
8. Minimum Noise Fraction (MNF)
MNF is a noise-aware linear transformation designed to order transformed components by image quality / signal-to-noise information. It is commonly used to determine effective data dimensionality, separate noisy components, and reduce subsequent computational cost.
8.1 Data model
Let Σn be the estimated noise covariance matrix.
8.2 Noise whitening
8.3 Second rotation
Compute the covariance of the noise-whitened data:
Then solve the eigenproblem:
The ordered eigenvectors define the MNF transform:
8.4 Why output can be much smaller
Input: 200 spectral bands
↓
Forward MNF
↓
MNF 1 strong information
MNF 2 strong information
...
MNF 20 usable
MNF 21+ increasingly noisy
↓
Output selected M = 20 componentsA full MNF transform can contain N components, but the practical benefit is often obtained by retaining only the informative first M components. The output bands are MNF components, not wavelengths.
8.5 Noise estimation
When a dedicated dark/noise image is unavailable, a practical approach estimates noise from local spatial differences, assuming adjacent pixels share similar signal but have independent noise. The method used should be recorded in output metadata because MNF results depend strongly on the noise model.
8.6 Recommended parameters
- Noise estimation: spatial shift difference / external noise covariance / user-supplied noise raster.
- Number of components: Auto or integer M.
- Selection criterion: eigenvalue curve, estimated SNR, cumulative information, or manual QC threshold.
- Whitening regularization: needed if the noise covariance matrix is ill-conditioned.
9. Endmember Extraction
An endmember is a spectral signature representing a relatively pure material or an extreme spectral component in the scene. Endmember extraction is not a classification raster. Its primary result is a set of spectral signatures and, where possible, the source pixel locations.
9.1 Output concept
Input image: 200 bands Requested endmembers: K = 6 Output spectral library: Endmember 1 → 200 spectral values Endmember 2 → 200 spectral values Endmember 3 → 200 spectral values Endmember 4 → 200 spectral values Endmember 5 → 200 spectral values Endmember 6 → 200 spectral values
If the search is performed in reduced MNF space, the preferred workflow is to retain the pixel locations and sample the original/smoothed reflectance cube at those locations so that the final endmember library remains in physical wavelength space.
9.2 Geometric interpretation
Under a linear-mixture model, image pixels occupy a cloud in high-dimensional spectral space. Pure materials tend to occur near the extreme vertices of the data cloud, while mixtures lie between them.
9.3 PPI — Pixel Purity Index
PPI repeatedly projects spectra onto random directions. Pixels occurring most often at the extreme ends of those projections receive a high purity count.
PPI is commonly applied to informative MNF components to reduce noise and dimensionality before searching for pure pixels.
9.4 N-FINDR concept
N-FINDR searches for a set of pixels that maximizes simplex volume in spectral space.
9.5 VCA — Vertex Component Analysis
VCA is an unsupervised endmember-extraction method based on the geometry of linear mixtures. It searches for vertices of the data simplex by repeated projections under assumptions that include the presence of sufficiently pure signatures.
9.6 Recommended platform methods
| Method | Strength | Typical Requirement | Suggested Status |
|---|---|---|---|
| PPI | Intuitive pure-pixel ranking; produces a purity raster | Iterations, threshold; often MNF input | Recommended |
| VCA | Fast geometric endmember extraction | Number K; pure-pixel assumption | Recommended |
| N-FINDR | Simplex-volume optimization | Number K; iterative search | Advanced |
9.7 Recommended output object
{
"analysis": "endmember_extraction",
"method": "VCA",
"source_raster": "...",
"wavelength_unit": "nm",
"wavelengths": [400.0, 410.0, "..."],
"endmembers": [
{
"id": 1,
"name": "Endmember 1",
"pixel": {"row": 812, "col": 455},
"coordinate": {"x": "...", "y": "..."},
"spectrum": [0.081, 0.084, "..."],
"purity_score": 0.97
}
]
}Optional auxiliary outputs include point/vector source locations, PPI/purity raster, CSV, spectral plot preview, and user-editable material labels.
10. Spectral Library Matching
Spectral Library Matching is the hyperspectral material-identification / whole-pixel classification tool. The user supplies or selects a reference spectral library, and each image pixel is compared against candidate reference spectra.
10.1 Library preprocessing requirements
- Reference wavelengths must overlap image wavelengths.
- Wavelength units must be known and harmonized.
- Library spectra should be resampled using wavelength/FWHM information when possible.
- If image spectra are continuum-removed, derivative-transformed, or otherwise normalized, the reference library must receive the equivalent transformation.
- Bad bands should be excluded from both image and reference spectra.
10.2 SAM — Spectral Angle Mapper
SAM treats each spectrum as a vector in N-dimensional band space and computes the angle between image spectrum x and reference spectrum s.
- θ ≈ 0: highly similar spectral direction.
- Larger θ: less similar.
- Best reference is typically the class with the smallest valid angle.
- A maximum-angle threshold should allow pixels to remain unclassified.
Because SAM focuses on vector direction rather than magnitude, it can be relatively insensitive to overall albedo/illumination scaling when used with calibrated data; this does not remove the need for correct radiometric/atmospheric preprocessing.
Recommended SAM outputs
classification.tif 0 = Unclassified 1 = Material A 2 = Material B ... sam_best_angle.tif pixel value = minimum spectral angle optional rule images: one angle band per reference material
10.3 SID — Spectral Information Divergence
SID converts nonnegative spectral vectors into probability-like distributions and measures their divergence using information theory.
Step 1 — normalize spectra
Step 2 — directional divergence
Step 3 — symmetric SID
- SID close to 0: highly similar.
- Larger SID: greater spectral divergence.
- A maximum SID threshold should support an unclassified class.
Recommended SID outputs
classification.tif best material/reference class sid_best_score.tif minimum SID divergence optional rule images: one SID score band per reference material
10.4 SAM vs SID
| Aspect | SAM | SID |
|---|---|---|
| Core idea | Angle between spectral vectors | Information divergence between normalized spectral distributions |
| Best match | Smallest angle | Smallest divergence |
| Output class map | Yes | Yes |
| Reference library | Required | Required |
| Zero/negative handling | Vector norm must be valid | Requires careful positive-value handling for logarithms |
| Threshold | Maximum angle | Maximum divergence |
11. Spectral Unmixing
Spectral Unmixing estimates how much of each reference material/endmember contributes to a pixel. It is therefore a sub-pixel composition analysis, not a conventional hard classification.
11.1 Linear mixing model
For N spectral bands and K endmembers:
Expanded by wavelength:
11.2 Unconstrained least squares
When M has full column rank:
Unconstrained solutions can contain negative abundances or sums different from 1.
11.3 Non-negative constraint
11.4 Fully constrained linear unmixing
subject to ak ≥ 0 and Σk=1…Kak = 1
The constraints are often physically intuitive for fractional surface mixtures, but they are assumptions and may not fit every radiative process.
11.5 Output band count
Input hyperspectral raster = 200 bands
Endmembers = 6
Spectral Unmixing
↓
Output abundance raster = 6 bands
Band 1 = abundance Endmember 1
Band 2 = abundance Endmember 2
Band 3 = abundance Endmember 3
Band 4 = abundance Endmember 4
Band 5 = abundance Endmember 5
Band 6 = abundance Endmember 6Example pixel:
Vegetation = 0.62 Soil = 0.23 Dry grass = 0.08 Shadow = 0.05 Other = 0.02 ------------------- Total = 1.00
11.6 Residual and RMSE
A high residual/RMSE can indicate missing endmembers, nonlinear mixing, poor spectral alignment, uncorrected atmosphere, bad bands, or an endmember library that does not adequately represent the scene.
11.7 Unmixing after MNF
Unmixing can be performed in MNF space, but image and endmembers must be transformed by the same fitted MNF transformation. For platform defaults, physically interpretable abundance mapping is clearer in calibrated reflectance space, while MNF is used to improve endmember discovery and computational efficiency.
12. Relationship Between the Seven Tools
| From | Can Feed | Notes |
|---|---|---|
| Spectral Smoothing | Derivative, Continuum Removal, MNF, Endmember Extraction, Matching, Unmixing, ML/DL | Preserves wavelength domain. |
| Spectral Derivative | Matching, ML/DL, feature analysis | Reference library must use equivalent derivative for matching. |
| Continuum Removal | Matching, feature analysis, ML/DL | Use the same spectral window on reference spectra. |
| MNF | Endmember Extraction, ML/DL, advanced unmixing | Components are not wavelengths. |
| Endmember Extraction | Library Matching, Spectral Unmixing | Endmembers may first need material identification. |
| Library Matching | Final class/material analysis, GIS statistics | Not a prerequisite for Unmixing. |
| Spectral Unmixing | Abundance analysis, thresholding, ML/DL, dominant-material derivation | Output bands are abundance dimensions. |
12.1 Valid workflows
Surface Reflectance → Smoothing → SAM/SID
Surface Reflectance → Smoothing → Continuum Removal → SAM/SID
Surface Reflectance → Smoothing → Derivative → Random Forest
Surface Reflectance → MNF → Random Forest
Surface Reflectance → MNF → Endmember Extraction
→ sample original spectra
→ Spectral Unmixing
Surface Reflectance → Endmember Extraction → SAM/SID
External Spectral Library → resample to image wavelengths → SAM/SID12.2 Workflow to avoid by default
Spectral Unmixing → SAM/SID spectral-library matching ✕
After unmixing, the bands represent abundance of endmembers rather than wavelength samples.
13. Recommended Platform Output Contract
| Tool | Main File | Sidecar / Auxiliary | Layer Type |
|---|---|---|---|
| Smoothing | Float32 COG, N bands | .statistics.json | Raster |
| Derivative | Float32 COG, N bands | .statistics.json + derivative metadata | Raster |
| Continuum Removal | Float32 COG, N bands | .statistics.json + spectral range | Raster |
| MNF | Float32 COG, M bands | .statistics.json + MNF transform/statistics metadata | Raster |
| Endmember Extraction | endmembers.json | CSV, optional point layer, optional purity raster | Non-raster primary result |
| Library Matching | Integer class COG | confidence/score COG, class legend JSON | Raster classification |
| Unmixing | Float32 COG, K bands | .statistics.json + endmember legend + RMSE/residual optional | Raster abundance |
13.1 Suggested endmember JSON fields
- analysis/method/version;
- source raster identifier;
- spectral domain and wavelength units;
- wavelength array;
- endmember identifier and optional material label;
- source pixel row/column and geospatial coordinate;
- spectral vector;
- purity/quality score where available;
- preprocessing history;
- bad-band list;
- creation timestamp.
13.2 Suggested classification legend
{
"classes": [
{"value": 0, "name": "Unclassified"},
{"value": 1, "name": "Kaolinite", "reference_id": "lib-001"},
{"value": 2, "name": "Calcite", "reference_id": "lib-021"},
{"value": 3, "name": "Vegetation", "reference_id": "lib-104"}
],
"method": "SAM",
"score_semantics": "lower_is_better"
}13.3 Suggested abundance metadata
{
"bands": [
{"band": 1, "endmember": "Vegetation", "unit": "fraction"},
{"band": 2, "endmember": "Soil", "unit": "fraction"},
{"band": 3, "endmember": "Shadow", "unit": "fraction"}
],
"constraint": "FCLS",
"sum_to_one": true,
"nonnegative": true
}14. Validation & Quality Control
14.1 Common validation
- Reject empty rasters and invalid band dimensions.
- Verify NoData behavior and finite-value proportion.
- Verify wavelength array length equals raster band count.
- Check wavelengths are monotonically ordered or explicitly reorder data and metadata together.
- Detect duplicate wavelengths.
- Apply declared scale/offset before physics-based spectral analysis.
- Exclude known bad bands and strong atmospheric-absorption regions when appropriate.
14.2 Smoothing QC
- Window cannot exceed valid spectral range.
- Savitzky–Golay window must be compatible with polynomial order.
- Report edge policy.
14.3 Derivative QC
- Reject zero wavelength spacing.
- Handle irregular wavelength spacing explicitly.
- Record derivative order and units.
14.4 MNF QC
- Noise covariance must be numerically valid.
- Regularize near-singular covariance matrices.
- Return eigenvalues/component-quality information.
- Do not label MNF components as wavelengths.
14.5 Endmember QC
- K must be smaller than or consistent with effective spectral dimensionality.
- Report duplicate/highly similar extracted endmembers.
- Report source pixels and validity masks.
- Allow user to rename “Endmember 1” after interpretation.
14.6 Matching QC
- Require spectral overlap.
- Resample library to image spectral grid.
- Use threshold to avoid forced classification.
- Return best score and optionally second-best score/margin.
- For SID, handle nonpositive values explicitly.
14.7 Unmixing QC
- Endmember count K must normally be less than number of spectral dimensions used.
- Endmember and image spectral dimensions must match exactly after resampling/transformation.
- Return residual or RMSE.
- For constrained methods, report abundance-sum deviation and negative-value violations.
15. Implementation Notes for an Analysis Server
15.1 Processing strategy
A hyperspectral cube can be hundreds of bands and several gigabytes. Algorithms should use block/window processing where mathematically possible. Do not read a full cube into RAM unless required and size-checked.
| Tool | Window/Block Friendly? | Global Preparation Needed? |
|---|---|---|
| Smoothing | Yes | No, except metadata |
| Derivative | Yes | No, except wavelength array |
| Continuum Removal | Yes, pixel blocks | No |
| MNF | Transform yes | Noise/covariance statistics first |
| Endmember Extraction | Method dependent | Often sampling/reduction/global search |
| SAM/SID | Yes | Reference resampling/preprocessing first |
| Unmixing | Yes | Endmember matrix/solver setup first |
15.2 Dtype
- Use Float32 for transformed spectral/abundance outputs unless higher precision is specifically required.
- Use integer type for class raster, choosing UInt8/UInt16/UInt32 based on class count.
- Do not encode transformed physical values into integers unless scale/offset is explicit.
15.3 Raster statistics
A statistics sidecar should describe each output band correctly. For a 200-band cube this can be large; the implementation may store per-band min/max/mean/std plus sampled histograms. MNF and abundance outputs should have semantic band descriptions.
15.4 Provenance
{
"input_domain": "surface_reflectance",
"operations": [
{"tool": "spectral_smoothing", "method": "savitzky_golay", "window": 7, "order": 2},
{"tool": "continuum_removal", "range_nm": [2000, 2400]}
]
}Provenance is essential because a reference library must receive compatible preprocessing before matching.
15.5 Do not silently change spectral semantics
| Output | Band semantics |
|---|---|
| Smoothed cube | Wavelength |
| Derivative cube | Derivative at wavelength |
| Continuum-removed cube | Normalized value at wavelength |
| MNF raster | MNF component |
| SAM/SID class raster | Class ID |
| Unmixing raster | Endmember abundance |
16. Example Analytical Workflows
16.1 Mineral identification from reflectance
Surface Reflectance
↓
Remove bad bands
↓
Spectral Smoothing
↓
Continuum Removal (target SWIR range)
↓
Resample mineral spectral library to image wavelengths
↓
Apply same continuum removal to library
↓
Spectral Library Matching — SAM or SID
↓
Mineral Class Map + Match Score16.2 Endmember discovery and abundance mapping
Surface Reflectance (200 bands)
↓
MNF (retain 20 informative components)
↓
PPI / VCA / N-FINDR
↓
K pure-pixel locations
↓
Sample original 200-band reflectance
↓
K endmember spectra
↓
Fully Constrained Linear Spectral Unmixing
↓
K abundance bands + RMSE16.3 Vegetation stress feature engineering
Surface Reflectance
↓
Spectral Smoothing
↓
First Derivative
↓
Selected spectral features / ML
↓
Random Forest / SVM / Deep Learning16.4 Direct spectral-library classification
Surface Reflectance
+
Reference Library
↓
Spectral resampling
↓
SAM / SID
↓
Class Raster
+
Best-Match Score Raster16.5 Why Unmixing and Matching are parallel
Matching result
Pixel 100,200 → Kaolinite
One dominant material identity, subject to threshold and library design.
Unmixing result
Pixel 100,200 Kaolinite = 0.58 Calcite = 0.27 Soil = 0.15
Fractional composition. Multiple materials can coexist in the same pixel.
17. Scientific & Technical References
Primary papers and official technical documentation used to ground the definitions and implementation notes.
- Savitzky, A. & Golay, M. J. E. (1964). Smoothing and Differentiation of Data by Simplified Least Squares Procedures. Analytical Chemistry 36(8), 1627–1639. ACS.
- NV5 Geospatial / ENVI. Continuum Removal. Official documentation.
- NV5 Geospatial / ENVI. Minimum Noise Fraction Transform. Official documentation.
- NV5 Geospatial / ENVI. Forward MNF Transform Task. Official documentation.
- NV5 Geospatial / ENVI. Pixel Purity Index. Official documentation.
- Nascimento, J. M. P. & Bioucas-Dias, J. M. (2005). Vertex Component Analysis: A Fast Algorithm to Unmix Hyperspectral Data. IEEE Transactions on Geoscience and Remote Sensing 43(4), 898–910. IEEE.
- NV5 Geospatial / ENVI. SMACC Endmember Extraction. Official documentation.
- NV5 Geospatial / ENVI. Spectral Angle Mapper. Official documentation.
- Chang, C.-I. (2000). An Information-Theoretic Approach to Spectral Variability, Similarity, and Discrimination for Hyperspectral Image Analysis. IEEE Transactions on Information Theory 46(5), 1927–1932. IEEE.
- NV5 Geospatial / ENVI. Material Identification Tool — SAM, SID and spectral-library resampling. Official documentation.
- NV5 Geospatial / ENVI. Linear Spectral Unmixing. Official documentation.
- U.S. Geological Survey. USGS Spectral Library. Official USGS resource.
- U.S. Geological Survey. USGS Spectral Library Version 7 Data. Official data release.
- NV5 Geospatial / ENVI. Spectral Hourglass Workflow. Official documentation.