NISL-MSU / HSI-BandSelection

Developing Low-Cost Multispectral Imagers using Inter-Band Redundancy Analysis and Greedy Spectral Selection in Hyperspectral Imaging.
50 stars 13 forks source link

How to use your method to select useful band for any HSI dataset? #3

Closed jerryniu0624 closed 6 months ago

jerryniu0624 commented 7 months ago

How to use your method to select useful band for any HSI dataset?

GiorgioMorales commented 7 months ago

Thanks for your question. I've been meaning to re-structure the repo as a Python package so that it can be more usable. It should be ready in a couple of days

GiorgioMorales commented 6 months ago

The project is ready to use. I created a Demo (https://colab.research.google.com/github/NISL-MSU/HSI-BandSelection/blob/master/HSIBandSelection.ipynb) that shows how to use the band selection method.

jerryniu0624 commented 6 months ago

Thank you so much

jerryniu0624 commented 6 months ago

Hello, it seems that this demo does not use the IBRA method. Am I correct? Is the only way to use IBRA by using PCA/PLA method in your code?

GiorgioMorales commented 6 months ago

The demo does use IBRA. It's the first step. You can use IBRA+PCA/PLS or IBRA+GSS which was shown in the example. Either way, you will obtain after a minute or 2 the indices that were preselected by IBRA.

However, the demo was not considering to use just IBRA to perform cross-validation because it's just a preselection algorithm. I think I could add the option of using IBRA alone (in that case, one can't specify the number of desired selected bands)

GiorgioMorales commented 6 months ago

I made two minor modifications to the SelecBands.py code. Now, you can specify method='IBRA' as one of the parameters of the SelectBands class. The image below shows the result of using IBRA with three possible VIF values. Note that when you use IBRA, since it's a pre-selection method, you can't specify the desired number of final bands, it will depend on the data itself.

Also note that using the bands pre-selected by IBRA as the ones that yielded the greatest classification performance and then using Greedy Spectral Selection (or any other selection method), is not the same as using IBRA+GSS (or IBRA+other selection method) in conjunction. In this implementation, when you use method='GSS', it is implied that you're using IBRA+GSS. If you implement another selection method, I suggest incorporating it into the SelectBand class and not doing it separately.

image

jerryniu0624 commented 6 months ago

Thanks for your elaborate reply. When I use GSS + IBRA to select bands for Salinas, the first candidate combination of bands is [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]. This suggests that IBRA is not employed, since the result bands of IBRA should be evenly distributed in the whole spectral dimensions in some way. I am a bit confused. The code and result is shown below. image

jerryniu0624 commented 6 months ago

After useing the latest version of your code, this is not an issue. Thanks a lot!!!

GiorgioMorales commented 6 months ago

Glad it works. However, take into account that IBRA doesn't make any assumption about evenly distributing the candidate bands across the spectrum. For example, in the case of the Kochia dataset we used for our paper, you can see that between bands 80 and 130, only one band was selected (https://www.mdpi.com/2072-4292/13/18/3649)