Hyperspectral image analysis using scikit-learn
The package can be installed using pip
:
pip install hskl
Or install HSKL directly from the repository:
-
Verify that git is installed:
git --version
-
Install HSKL:
pip install git+https://github.com/qiancao/hskl.git
Training a pixel-level classifier for segmentation:
import os
from hskl.demo import dl_hyrank, load_hyrank
import hskl.classification as classification
import hskl.utils as utils
# Download, unpack, and load HyRANK dataset from current directory.
path = os.getcwd()
if not os.path.exists("HyRANK_satellite"):
dl_hyrank(path)
images, labels, _ = load_hyrank(path)
# Dimensional reduction using PCA, retain 99.9% image variance
pca = utils.pca_fit(images[0])
train, _ = utils.pca_apply(images[0], pca, 0.999)
test, _ = utils.pca_apply(images[1], pca, 0.999)
label = labels[0]
test_mask = labels[1]>0
# Train a classifier and predict test image labels
cl = classification.HyperspectralClassifier(
method_name="LinearDiscriminantAnalysis")
cl.fit(train, label)
prediction = cl.predict(test)
# Visualization of training data, test prediction, and test ground truth
fig_objs_train = utils.overlay(train,label)
utils.save_overlay(fig_objs_train, "hyrank_train.png")
fig_objs_predict = utils.overlay(test,prediction*test_mask)
utils.save_overlay(fig_objs_predict, "hyrank_predict.png")
fig_objs_test = utils.overlay(test,labels[1])
utils.save_overlay(fig_objs_test, "hyrank_test.png")
Output:
Training image and ground truth labels:
Test image and ground truth labels:
Test image and predicted labels:
Notes:
- Shape of
train
andtest
arrays are (DimX, DimY, SpectralChannels). - Shape of
label
andprediction
arrays are (DimX, DimY). - Labeling convention for classifiers:
(a) Datatype:
label.dtype == np.uint8
. (b) Labeled classes start from integer 1. Pixels withlabel == 0
are ignored (masked out). - Dimension(s) of
train
andlabel
must be consistent:train.shape[0] == label.shape[0]
andtrain.shape[1] == label.shape[1]
. - Inputs:
train
,test
, andlabel
can also be lists ofnp.ndarray
s with each element satisfying the preceeding requirements.
In the near-term:
- Test scripts and data
- Grid search cross validation
In the long-term, support for:
- Pipelines
- Patch-based featurizer
- Dask-enabled parallelism
- Deep learning (PyTorch) models
Qian Cao, Deependra Mishra, John Wang, Steven Wang, Helena Hurbon and Mikhail Berezin. HSKL: A Machine Learning Framework For Hyperspectral Image Analysis. Proc. IEEE WHISPERS. IEEE, 2021.
Karantzalos, Konstantinos, Karakizi, Christina, Kandylakis, Zacharias, & Antoniou, Georgia. (2018). HyRANK Hyperspectral Satellite Dataset I (Version v001). Zenodo. http://doi.org/10.5281/zenodo.1222202
Spectral Python (SPy): https://github.com/spectralpython/spectral