当前位置: 首页 > article >正文

遥感入门实战:用Python和Scikit-learn搞定PaviaU高光谱数据预处理(附完整代码)

遥感入门实战用Python和Scikit-learn搞定PaviaU高光谱数据预处理附完整代码高光谱遥感图像处理正逐渐成为环境监测、农业评估和城市规划等领域的重要工具。对于刚接触这一领域的技术人员来说PaviaU数据集是一个理想的起点。本文将带你从零开始使用Python生态中的常用工具完成高光谱数据的全流程预处理为后续的机器学习任务打下坚实基础。1. 环境准备与数据获取在开始处理PaviaU数据集之前我们需要搭建合适的工作环境。推荐使用Anaconda创建独立的Python环境避免依赖冲突conda create -n hyperspectral python3.8 conda activate hyperspectral pip install numpy scipy matplotlib scikit-learn jupyterPaviaU数据集可以通过学术资源网站免费获取通常以.mat格式存储。这个数据集由ROSIS-3传感器采集包含610×340像素的图像每个像素有103个光谱波段覆盖了意大利帕维亚大学校园的多种地表类型沥青路面草地砾石树木金属板裸土砖块阴影提示下载数据集时注意检查文件完整性.mat文件大小通常在100MB左右过小的文件可能下载不完整。2. 数据加载与初步探索使用Python加载.mat文件需要scipy.io模块。PaviaU数据集在.mat文件中以键值对形式存储我们需要特别关注paviaU这个键import scipy.io import numpy as np # 加载.mat文件 mat_data scipy.io.loadmat(PaviaU.mat) raw_data mat_data[paviaU] # 获取原始数据 print(f数据形状: {raw_data.shape}) # 应输出(610, 340, 103)高光谱数据与普通RGB图像的主要区别在于特性RGB图像高光谱图像波段数量3103值范围0-255无固定范围信息维度空间色彩空间光谱初步可视化可以帮助我们理解数据特性。我们可以选择几个代表性波段进行显示import matplotlib.pyplot as plt fig, axes plt.subplots(1, 3, figsize(15,5)) axes[0].imshow(raw_data[:,:,30], cmapgray) # 显示第30波段 axes[0].set_title(波段30) axes[1].imshow(raw_data[:,:,50], cmapgray) # 显示第50波段 axes[1].set_title(波段50) axes[2].imshow(raw_data[:,:,80], cmapgray) # 显示第80波段 axes[2].set_title(波段80) plt.show()3. 数据标准化处理高光谱数据各波段的数值范围差异较大标准化是必不可少的预处理步骤。Scikit-learn的StandardScaler能有效完成这一任务from sklearn.preprocessing import StandardScaler # 将3D数据重塑为2D (样本×特征) 以便标准化 height, width, bands raw_data.shape data_2d raw_data.reshape(-1, bands) # 初始化并拟合标准化器 scaler StandardScaler() scaler.fit(data_2d) # 应用标准化 data_standardized scaler.transform(data_2d) # 恢复原始形状 data_processed data_standardized.reshape(height, width, bands)标准化过程中常见的几个问题及解决方案内存不足对于大型数据集可以分批处理NaN值检查数据中是否存在无效值必要时进行填充零方差特征某些波段可能方差为零需要特殊处理注意标准化参数(scaler)需要保存以便对新数据应用相同的变换。4. 样本切片生成与数据集构建为准备机器学习任务我们需要将图像转换为适合模型输入的样本切片。以下是创建样本切片的完整流程import os from sklearn.utils import shuffle # 参数设置 PATCH_SIZE 17 # 切片大小 TEST_FRAC 0.2 # 测试集比例 OUTPUT_CLASSES 9 # 类别数量 MARGIN 8 # 边缘填充 def pad_data(X, margin): 边缘填充函数 new_X np.zeros((X.shape[0], X.shape[1]2*margin, X.shape[2]2*margin)) new_X[:, margin:-margin, margin:-margin] X return new_X def create_patch(X, patch_size, h, w): 创建单个切片 patch X[:, h:hpatch_size, w:wpatch_size] # 波段级中心化 for i in range(X.shape[0]): patch[i] patch[i] - np.mean(patch[i]) return patch # 边缘填充 data_padded pad_data(data_processed, MARGIN) # 初始化存储结构 train_patches, test_patches [], [] train_labels, test_labels [], [] # 遍历所有类别 for class_id in range(OUTPUT_CLASSES): class_patches [] class_labels [] # 遍历图像空间维度 for h in range(data_processed.shape[1]): for w in range(data_processed.shape[2]): if label[h,w] class_id1: # 标签从1开始 patch create_patch(data_padded, PATCH_SIZE, h, w) class_patches.append(patch) class_labels.append(class_id) # 打乱并划分数据集 class_patches, class_labels shuffle(class_patches, class_labels) split_idx int(len(class_patches) * TEST_FRAC) test_patches.extend(class_patches[:split_idx]) train_patches.extend(class_patches[split_idx:]) test_labels.extend(class_labels[:split_idx]) train_labels.extend(class_labels[split_idx:]) # 转换为numpy数组 train_patches np.array(train_patches) test_patches np.array(test_patches) train_labels np.array(train_labels) test_labels np.array(test_labels)5. 数据保存与后续使用处理完成的数据可以保存为多种格式便于后续使用。以下是保存为.npy格式的示例# 创建保存目录 os.makedirs(processed_data, exist_okTrue) # 保存训练集 np.save(processed_data/train_patches.npy, train_patches) np.save(processed_data/train_labels.npy, train_labels) # 保存测试集 np.save(processed_data/test_patches.npy, test_patches) np.save(processed_data/test_labels.npy, test_labels)对于深度学习框架数据通常需要转换为张量格式import torch # 转换为PyTorch张量 train_tensor torch.from_numpy(train_patches).float() train_labels_tensor torch.from_numpy(train_labels).long() # TensorFlow示例 import tensorflow as tf train_dataset tf.data.Dataset.from_tensor_slices((train_patches, train_labels))在实际项目中我发现将切片尺寸设置为奇数如17×17效果通常更好因为这样每个切片都有明确的中心像素。边缘填充的大小应至少为(PATCH_SIZE-1)/2这样才能确保原始图像边缘的像素也能成为切片的中心。

相关文章:

遥感入门实战:用Python和Scikit-learn搞定PaviaU高光谱数据预处理(附完整代码)

遥感入门实战:用Python和Scikit-learn搞定PaviaU高光谱数据预处理(附完整代码) 高光谱遥感图像处理正逐渐成为环境监测、农业评估和城市规划等领域的重要工具。对于刚接触这一领域的技术人员来说,PaviaU数据集是一个理想的起点。本…...

Cursor-Free-VIP技术深度解析:AI编程助手限制突破的完全指南

Cursor-Free-VIP技术深度解析:AI编程助手限制突破的完全指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...

算法竞赛c++.新人每日一练.贪心算法(P1106删数问题 洛谷)

该题仍然是贪心思维,但是不能只思考删去最大的数字。如反例13245,做一次删数操作。删去最大的数得到1324,但删去3得到的数是1245.这是因为虽然删去的5是虽然是最大的数,但是3还在数字的高位上(就是百位)。所…...

SDRangel实战测评:主流SDR硬件性能对决与深度对比

SDRangel实战测评:主流SDR硬件性能对决与深度对比 【免费下载链接】sdrangel SDR Rx/Tx software for Airspy, Airspy HF, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay and FunCube 项目地址: https://gitcode.com/gh_mirrors/sd/sdrangel 在软件…...

Electron实战:从零构建跨平台桌面应用的全流程指南

1. 为什么选择Electron开发桌面应用? 第一次接触Electron是在2016年,当时团队需要快速开发一个跨平台的内部工具。尝试过QT、JavaFX等方案后,最终被Electron的"Web技术栈原生能力"的组合所吸引。用HTML写界面、用JavaScript调系统A…...

为什么选择Xtreme Download Manager:500%下载加速的终极解决方案

为什么选择Xtreme Download Manager:500%下载加速的终极解决方案 【免费下载链接】xdm Powerfull download accelerator and video downloader 项目地址: https://gitcode.com/gh_mirrors/xd/xdm 在当今数字时代,下载速度直接影响着我们的工作效率…...

PDFgear高效办公:10个必学技巧,大幅提升PDF处理效率

在日常办公与学习中,PDF已经成为最常用的文档格式之一。PDFgear作为一款免费、全能、轻量的PDF处理工具,集转换、编辑、OCR、压缩、加密等功能于一体,深受办公人群喜爱。但很多用户只用到基础功能,没有发挥它的真正效率。 今天给…...

用Activiti/Flowable跑一遍就懂了:BPMN2.0四种网关的Java代码与执行日志全解析

深入解析BPMN2.0四大网关:Activiti/Flowable实战与日志分析 在业务流程管理领域,BPMN2.0标准中的网关(Gateways)是控制流程走向的核心元素。本文将基于Spring Boot环境,通过Activiti/Flowable引擎的实际代码演示,结合执行日志和数…...

MT3201 普通 300/900ns 单线归零码三通道 LED 恒流驱动控制芯片

概述 MT3201 是单线归零码三通道 LED(发光二极管显示器)恒流驱动控制芯片,采用 300/900ns 单线归零码通讯协议。 MT3201 芯片内部集成有单线归零码数字接口、数据锁存器、LED 输出恒流驱动、内置 RC 振荡器、输出数据自动整形转发等电路。 MT…...

基于SpringBoot+Vue图书馆座位预约系统设计与实现+毕业论文+答辩PPT+指导搭建视频

开发工具: Idea或Eclipse数据库: MySQLJar包仓库: Maven前端框架: Vue2后端框架: Springboot具体请看视频演示源码已经过本人亲自测试,可完美运行...

高斯分布与拉普拉斯分布:从数学原理到Python实战

1. 高斯分布与拉普拉斯分布的核心数学原理 我第一次接触高斯分布是在大学物理实验课上,教授用它来描述测量误差。当时觉得这个"钟形曲线"特别神奇,后来才发现它无处不在——从考试成绩分布到股票价格波动。而拉普拉斯分布则是在研究金融数据时…...

终极指南:如何用ChemCrow AI助手在5分钟内完成复杂化学分析

终极指南:如何用ChemCrow AI助手在5分钟内完成复杂化学分析 【免费下载链接】chemcrow-public Chemcrow 项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public ChemCrow是一个基于大语言模型的化学智能助手,通过整合12种专业化学工具&am…...

KCN-GenshinServer:5步快速搭建原神私服的终极GUI解决方案

KCN-GenshinServer:5步快速搭建原神私服的终极GUI解决方案 【免费下载链接】KCN-GenshinServer 基于GC制作的原神一键GUI多功能服务端。 项目地址: https://gitcode.com/gh_mirrors/kc/KCN-GenshinServer 你是否曾想过在自己的电脑上搭建一个原神私服&#x…...

AdaIN在StyleGAN中的应用:从风格迁移到图像生成的进阶之路

AdaIN在StyleGAN中的应用:从风格迁移到图像生成的进阶之路 当你在深夜刷到一张梵高风格的宠物照片时,可能不会想到这背后藏着怎样的技术魔法。这种将艺术风格瞬间迁移到任意内容图像的能力,正是自适应实例归一化(AdaIN&#xff09…...

ComfyUI IPAdapter Plus完整指南:10分钟掌握AI图像风格转换与多模态生成

ComfyUI IPAdapter Plus完整指南:10分钟掌握AI图像风格转换与多模态生成 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus ComfyUI IPAdapter Plus是一个功能强大的开源插件,专为C…...

极域电子教室终极破解指南:如何用JiYuTrainer实现自主学习与教学平衡

极域电子教室终极破解指南:如何用JiYuTrainer实现自主学习与教学平衡 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer JiYuTrainer是一款专为破解极域电子教室系统限制…...

Blender化学品插件终极指南:快速创建专业3D分子模型

Blender化学品插件终极指南:快速创建专业3D分子模型 【免费下载链接】blender-chemicals Draws chemicals in Blender using common input formats (smiles, molfiles, cif files, etc.) 项目地址: https://gitcode.com/gh_mirrors/bl/blender-chemicals 还在…...

Cursor Pro免费激活实用指南:一键解锁AI编程助手完整功能

Cursor Pro免费激活实用指南:一键解锁AI编程助手完整功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your …...

如何用AntiDupl.NET快速清理电脑中的重复图片:终极免费解决方案

如何用AntiDupl.NET快速清理电脑中的重复图片:终极免费解决方案 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾为电脑里堆积如山的重复图片而烦恼…...

免费获取百度文库文档的简单高效方案

免费获取百度文库文档的简单高效方案 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 百度文库助手是一个专门为百度文库用户设计的实用工具,能够帮助你免费获取文库文档内容&#xff0…...

Windows网络排错神器:用PowerShell的Find-NetRoute命令3步定位连接问题

Windows网络排错实战:用PowerShell三步精准定位连接故障 办公室里突然上不了网?作为Helpdesk工程师,你可能会遇到这样的场景:用户焦急地报告"网络断了",而你需要快速定位问题根源。传统方法可能需要反复切换…...

告别龟速!在Windows上用Bun加速你的Vue/React项目(附PowerShell报错解决)

告别龟速!在Windows上用Bun加速你的Vue/React项目(附PowerShell报错解决) 如果你是一名Windows平台的前端开发者,是否经常被npm install的漫长等待折磨得失去耐心?或是看着yarn在安装依赖时缓慢爬行的进度条感到绝望&a…...

李慕婉-仙逆-造相Z-Turbo 从提示词到精美图片:深度解析提示词工程核心技巧

李慕婉-仙逆-造相Z-Turbo 从提示词到精美图片:深度解析提示词工程核心技巧 你是不是也遇到过这样的情况:看到别人用AI模型生成的图片,细节丰富、光影绝美、氛围感十足,而自己用同样的模型,输入描述后得到的图片却总是…...

Qwen2.5-72B-GPTQ-Int4快速上手:3步完成镜像免配置与Web前端调用

Qwen2.5-72B-GPTQ-Int4快速上手:3步完成镜像免配置与Web前端调用 1. 模型简介 Qwen2.5-72B-Instruct-GPTQ-Int4是通义千问大模型系列的最新版本,作为一款72.7亿参数的大型语言模型,它在多个方面实现了显著提升: 知识量与能力增…...

别再死记硬背Gamma、HLG、PQ公式了!用Python手动画出三条曲线,彻底搞懂它们的区别

用Python可视化Gamma、HLG、PQ曲线:从代码实践理解HDR核心算法 在数字影像处理领域,Gamma校正、HLG(Hybrid Log-Gamma)和PQ(Perceptual Quantizer)是三种关键的传递函数(Transfer Function&…...

解锁WeMod完整功能:Wand-Enhancer开源增强工具完全指南

解锁WeMod完整功能:Wand-Enhancer开源增强工具完全指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 想要免费解锁WeMod游戏助手的专业版功…...

基于物联网技术的智慧餐厅管理系统设计与实现(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T1032309M设计简介:本设计是基于物联网技术的智慧餐厅系统设计,主要实现以下功能:通过RFID感应模块通过对RFID卡进行监测…...

QMIX算法解析:多智能体强化学习中的值函数分解与单调性约束

1. QMIX算法概述 多智能体强化学习(MARL)是近年来人工智能领域的热门研究方向之一。想象一下星际争霸中的战斗场景:一队机枪兵需要协作击败敌人,每个单位都需要根据局部观察做出决策,同时保持整体战术配合。这正是QMIX…...

栋察宇宙(五十):C语言数据类型

分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为大家带来“C语言数据类型”。欢迎您的访问!Share interest, spread happiness, increase knowledge, and leave beaut…...

从无人机到平衡车:拆解基于四元数EKF的MPU9250数据融合,搞定你的第一个姿态感知项目

从无人机到平衡车:拆解基于四元数EKF的MPU9250数据融合,搞定你的第一个姿态感知项目 想象一下,当你第一次尝试让两轮小车自主保持平衡时,那种既兴奋又忐忑的心情。传感器数据在屏幕上跳动,但小车却像喝醉了一样左右摇…...