Estimate the number of endmembers in a hyperspectral image


Estimate the number of endmembers in a hyperspectral image. First, compute statistics on the image and then apply an endmember number estimation algorithm using these statistics. Two algorithms are available:

  1. Virtual Dimensionality (HFC-VD) [1][2]
  2. Eigenvalue Likelihood Maximization (ELM) [3][4]

The application then returns the estimated number of endmembers.

[1] C.-I. Chang and Q. Du, Estimation of number of spectrally distinct signal sources in hyperspectral imagery, IEEE Transactions on Geoscience and Remote Sensing, vol. 43, no. 3, mar 2004.

[2] J. Wang and C.-I. Chang, Applications of independent component analysis in endmember extraction and abundance quantification for hyperspectral imagery, IEEE Transactions on Geoscience and Remote Sensing, vol. 44, no. 9, pp. 2601-1616, sep 2006.

[3] Unsupervised Endmember Extraction of Martian Hyperspectral Images, B.Luo, J. Chanussot, S. Dout’e and X. Ceamanos, IEEE Whispers 2009, Grenoble France, 2009

[4] Unsupervised classification of hyperspectral images by using linear unmixing algorithm Luo, B. and Chanussot, J., IEEE Int. Conf. On ImageProcessing(ICIP) 2009, Cairo, Egypte, 2009


Input Image Filename -in image Mandatory
The hyperspectral data cube input

Number of endmembers -number int Mandatory
The output estimated number of endmembers

Unmixing algorithm -algo [elm|vd] Default value: elm
The algorithm to use for the estimation

  • Eigenvalue Likelihood Maximization
    Eigenvalue Likelihood Maximization algorithm
  • Virtual Dimensionality
    HFC Virtual Dimensionality algorithm

Virtual Dimensionality options

False alarm rate -algo.vd.far float Default value: 0.001
False alarm rate for the virtual dimensionality algorithm

Available RAM (MB) -ram int Default value: 256
Available memory for processing (in MB).

Load parameters from XML -inxml filename.xml
Load application parameters from an XML file.

Save parameters to XML -outxml filename.xml
Save application parameters to an XML file.


From the command-line:

otbcli_EndmemberNumberEstimation -in cupriteSubHsi.tif -algo vd -algo.vd.far 1.0E-3

From Python:

import otbApplication

app = otbApplication.Registry.CreateApplication("EndmemberNumberEstimation")

app.SetParameterString("in", "cupriteSubHsi.tif")
app.SetParameterFloat("algo.vd.far", 1.0E-3)