基于Python的高光谱图像分析教程

1、前言

超光谱图像 (HSI) 分析因其在从农业到监控的各个领域的应用而成为人工智能 (AI) 研究的前沿领域之一。 该领域正在发表许多研究论文,这使它变得更加有趣! 和“对于初学者来说,在 HSI 上开始模式识别和机器学习是相当麻烦的”,因为与计算机视觉中的其他机器学习 (ML) 技术(例如对象检测、人脸识别、GAN、自动驾驶)相比,它的学习资料有限。

这篇文章提供的信息可帮助初学者开始进行高光谱图像 (HSI) 分析,从数据收集到数据可视化和分析,以及使用 Python 使用交互式数据可视化工具。

2、介绍

在遥感领域,高光谱遥感器被广泛用于以高光谱分辨率监测地球表面。 高光谱图像 (HSI) 数据通常在同一空间区域包含数百个光谱波段,这些波段提供有价值的信息来识别各种材料。 在 HSI 中,每个像素都可以看作是一个高维向量,其条目对应于从可见光到红外线的光谱反射率。

高光谱数据的获取和收集变得更加容易和负担得起,使高光谱图像分析成为许多应用中有前途的技术之一,包括精确农业、环境分析、军事监视、矿产勘探、城市调查等。

高光谱图像的分类是对使用高光谱传感器捕获的图像中每个像素的类别标签进行分类的任务。 本博客侧重于数据收集、数据预处理和探索性数据分析。

3、数据及预处理

3.1数据集

困难的部分来了,没有流行的 HSI 数据源,这使得初学者很难开始 HSI 分析。 以下是 HSI 的少数数据来源。

  • Grupo De Inteligencia Computacional

  • Remote Sensing Laboratory

3.2预处理

高光谱图像 (HSI) 数据主要以 .mat 文件格式提供。 使用不同的编程语言访问哪个cab,博客使用python。

提取 HSI 的像素是重要的预处理任务之一。 这使得处理数据和实施机器学习算法(如分类、聚类等)变得更加容易。

帕维亚大学数据集(Pavia University Dataset)用于说明目的。 ROSIS 传感器在意大利北部帕维亚上空的飞行活动中获取的 HSI 场景。 光谱波段数为103,HSI大小为610*340像素,ground truth包含9类。 图像中的一些像素不包含任何信息,必须在分析之前丢弃。 几何分辨率为1.3米。 以下是帕维亚大学 HSI 的几个示例波段。

(1)数据读入

通过使用 Scientific Python(SciPy) python 库,我们可以读取数据集。 下面的代码用于读取数据集。

from scipy.io import loadmat

def read_HSI():
  X = loadmat('PaviaU.mat')['paviaU']
  y = loadmat('PaviaU_gt.mat')['paviaU_gt']
  print(f"X shape: {X.shape}\ny shape: {y.shape}")
  return X, y

X, y = read_HSI()

该函数返回数据和地面实况或类,还显示数据和地面实况的大小,即 3D 和 2D 矩阵。

(2)提取像素

像素是高光谱图像(HSI)中的单个元素,它是一个矢量,其长度等于 HSI 的波段数。 下面的代码用于从 HSI 中提取像素并保存到 CSV 文件中并返回 pandas 数据帧。

import pandas as pd
import numpy as np
def extract_pixels(X, y):
  q = X.reshape(-1, X.shape[2])
  df = pd.DataFrame(data = q)
  df = pd.concat([df, pd.DataFrame(data = y.ravel())], axis=1)
  df.columns= [f'band{i}' for i in range(1, 1+X.shape[2])]+['class']
  df.to_csv('Dataset.csv')
  return df 
df = extract_pixels(X, y)

4、数据分析

由于帕维亚大学数据集具有高维度,因此很难处理庞大的数据。 因此,使用主成分分析 (PCA) 将数据降维为 3D,PCA 是一种流行且广泛使用的降维技术。 下面的代码用于将数据集的维度减少为三个。

from sklearn.decomposition import PCA

pca = PCA(n_components = 3)

dt = pca.fit_transform(df.iloc[:, :-1].values)

q = pd.concat([pd.DataFrame(data = dt), pd.DataFrame(data = y.ravel())], axis = 1)

q.columns = [f'PC-{i}' for i in range(1,4)]+['class']

上面的代码生成了一个数据框,其中列作为三个主要组件 (PC) 和类。 让我们看一些交互式可视化来检查数据中的模式。

很难可视化数据集中的所有模式,因为它包含近 45k。 因此,对数据进行采样是可视化所有数据点或观测值或像素的最佳方式。 除计数图外,这些图是使用每个类中随机抽取的 200 个样本描绘的。

(1)计数图

它可以被视为跨分类变量的直方图,而不是定量变量。 下图说明了 HSI 类别之间的图表。 我们可以看到“Asphalt、Bare Soil、Self-Blocking Bricks 和 Trees”是帕维亚大学 HSI 中占用最多的类别。

(2)配对图

这是可视化每个变量之间关系的一种非常简单的方法。 它提供了数据中每个变量之间的关系矩阵。 下图显示了主成分(PC1、PC2 和 PC3)之间的关系。

(3)3D 散点图

它将数据点绘制在三维轴上以显示三个变量之间的关系。 下图以 3D 散点图的形式表示主成分(PC1、PC2 和 PC3)之间的关系。

(4)3D 线图

它与 3D 散点图非常相似,但不同之处在于每个数据点都用一条线连接。 下图以 3D 线图的格式显示了数据的可视化。 在这里我们可以看到,即使使用线性降维技术 (PCA),类投影也相当好。

(5)面积图

它表示一个变量与另一个变量的变化,该变量将数据点与线段连接起来。 主成分(PC1、PC2 和 PC3)的可视化如下所示:

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年9月21日
下一篇 2023年9月21日

相关推荐