基于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 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()
该函数返回数据和地面实况或类,还显示数据和地面实况的大小,即 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 PCApca = 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)的可视化如下所示:



相关文章:

基于Python的高光谱图像分析教程
1、前言超光谱图像 (HSI) 分析因其在从农业到监控的各个领域的应用而成为人工智能 (AI) 研究的前沿领域之一。 该领域正在发表许多研究论文,这使它变得更加有趣! 和“对于初学者来说,在 HSI 上开始模式识别和机器学习是相当麻烦的”ÿ…...

【图神经网络】从0到1使用PyG手把手创建异构图
从0到1用PyG创建异构图异构图创建异构图电影评分数据集MovieLens建立二分图数据集转换为可训练的数据集建立异构图神经网络以OGB数据集为例HeteroData中常用的函数将简单图神经网络转换为异质图神经网络GraphGym的使用PyG中常用的卷积层参考资料在现实中需要对 多种类型的节点以…...

2023美赛春季赛思路分析汇总
将在本帖更新汇总2023美赛春季赛两个赛题思路,大家可以点赞收藏! 2023美赛春季赛各赛题全部解题参考思路资料模型代码等全部实时更新!第一时间获取全部美赛春季赛相关资料! 目前思路整理仅为部分,请大家耐心等待&…...

GPT4国内镜像站
GPT-4介绍GPT-4是OpenAI发布的最先进的大型语言模型,是ChatGPT模型的超级进化版本。与ChatGPT相比,GPT-4的推理能力、复杂问题的理解能力、写代码能力得到了极大的强化,是当前人工智能领域,最有希望实现通用人工智能的大模型。但G…...
代码随想录算法训练营第四十八天| 198 打家劫舍 213 打家劫舍II 337 打家劫舍III
代码随想录算法训练营第四十八天| 198 打家劫舍 213 打家劫舍II 337 打家劫舍III LeetCode 198 打家劫舍 题目: 198.打家劫舍 动规五部曲: 确定dp数组以及下标的含义 dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷…...

飞桨DeepXDE用例验证及评估
在之前发布的文章中,我们介绍了飞桨全量支持业内优秀科学计算深度学习工具 DeepXDE。本期主要介绍基于飞桨动态图模式对 DeepXDE 中 PINN 方法用例实现、验证及评估的具体流程,同时提供典型环节的代码,旨在帮助大家更加高效地基于飞桨框架进行…...
telegram连接本地Proxy连接不上
1.ClashX开启允许局域网连接。 2.重启ClashX和Telegram...

【分布式版本控制系统Git】| 国内代码托管中心-Gitee、自建代码托管平台-GitLab
目录 一:国内代码托管中心-码云 1. 码云创建远程库 2. IDEA 集成码云 3. 码云复制 GitHub 项目 二:自建代码托管平台-GitLab 1. GitLab 安装 2. IDEA 集成 GitLab 一:国内代码托管中心-码云 众所周知,GitHub 服务器在国外&…...

【面试】BIO、NIO、AIO面试题
文章目录什么是IO在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别什么是BIO什么是NIO什么是AIO什么NettyBIO和NIO、AIO的区别IO流的分类按照读写的单位大小来分:按照实际IO操作来分:按照读写时是否直接与硬盘,…...

C语言实现拼图求解
题目: 有如下的八种拼图块,每块都是由八块小正方块构成, 这些拼图块刚好可以某种方式拼合放入给定的目标形状, 请以C或C++编程,自动求解 一种拼图方式 目标拼图: 本栏目适合想要深入了解无向图、深度优先算法、编程语句如何实现算法、想要去接拼图算法的小伙伴。...
python --获取本机屏幕分辨率
pywin32 方法一 使用 win32api.GetDeviceCaps() 方法来获取显示器的分辨率。 使用 win32api.GetDC() 方法获取整个屏幕的设备上下文句柄,然后使用 win32api.GetDeviceCaps() 方法获取水平和垂直方向的分辨率。最后需要调用 win32api.ReleaseDC() 方法释放设备上下…...

Java多态
目录 1.多态是什么? 2.多态的条件 3.重写 3.1重写的概念 3.2重写的作用 3.3重写的规则 4.向上转型与向下转型 4.1向上转型 4.2向下转型 5.多态的优缺点 5.1 优点 5.2 缺点 面向对象程序三大特性:封装、继承、多态。 1.多态是什么࿱…...
绝对路径和相对路径
1.绝对路径:从根目录为起点到某一个目录的路径 使用计算机时要找到需要的文件就必须知道文件的位置,表示文件的位置的方式就是路径,例如只要看到这个路径:c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下…...

Linux第二次总结
Linux阶段总结 OSI模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 路由器的工作原理:最佳路径选择 三次握手四次挥手:... shell是翻译官把人类语言翻译成二进制语言 Tab作用:自动补齐、确认输入是否有误 …...

算法:贪婪算法、分而治之
算法:贪婪算法、分而治之 文章目录1.贪婪算法计数硬币实例12.分而治之分割/歇征服/解决合并/合并实例23.动态规划对照实例34.基本概念算法数据定义数据对象内置数据类型派生数据类型基本操作1.贪婪算法 设计算法以实现给定问题的最佳解决方案。在贪婪算法方法中&am…...

462. 最小操作次数使数组元素相等 II——【Leetcode每日一题】
462. 最小操作次数使数组元素相等 II 给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最小操作数。 在一次操作中,你可以使数组中的一个元素加 1 或者减 1 。 示例 1: 输入:nums [1,2,3] 输出:2 …...
对数据库的库及表的操作
全篇在MySQL操作下完成 在此之前,先介绍一下,字段、列类型及属性。 一、什么是字段、列类型、属性 (1)字段,一张表中列的名称;列类型,该列存储数据的类型;属性,描述列类型的特征。 …...
final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理
jdk动态代理还是cglib代理🧙jdk动态代理和cglib代理的示例JDK动态代理原理CGLIB代理final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理滚滚长江东逝水,浪花淘尽英雄。——唐代杨炯《临江仙》 jdk动态代理和cglib代理的示例 以下是一个使用…...

使用StaMPS_Visualizer
0 前言 StaMPS-Visualizer :由thho开发的用于可视化由StaMPS / MTI处理的DInSAR结果。 github地址:StaMPS-Visualizer 使用StaMPS_Visualizer需要配置好StaMPS,并安装好R和Rstudio Ubuntu中安装StaMPS StaMPS-Visualizer 安装步骤–在linux…...
高并发-高性能-高可用-结论版
文章目录上万的并发需要多少台web服务器一般单机能处理200请求,为何redis单机却能处理上万请求单线程每秒能处理(发送/响应)的http请求数三高的定义高并发的解决方案高性能的解决方案高可用的解决方案参考文章上万的并发需要多少台web服务器 …...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...