Main Content

selectBands

Select most informative bands

Since R2020a

Description

newhcube = selectBands(hcube,endmembers) selects the most informative bands of the hyperspectral data cube by using orthogonal space projection method [1]. The function returns a new hypercube object that contains the data from only the most informative bands.

Note

  • For preprocessing, the function removes the water absorption and low signal-to-noise ratio (SNR) bands prior to computing the most informative bands.

  • To reduce the computational complexity, the function computes the most informative bands by considering only 10% of the pixel values in the pre-processed data cube. These values are selected randomly. The function also ensures that the random selection does not result in the removal of endmembers.

[newhcube,band] = selectBands(hcube,endmembers) also returns the band numbers of the most informative bands in the hyperspectral data cube.

[___] = selectBands(hcube,endmembers,'NumberOfBands',numBands) additionally specifies the number of most informative bands to select from the input data cube, in addition to any combination of arguments from previous syntaxes.

Note

This function requires the Hyperspectral Imaging Library for Image Processing Toolbox™. You can install the Hyperspectral Imaging Library for Image Processing Toolbox from Add-On Explorer. For more information about installing add-ons, see Get and Manage Add-Ons.

The Hyperspectral Imaging Library for Image Processing Toolbox requires desktop MATLAB®, as MATLAB Online™ or MATLAB Mobile™ do not support the library.

example

Examples

collapse all

Read hyperspectral data into the workspace.

hcube = hypercube("paviaU.dat")
hcube = 
  hypercube with properties:

      DataCube: "[610x340x103 double]"
    Wavelength: [103x1 double]
      Metadata: [1x1 struct]
     BlockSize: [610 340]

Estimate the endmembers of the data cube by using the FIPPI algorithm.

endmembers = fippi(hcube,9);

Create a new hypercube consisting of the ten most informative bands.

newhcube = selectBands(hcube,endmembers,"NumberOfBands",10)
newhcube = 
  hypercube with properties:

      DataCube: "[610x340x10 double]"
    Wavelength: [10x1 double]
      Metadata: [1x1 struct]
     BlockSize: [610 340]

Input Arguments

collapse all

Input hyperspectral data, specified as a hypercube object. The DataCube property of the hypercube object contains the hyperspectral data cube.

Spectral signatures of the endmembers, specified as a matrix of size C-by-K. C is the number of spectral bands in the hyperspectral data cube and K is the number of endmembers of the hyperspectral data cube. Use the fippi, ppi, or nfindr function to find the endmembers of a hyperspectral data cube.

Data Types: single | double

Number of most informative bands to select from the data cube, specified as a scalar.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Output Arguments

collapse all

Output hyperspectral data, returned as a hypercube object.

Spectral band number of the most informative bands in the input data cube, returned as a positive integer or a vector of positive integers.

Data Types: double

References

[1] Du, Qian, and He Yang. “Similarity-Based Unsupervised Band Selection for Hyperspectral Image Analysis.” IEEE® Geoscience and Remote Sensing Letters, Vol. 5, no. 4 (October 2008): 564–68. https://doi.org/10.1109/LGRS.2008.2000619.

Version History

Introduced in R2020a