基于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服务器 …...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...