文章目录

  • Github 源码获取
  • Introduction
  • Data Preprocessing
    • 1)Download Dataset
    • 2)Loading Dataset
    • 3)Extracting Pixels
    • 4)Save to CSV
    • 5)查看图像的真实标注
  • Exploratory Data Analysis
    • PCA降维以便可视化
  • Plot use Plotly
    • 1)Bar plot
    • 2)Pair plot
    • 3)2D Scatter Plot
    • 4)2D Violin Plot
    • 5)3D Scatter Plot
    • 6)Area Plot
  • Reference

Github 源码获取

https://github.com/datamonday/HSI-Analysis


高光谱图像(Hyperspectral Image,HSI) 分析是人工智能(AI)研究中的前沿领域,因为它在从农业到监视的各个领域中都得到了应用。

这篇文章旨在帮助初学者使用Python从以下部分进行HSI分析:(1)数据收集;(2)数据预处理;(3)数据可视化以及探索性数据分析。


Introduction

在遥感(Remote Sensing)中,高光谱遥感器广泛用于以高光谱分辨率监视地球表面。HSI数据通常包含同一空间区域上的数百个光谱带,这些光谱带提供了识别各种材料的有价值的信息。 在HSI中,每个像素(pixel)都可以视为一个高维向量,像素的数值对应于从可见光到红外的光谱反射率(spectral reflectance)。

高光谱数据的采集和收集变得越来越容易,这使得高光谱图像分析成为许多应用中的有前途的技术之一,包括精准农业,环境分析,军事监视,矿物勘探,城市调查等。

高光谱图像分类(Classification of Hyperspectral Images)是对图像中每个像素的类标签进行分类的任务。

困难之处在于,没有流行的HSI数据源,这使得初学者很难开始进行HSI分析。以下是HSI的一些数据源。

  • Grupo De Inteligencia Computacional
  • Remote Sensing Laboratory

以下是高光谱图像的伪彩色合成(false-color composites):

(a)ROSIS image of University of Pavia, Italy; (b) ROSIS image of part of the city of Pavia, Italy; (c) ProSpecTIR image of part of Reno, NV, USA;(d) HyMAP image of Dedelow, Germany; and (e) HYDICE image of part of Washington DC, USA.

Photo by Rama Rao Nidamanuri


Data Preprocessing

高光谱图像(HSI)数据主要以.mat文件的格式提供。可以使用 Scipy.io中的loadmat函数进行读取,返回字典格式,通过选择相应的键得到对应的numpy.ndarray数组

提取HSI像素是重要的预处理任务之一。这样可以更轻松地处理数据并实现机器学习算法,例如分类,聚类等。

使用Pavia大学数据集进行演示,该数据集使用ROSIS传感器在意大利北部帕维亚(Pavia)上空获得了HSI影像。 光谱带的数量为103,HSI的大小为 610 * 340 像素,包含9个类别。 图像中的某些像素不包含任何信息,必须在分析之前将其丢弃。几何分辨率为1.3米。


1)Download Dataset

http://www.ehu.eus/ccwintco/uploads/e/ee/PaviaU.mat
http://www.ehu.eus/ccwintco/uploads/5/50/PaviaU_gt.mat

2)Loading Dataset

使用 Scientific Python(SciPy) python 库读取数据。

from scipy.io import loadmatdef 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, yX, y = read_HSI()

输出:

X shape: (610, 340, 103)
y shape: (610, 340)

以上的尺寸说明,当前的高光谱图像(单张),尺寸为610 × 340像素,共有103不同的波长下的图片

其中每个像素代表一类,那么一类像素的shape就是每张图片中相同位置的像素×103不同波长下的像素:即1(行)×103(列)


3)Extracting Pixels

像素是高光谱图像(HSI)中的各个元素,HSI是长度等于HSI波段数的向量。下图是Pavia大学HSI的一些样本波段。

import seaborn as sns
sns.axes_style('whitegrid')
fig = plt.figure(figsize=(12, 6))for i in range(1, 1+6):fig.add_subplot(2, 3, i)q = np.random.randint(X.shape[2])plt.imshow(X[:, :, q], cmap='jet')plt.axis('off')plt.title(f'band - {q}')

Sample Bands of Pavia University HSI


4)Save to CSV

下面的代码用于从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)
df.info()

输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 207400 entries, 0 to 207399
Columns: 104 entries, band1 to class
dtypes: uint16(103), uint8(1)
memory usage: 40.9 MB

5)查看图像的真实标注

!pip install plotly
import plotly.express as pxcls = px.imshow(y, color_continuous_scale='jet')cls.update_layout(title='Ground Truth', coloraxis_showscale=True)
cls.update_xaxes(showticklabels=False)
cls.update_yaxes(showticklabels=False)
cls.show()


Exploratory Data Analysis

由于Pavia University数据集具有较高的维度,因此难以处理庞大的数据。 因此,使用主成分分析(PCA)将数据的维数缩减为3维,这是一种流行且广泛使用的降维技术。

PCA降维以便可视化

from sklearn.decomposition import PCA
pca = PCA(n_components = 3)
data = df.iloc[:, :-1].values
dt = pca.fit_transform(data)
q = pd.concat([pd.DataFrame(dt), pd.DataFrame(y.ravel())], axis=1)
q.columns = [f'PC-{i}' for i in range(1, 4)] + ['class']
q.head()

q.to_csv('dataset/paviaU_pca3.csv', index=False)
# Removing class - 0 as it is not need.
q2 = q[q['class'] != 0]
q2.head()


该数据集共九类,具体代表的真实含义如下:

class_labels = {'1':'Asphalt','2':'Meadows','3':'Gravel','4':'Trees','5':'Painted metal sheets','6':'Bare Soil','7':'Bitumen','8':'Self Blocking Bricks','9':'Shadows'}
# 添加真实标签列:将数值标签映射到对应的真实标签
q2['label'] = q2.loc[:, 'class'].apply(lambda x: class_labels[str(x)])
q2['label'].value_counts()

统计类别数量:

Meadows                 18649
Asphalt                  6631
Bare Soil                5029
Self Blocking Bricks     3682
Trees                    3064
Gravel                   2099
Painted metal sheets     1345
Bitumen                  1330
Shadows                   947
Name: label, dtype: int64
q2.head()

Plot use Plotly

Plotly是交互式绘图的Python工具,将代码复制到notebook运行即可实现,通过扩展包chart_studio可以生成html格式的交互式图表,可以嵌入到博客中,但是我这边运行提示HTTPError,没法写在博客里了,懂的都懂。代码自己运行吧。

1)Bar plot

类别统计柱状图

import plotly.express as px
count = q2['class'].value_counts()
bar_fig = px.bar(x=count.index[1:], y=count[1:], labels=class_labels, color=count.index[1:])
bar_fig.update_layout(xaxis = dict(title='Class', tickmode='array', tickvals=count.index[1:].tolist(), tickangle = 45,),yaxis = dict(title='count',),showlegend=True)
bar_fig.show()


2)Pair plot

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

# sampling dataset
sample_size = 200
sample = q2.groupby('class').apply(lambda x: x.sample(sample_size))
sample


3)2D Scatter Plot

fig = px.scatter(sample, x="PC-1", y="PC-2", size="class", color="label",hover_name="label", log_x=True, size_max=12)
fig.show()


4)2D Violin Plot

# Box Plot
fig = px.violin(sample, y="PC-1", x="PC-2", color="label", box=True, points="all", hover_data=['PC-1', 'PC-2', 'PC-3','label'])
fig.show()


5)3D Scatter Plot

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


6)Area Plot

面积图:表示一个变量相对于将数据点与线段相连的另一个变量的变化。 主成分(PC1,PC2和PC3)的可视化如下所示:

area_plt1 = px.area(sample, x="PC-1", y="PC-2", color="label", line_group="label")
area_plt1.show()
# py.plot(area_plt1, filename = 'area_plt1', auto_open=True)

area_plt2 = px.area(sample, x="PC-1", y="PC-3", color="label", line_group="label")
area_plt2.show()
# py.plot(area_plt2, filename = 'area_plt2', auto_open=True)

area_plt3 = px.area(sample, x="PC-2", y="PC-3", color="label", line_group="label")
area_plt3.show()
# py.plot(area_plt3, filename = 'area_plt2', auto_open=True)


Reference

Hyperspectral Image Analysis — Getting Started
什么是面积图?一篇文章带你了解层叠面积图!
“面积图”就是折线图吗?


高光谱图像分析:分类 I相关推荐

  1. 高光谱图像分类_高光谱图像分析-分类

    高光谱图像分类 初学者指南 (Beginner's Guide) This article provides detailed implementation of different classifi ...

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

    1.前言 超光谱图像 (HSI) 分析因其在从农业到监控的各个领域的应用而成为人工智能 (AI) 研究的前沿领域之一. 该领域正在发表许多研究论文,这使它变得更加有趣! 和"对于初学者来说, ...

  3. 基于深度神经网络的高光谱影响分类方法研究---MNF+自动编码器+Softmax (准确率比较低,17年的论文)

    论文地址 基于深度神经网络的高光谱影响分类方法研究 装备学院学报 遥感影像分类的问题:预处理复杂,高维特征提取困难,分类不够精确等缺陷 首先采用最大噪声分数来降低特征空间维度,然后将自动编码器与sof ...

  4. 高光谱图像分析:分类 II

    上一篇文章中使用 Pavia 大学的数据进行了数据探索性分析和可视化.可视化的代码,在上一篇文章中已经给出,只需要修改数据即可实现相应的可视化.本文重点介绍数据的降维和特征选择. 文章目录 Githu ...

  5. paper reading:高光谱遥感影像空谱特征提取与分类方法研究 - 康旭东

    这是15年的文章,具有科普的性质. 摘要部分 第一段 传统的遥感影像处理技术在分析高光谱影像时面临许多问题和挑战:如何解决高维数据小样本识别分类问题.如何实现高维数据的实时处理.如何提升光谱类似地物的 ...

  6. 高光谱图像的SVM分类

    高光谱图像的SVM分类 #本人小菜鸟一只,目前在学习高光谱图像分类的相关知识,感觉分享的代码实在少得可怜,前几天看了几篇大佬的代码分享,若有所思,按自己看得懂的方式重新整理了一下,分享一下. #这也是 ...

  7. 高光谱遥感影像分类研究进展 --- (15年论文,方法主要是常规处理,但是写的比较细)

    论文地址 高光谱遥感影像分类研究进展 南大.矿大.河海 15年的文章比较老,科普文,但是理论总结和语言用词都比较扎实 在总结分类策略的基础上,重点从以核方法(SVM)为代表的新型分类器设计.特征挖掘. ...

  8. 深度学习和高光谱图像分类

    高光谱图像分类 本人研究生在读期间,研究方向是深度学习(图像分类.目标检测).导师给了针对于高光谱图像进行分类的相关项目,由于涉及了太多与研究方向不一致的光谱学相关的陌生知识,写下这篇博文的主要目的是 ...

  9. 高光谱遥感图像相关知识梳理大全

    前言 ​ 本资料整理了高光谱遥感图像概念定义.分析处理与分类识别的基本知识.第一部分介绍高光谱图像的一般性原理和知识,第二部分介绍了高光谱图像的噪声问题:第三部分介绍高光谱图像数据冗余问题以及数据降维 ...

  10. 基于高光谱图像分类的分析研究

    本文简单介绍高光谱图像分类相关的特征提取.特征选择.分类方法 介绍 近年来,高光谱图像分类得到了广泛的研究,然而,高光谱遥感图像特征维度高.波段间相关性强以及光谱混合等特性给高光谱图像分类带来一些困难 ...

最新文章

  1. QEMU KVM Libvirt手册(7): 硬件虚拟化
  2. Qt中的QBoxLayout
  3. 2560介绍_炒股高手收益翻10倍,只因妙用这一招2560战法,看了都不亏了
  4. 通过select下拉框里的value控制div显示与隐藏
  5. w10系统老是自动息屏_快速修复win10系统关闭屏幕后又自动唤醒点亮的方法
  6. MuMu模拟器忘记锁屏密码
  7. java中的example_GitHub - lilei644/spring-java-example: 记录开发以及学习过程中Spring、Java相关的示例...
  8. 过压保护电路(OVP)
  9. 假期之不务正业—— Qt+FFmpeg+百度api进行视频的语音识别
  10. 华为云服务器部署tomcat+jdk
  11. 《iPad开发从入门到精通》——6.6节系统设置
  12. 万字博文让我们携手一起走进bs4的世界【python Beautifulsoup】bs4入门 find()与find_all()
  13. 蓝桥 区别质因数,因数
  14. 【工业智能】知识进化论:卓越运营是如何拥抱工业智能,如虎添翼的?
  15. 面试时应该采取什么方法才能克服紧张的情绪?
  16. hs8346v5联通 说明书_HS8546V5 移动界面 分区、jffs2原厂备份数据 备份恢复教程
  17. Chrome浏览器中启用flash插件
  18. python输入城市名称_python - 使用熊猫一次将多个城市名称格式化为每个城市的通用名称 - 堆栈内存溢出...
  19. 疯狂试探mysql单表insert极限:已实现每秒插入8.5w条数据
  20. UNP学习笔记-第三章套接字编程

热门文章

  1. python填空题大全_『Python题库 - 填空题』151道Python笔试填空题
  2. 输入年份月份判断是平年还是闰年及这个月有多少天
  3. oeasy教您玩转vim - 90 - # 语法定义syntax
  4. JDK7下载|JDK1.7下载可选择window版和linux版
  5. android10.0连接wifi后提示“已连接,但无法访问互联网”
  6. 无法听到计算机发出的声音怎么办,qq语音听不到对方的声音怎么办_电脑qq语音我听不到对方声音修复方法-win7之家...
  7. 学术会议海报制作和参考
  8. 搜索题集整理(DFSBFS)
  9. Some Thoughts
  10. 计算机win7如何连接wifi网络,win7台式电脑怎么连接wifi win7台式电脑如何设置wifi...