Notes on the Optimized Spectral Unmixing Software
This section highlights some development features of a linear/nonlinear endmember unmixing program for hyperspectral airborne images such as collected by AVIRIS and SpecTIR HST airborne, and ASTER satellite.
I call this Parallel Optimized Cross-Correlation Spectral Matching, POCCM. It's purpose is to investigate various optimization methods for hyperspectral image endmember unmixing. The program is thus far standalone, and requires pre-orthorectfication and atmospheric correction of the input image.
The code is mostly C++ that links GDAL image IO and various Netlib Fortran library routines. I looked briefly into IDL, a very concise language for writing vector algorithms, but didn't have a license and at the time the GDL alternative was... rather limited. POCCM parallelization is implemented via Intel's Threading Building Blocks. Endmembers may be selected from the USGS and JPL spectral libraries. I use the GRASS GIS for mapping and image overlays.
POCCM (Parallel Optimized Cross-Correlation Spectral Matching) comprises a small collection of programs that implement a select class of Optimized Cross-Correlogram Spectral Matching (OCCM) algorithms inspired by David Coulter's Ph.D. dissertation: Remote Sensing Analysis of Alteration Mineralogy Associated With Natural Acid Drainage in the Grizzly Peak Caldera, Sawatch Range, Colorado by David W. Coulter, Colorado School of Mines, 2006.
Apart from some of the non-linear unmixing algorithms, this is all basic functionality found in commercial remote-sensing packages such as Exelis' ENVI. Writing it gave some feel for that part of spectral-matching data flow from the corrected orthorectified sensor image through to linear (or nonlinear, should the case arise) endmember matching. This includes convolving high-resolution laboratory spectra down to sensor-resolution for use with the matching algorithm. It does not include analysis such as Maximum Likelihood or Segmentation classifications, Principal Component Transformation, or Minimal Noise Fraction: these are provided both by ENVI and by the freely available GRASS GIS.
- POCCM: This is the main image-processing program that reads a corrected sensor image,
currently from NASA Airborne Visible/Infrared Imagining Spectrometer (Aviris) or HyperSpecTIR (HST),
such as acquired by Coulter's team from the Grizzly Peak Caldera.
- Select the Unmixing Algorithm: Non-linear Conjugate Gradient,
Non-linear Genetic Algorithm, or linear Constrained Single
Value Decomposition (SVD).
- As the purpose of Coulter's study was to delineate
states of exposed iron oxides (Hematite, Geothite,
Jarosite) in an alpine environment, optionally
set a maximum Normalized Difference Vegetation Index
(NDVI) value above which pixels are assumed to be
predominantly vegetative, and not to be processed.
- Sensor type (currently Aviris or HST)
- Set of one or more wavelength intervals over which to
perform the matching e.g. "450:1100, 2000:2400"
excludes the 1100 - 2000 nm water band.
- The corrected orthorectified Aviris or HST sensor image
file to be analysed.
- Two or more endmember spectral files to be matched
pixel-by-pixel with the sensor image. Endmember spectra may be
selected from the ground-truth field samples or, after
filtering (described below) appropriate to the given sensor,
from the USGS or JPL spectral libraries. Coulter used three
iron-oxide (Hematite, Geothite, Jarosite) endmembers in his
study; POCCM is able to reproduce his final false-color
relative abundance images. (I have alternatively used up to
seven clay endmembers to analyse kaolintic regions in the
- boundary coordinates (meters, NAD27 in this case) of the
sub-image to be analysed.
- A single OccmResult data file containing the relative abundance of each endmember at each sensor sub-image pixel beneath the NDVI threshold,
- Select the Unmixing Algorithm: Non-linear Conjugate Gradient, Non-linear Genetic Algorithm, or linear Constrained Single Value Decomposition (SVD).
- OccmPlot : Reads a single Unknown spectrum file (e.g. from a single multi-band pixel)
and 2 or more
Endmember files, runs the OCCM algorithm and produces a gnuplot file
that compares the Unknown spectrum with the spectrum of the optimal
mixture. All input files must be in Envi Ascii format, with
the same wavelengths. The Unknown spectrum may be extracted from an
image by ExtractPixel.
- ExtractPixel : extract a single pixel (or small group of pixels)
from an image given the pixel's coordinates in meters.
- EndPlot : Write one or more ENVI ascii-format Endmember spectra
to an output gnuplot datafile, and a gnuplot command file, to enable
viewing of a single endmember spectrum.
- Occm2img : Converts the Cross-Correlation unmixing data from an
OccmResult file produced by POCCM to false-color image data suitable
for display in GRASS, where it may overlay the original sensor
image and Digital Elevation Map (DEM).
- PrintSpec : print compiled Sensor wavelength and bandwidth data
output to USGS SpecLib ascii format, a format used by JPL's ASTER
library as well.
- ConvolveSensor : convolve high-resolution USGS SpecLib or JPL endmember spectra with
Sensor resolution. Outputs reflectance vs wavelength in ENVI ascii
- sp2ascii : C translation of SpecLib's sptoascii function. Reads speclib ``spectrum'' data files, and lets us customize the file format on output.
Intended future work will investigate the correlation (if any) between
Optimized Cross-Correlation Spectral Matching and the Constrained Energy
Minimization (CEM) and Mixture Tuned Match Filtering (MTMF(tm)) techniques.