[GIS] Combining hyperspectral bands to form a multispectral image

digital image processingremote sensing

I understand that the difference between the two are the number and width of the bands. Given a hyperspectral image, is it possible to 'convert' it to multispectral ?

In this paper for example, the authors make use of RGB + Near Infrared (multispectral) for scene recognition. If i have a hyperspectral image and I keep only 4 bands (3 bands for rgb and 1 for NIR) while discarding/ignoring the rest, would I be able to achieve a somewhat similar result or would too much information be lost since the bands are much narrower than multispectral bands ?

Or should I perform some algorithm to combine the bands from the NIR and RGB respectively such that I have a proper multispectral image ?

Best Answer

I won't comment much on hyperspectral vs. multispectral as this is quite well discussed in the comments. One example I can think of is where you have airborne hyperspectral data but wish to apply algorithms developed for multispectral satellite data but at a higher resolution rather than developing algorithms specific for hyperspectral data.

I you need to / prefer to work with multispectral imagery there are two main approaches you could use to obtain from hyperspectral data.

  1. Taking a subset of bands

This is the easiest option. A small number of bands are selected coresponding wavelengths you are interested in.

You can do this in ENVI (a commercial image processing package) or using the following command in GDAL (an open source library).

gdal_translate -of ENVI -b 200 -b 150 -b 100 -b 50
                input_hyperspectral.bsq output_multispectral.bsq

Each band will still have a very narrow bandwidth. The disadvantage of this approach is you are throwing away a lot of data. It is a good starting point though and probably sufficient for data visualisation.

  1. Averaging bands over a range of wavelengths

The second approach is to average over a number of bands, so each band has a wider bandwidth (similar to multispectral sensors). The advantage of this is by averaging you will decrease some of the noise in your data.

There are different approaches to spectral averaging, the simplest would be to apply an equal weighting to all bands (wavelengths) within your range which would approximate a rectangular response function. An alternative would be to apply different weights to each wavelength within the window to create a more realistic response. This approach could be used to simulate the response of another multispectral sensor.

Within ENVI the 'Spectral Resampling tool' can be used for this, which assumes a Gaussian response. You could also write something in Python making use of NumPy to do this. If you are working with ENVI BIL files (a common format for hyperspectral data) in Python you may find the 'arsf_envi_reader' I wrote (available from https://github.com/pmlrsg/arsf_tools) useful.

Other options if you are looking to reduce the number of bands while keeping the information content (rather than specific spectral information) are techniques such as PCA (mentioned by @Jeffrey-Evans).

Related Question