新闻详情

新闻详情

首页 / 资讯中心 / 详情

QUH高光谱数据集与RC3DSSA在无人机土地覆盖分类中的实战指南

发布时间:2026/9/11 22:37:10来源:尧图网络
QUH高光谱数据集与RC3DSSA在无人机土地覆盖分类中的实战指南
简介面向遥感图像处理与土地覆盖分类研究这份资源提供青岛无人机高光谱成像仪数据集及配套的 Matlab 实现代码适合计算机、电子信息工程、数学等专业学生用于课程设计、期末大作业或毕业设计。整个压缩包包含二十一个文件有存放样本与标签的矩阵数据文件、高光谱影像、分类结果预览图、可执行的脚本文件以及一个数据压缩包整体大小约为十八兆字节。代码采用参数化编程关键参数便于修改注释清晰附带的案例数据可在 Matlab 2014、2019a、2024a 中直接运行帮助使用者快速理解高光谱土地覆盖分类的算法流程并根据自身数据调整参数完成实验对比。目前已有128人学习下载。对于希望掌握遥感影像分类与算法编程实现的研究者来说这套资料既能提供真实无人机高光谱样本又能作为算法调试、结果可视化和课程项目落地的实用工具。1. 为何QUH高光谱数据集在土地覆盖分类中比普通无人机影像更有说服力很多人拿到高光谱土地覆盖分类作业时第一反应是找一张RGB正射影像直接丢进卷积网络。等结果出来才发现地物类别只有四五种整体精度却上不去原因在于RGB波段太少草地、裸土和浅色屋顶在可见光下极易混淆。青岛无人机搭载的高光谱成像仪HSI生成的QUH数据集把连续几十个波段记录在同一景影像上每个像元的光谱曲线相当于一个“指纹”。QUH的价值不只是提供了一幅大图而是把航片分为Qingyun、Pingan、Tangdaowan三个片区并为每个片区准备好训练集与测试集连标签上色和结果图输出脚本也一起给出。这种结构特别适合课程设计和毕业设计不需要自己标注样本可以直接把精力放在分类模型上。唯一的门槛是搞清楚tif影像、mat样本和Matlab代码之间的对应关系这正是下面要拆开的部分。2. 从tif和mat文件到可训练样本QUH数据集的预处理主线2.1 文件清单里哪些是数据、哪些是结果解压后不要急着运行Demo先把文件按用途分一下类后面调试能省大量时间。QUH数据集里既包含原始高光谱影像也包含分类后的GeoTIFF结果图还有网络定义和可视化函数。我习惯先做一张映射表避免把结果图当成原始影像读入。文件/目录类型说明RC3DSSA_m_qy.tif、RC3DSSA_m_pa.tif、RC3DSSA_m_tdw.tifGeoTIFF结果图与m系列配合观察分类输出具体含义以读取后对比为准RC3DSSA_n_qy.tif、RC3DSSA_n_pa.tif、RC3DSSA_n_tdw.tifGeoTIFF结果图可能是中间特征或另一版结果图用于前后对比Qingyun_train.mat、Qingyun_test.matMat数据第一片区的训练/测试样本Pingan_train.mat、Pingan_test.matMat数据第二片区的训练/测试样本Tangdaowan_train.mat、Tangdaowan_test.matMat数据第三片区的训练/测试样本Demo_show_training_testing.mMatlab脚本主演示程序跑通训练和测试label2color_new.mMatlab函数将标签矩阵映射为RGB彩色图RC-3DSSA.zip压缩包网络定义、训练函数等核心代码从命名里能读出两条线索RC3DSSA_m_*和RC3DSSA_n_*分别对应三个子区域*_train.mat和*_test.mat互补。实际项目中我会把原始影像单独建一个目录将结果tif放到输出目录这样跑不同参数的实验不会覆盖原始数据。还有一点容易被忽略RC-3DSSA.zip解压后可能自带子目录直接双击m文件执行时Matlab找不到函数必须先加路径或把zip内容放到当前目录。2.2 用geotiffread读多波段影像别用imread高光谱GeoTIFF不是普通真彩色图直接用imread可能丢掉波段信息或把浮点影像截断成8位。标准做法是用Mapping Toolbox的geotiffread读取像素矩阵和空间参考对象读入后立刻转成double否则后续除法和统计运算会在uint8上产生溢出。% 读取QUH影像和坐标信息 [img3d, R] geotiffread(RC3DSSA_m_qy.tif); img3d double(img3d); % 转双精度避免计算截断 [rows, cols, bands] size(img3d); fprintf(影像尺寸: %d x %d, 波段数: %d\n, rows, cols, bands);geotiffread返回的R是空间参考对象后面把分类结果写成GeoTIFF时还会用到。bands如果大于10说明数据确实是高光谱格式。显示时从bands里挑三个波段组合成伪彩色图比如分别取20、35、28波段先做直方图拉伸再合成RGB肉眼看到的地物边界会比单波段清楚得多。高光谱读取的另一个坑是波段顺序。不同传感器输出的波段顺序可能是可见光在前、近红外在后也可能是按波长倒序。如果分类结果在某一个类别上整体错位先检查波段顺序是否和训练样本构建时的顺序一致。常见做法是在读入后打印一条光谱曲线和已知地物的反射特征对比确认顺序正确后再进入训练。2.3 mat文件的结构检查和训练/测试样本对齐*_train.mat和*_test.mat保存的并不是一整个影像而是按像元或像元块组织的样本。用load打开后先别急着取字段用whos看看变量列表再根据变量名确定数据结构。为了避免写死变量名我通常会做一次字段遍历data load(Qingyun_train.mat); fields fieldnames(data); for i 1:numel(fields) v data.(fields{i}); fprintf(%s: %s\n, fields{i}, mat2str(size(v))); end常见的组织方式有两种一种是保存一整张标签图和整个影像立方体通过训练索引和测试索引区分另一种是已经切好的特征矩阵行数是样本数列数是波段数再附加一列标签向量。QUH数据集中Demo_show_training_testing.m会直接引用这些mat文件所以更接近第一种。无论哪种结构最终都要得到三个东西训练特征或图像块、训练标签、测试标签。这里要特别注意对齐问题。高光谱分类里最常见的数据泄漏是把同一幅影像的相邻像元既放进了训练集又放进了测试集。如果train.mat和test.mat来自同一景Qingyun影像那么两个文件里的样本在空间上必须严格分开。我在跑类似数据集时会先对训练标签和测试标签的坐标范围做交叉检查看是否存在重叠坐标如果有重叠后续精度会虚高对论文和答辩都没有说服力。另一个隐患是类别编号不连续比如地物共6类标签却只有1、2、5、6Matlab的分类层一般要求类别从1开始连续编号遇到这种情况需要重新映射。3. RC3DSSA分类器为什么用3D卷积和残差注意力3.1 高光谱分类的核心是联合光谱和空间而不是简单堆叠卷积普通RGB影像的三个通道在卷积时会被当作三个标准平面空间位置相同但波段不同的像素之间没有专门建模。高光谱影像有几十个波段相邻波段之间的反射率变化是地物区分的重要线索。逐波段分类器把光谱曲线拆散相当于把一个二维信号压成一维丢弃了局部光谱形状信息。RC3DSSA这类方法采用3D卷积核例如3×3×D其中D是沿波段维度滑动窗口的长度卷积核在空间和光谱三个维度上同时移动一个特征图里的一个点能同时描述一个小空间邻域和一个光谱邻域中的联合响应。这就是“空间-光谱联合特征”的基本含义。回到QUH数据集青岛片区的典型地物包括建筑屋顶、沥青道路、草地、树冠和水体很多类别在单一波段上反射率几乎相同但在近红外附近差异明显。3D卷积通过光谱维度的窗口把这种差异编码进更高层特征而不是只依赖可见光波段的光谱强度。这种设计在训练样本量有限时尤其有效因为卷积核在光谱维是权值共享的不会因为波段数多就爆炸式增加参数量。3.2 残差连接解决退化问题注意力重标定光谱通道网络层数加深后训练误差反而升高的现象在高光谱小样本任务中很常见。QUH数据集每个片区的训练样本量并不大过深的网络容易过拟合过浅的网络难以捕获非线性光谱关系。RC3DSSA的思路和ResNet一样引入恒等映射让某几层学习的是输入与输出之间的残差浅层特征可以直接跳到深层梯度反传时多了一条短路训练更稳定。从实践角度看加入残差连接后学习率可以设得更大而不容易发散模型对初始化更不敏感。在残差之外RC3DSSA还加入了光谱-空间注意力。光谱注意力相当于一个可学习的掩码对每个波段赋予权重噪声波段权重趋近0判别性波段权重被放大。空间注意力则把聚焦区域集中在地物边界上减少背景像元对中心像元的干扰。实现时通常是在卷积输出后接一个全局平均池化经过两个全连接层产生权重向量再与原特征相乘。3.3 把RC-3DSSA包加入Matlab路径并观察网络结构RC-3DSSA.zip里封的是网络定义和训练函数。解压后建议放到项目根目录并在Matlab中以相对路径添加% 将RC-3DSSA目录及其子目录加入路径 addpath(genpath(RC-3DSSA)); savepath; % 查看网络结构前提是文件中有对应的构建函数 if exist(create_rc3dssa.m, file) lgraph create_rc3dssa(); analyze(lgraph); endsavepath的作用是把路径设置持久化到pathdef.m避免下次打开Matlab重新添加。analyze是Deep Learning Toolbox的网络结构可视化工具可以检查各层输出尺寸是否匹配。如果提示找不到create_rc3dssa函数用which -all *rc3dssa*搜索一下实际文件名然后再调用。这里有一个和普通CNN不同的参数需要重点关注3D卷积层的输入在Matlab中通常表示为五维张量维度顺序是[高度, 宽度, 深度, 通道, 批次]还是[高度, 宽度, 通道, 深度, 批次]不同版本定义可能不同。Matlab 2014和2019a对3D卷积的支持差异很大如果代码默认运行在2019a以上旧版本遇到“不支持三维卷积”的报错就很正常。常见做法是把光谱维拆成多个通道或在旧环境里改用自定义层。网络参数可以参考下面的表网络参数建议值对结果的影响3D卷积核空间大小3×3小核参数量少但感受野小光谱窗口长度5~9窗口越长越能捕捉光谱曲线趋势对样本量要求更高残差块数量2~3过多会在大patch下过拟合注意力层位置每个残差块后重标定特征提高判别力高光谱网络的训练还有一个容易被忽略的点验证集和测试集不能共用。很多人为了提升报告里的精度把测试集同时用来做早停和最终评估得到的数字会偏乐观。更可靠的做法是把mat文件中的训练集再按9:1拆出一个小验证集只在验证集上调整epoch最后才用*_test.mat做一次性评估。4. 跑通Demo_show_training_testing.m并理解训练测试闭环4.1 主脚本的执行顺序把QUH数据集的流程跑通最早要解决的其实不是网络结构而是脚本调用顺序。打开Demo_show_training_testing.m整体流程通常是这样加载mat数据生成训练和测试索引把影像切成长度为patch_size的立方体块调用RC3DSSA训练函数最后用label2color_new把预测矩阵转化为彩色图。按我拆脚本的习惯会先注释掉训练部分只跑到数据装载确认变量尺寸不出错再放开训练语句。% 主流程示意变量名以实际mat文件为准 load(Qingyun_train.mat); % 包含影像块和训练标签 load(Qingyun_test.mat); % 包含测试样本和真值 trainX train_data; % 训练样本 trainY train_label; % 训练标签 testX test_data; % 测试样本 testY test_label;紧接着做一次尺寸检查size(trainX) size(trainY)这一步的价值在于尽早发现三个问题样本矩阵是否为二维矩阵批训练时是否需要reshape成五维张量标签是否从0开始还是从1开始Matlab分类层要求类别标号和层输出维度一致训练集和测试集样本数是否合理如果训练集只有几百个样本网络深度必须相应降低。提示如果Matlab版本低于2019a建议先执行ver查看Deep Learning Toolbox版本并检查RC3DSSA里是否有fullyConnectedLayer、convolution3dLayer等只在高版本支持的函数。4.2 patch大小、epoch和学习率该怎么调在QUH数据集上直接使用默认参数通常能跑通但如果切换Pingan或Tangdaowan片区需要调整几个关键参数。patch大小是最敏感的一个patch太小分类结果会出现明显的盐和胡椒噪声patch太大训练样本间的重叠区域增多精度虚高。我一般把patch设成9×9光谱窗口长度取7。epoch设置成100用验证集做早停比固定迭代次数更稳。下面这些参数在Demo脚本中通常以变量形式写在文件头部参数推荐范围调整依据patch_size5~11空间分辨率高时用小patch保护边界spectral_win5~9取决于地物光谱特征宽度max_epoch80~150小样本任务超过200容易过拟合learning_rate0.0005~0.001Adam优化器常用0.001batch_size64~256显存或内存不足时减半这些参数影响的是“模型复杂度”和“有效样本量”之间的平衡。例如patch_size15在Qingyun片区训练准确率可能接近100%但测试精度反而下降因为相邻patch之间重复采样过于严重。调参时应优先看测试精度而不是训练精度。很多初学者会把训练精度当成模型好坏的标准在高光谱分类里这是最容易误导人的一点。4.3 精度评估和结果可靠性验证训练结束后Demo通常会输出总体精度OA、平均精度AA和Kappa系数。不要只看最后一行精度要把混淆矩阵打印出来逐类看错误来源。高光谱分类很容易出现“某一类精度很高另一类几乎被吞掉”的情况混淆矩阵能直接定位到具体类别。% 用confusionmat计算混淆矩阵 C confusionmat(testY, predictedLabel); OA sum(diag(C)) / sum(C(:)); row_sum sum(C, 2); AA mean((diag(C) ./ row_sum)); % Kappa系数 total sum(C(:)); P_o sum(diag(C)) / total; P_e sum(sum(C,1) .* sum(C,2)) / total^2; Kappa (P_o - P_e) / (1 - P_e); fprintf(OA: %.4f AA: %.4f Kappa: %.4f\n, OA, AA, Kappa);confusionmat会自动对齐类别顺序。AA计算的是每一类的生产者精度也就是对角元除以该类的行和最后取平均Kappa剔除了随机一致性影响更能反映真实分类能力。报告里只写OA在类别不均衡时说服力不足补上对角线混淆矩阵才是完整做法。另外QUH数据集三个片区的地物分布不完全一致跨片区结果不能直接对比。如果要证明算法泛化应该用一个片区训练、另一个片区测试而不是只做片区内划分。这也是数据集把mat文件按三个地点分目录保存的潜在用意。跑完一个片区后把网络参数重置再重新训练不要带着上一片区的权重直接测试否则会得到无意义的评估值。5. 用label2color_new.m可视化分类结果并写出带坐标的GeoTIFF5.1 修改颜色映射适应QUH地物类别label2color_new.m的作用是把整数标签矩阵转换成RGB图像。QUH数据集中通常有6到8类地物默认颜色可能和植被、水体、建筑的视觉习惯不一致。修改方式是在函数内部维护一张颜色查找表注意使用索引避免直接用HSV转RGB造成颜色不稳定。参考实现如下function rgb label2color_new(label) n max(label(:)); cmap zeros(n, 3); cmap(1,:) [0.5 0.5 0.5]; % 背景 cmap(2,:) [0 0.8 0]; % 植被 cmap(3,:) [0 0 1]; % 水体 cmap(4,:) [1 0 0]; % 建筑物屋顶 % 继续按地物类别调整 rgb ind2rgb(uint8(label), cmap); end这段代码的关键在ind2rgb的输入必须是从1开始的索引图。如果标签里有0表示背景需要先把0单独提出来再对非背景区域做映射最后拼回原尺寸否则颜色会整体错位一格。改完颜色后最好把分类结果图和原始伪彩色图并排显示检查道路、建筑等地物的轮廓是否对齐。5.2 保存带空间参考的分类结果图分类结果不能只是一张普通png否则后续做面积统计和其他GIS分析时没有坐标信息。使用第2章里geotiffread返回的R对象可以直接把标签图写回GeoTIFF% 将标签图和原始影像的空间参考一起写出 geotiffwrite(result_qy.tif, uint8(labelMap), R, CoordRefSysCode, 32650);32650是青岛常用的UTM 50N坐标系编码。如果不确定投影参数可以从原始影像的R对象读取也可以直接在geotiffinfo里查看坐标参考信息。写成GeoTIFF后还可以在ArcGIS或QGIS里叠加一版半透明分类结果用来检查分类边界和原始地物轮廓的吻合度这种方式比单纯贴一张彩色图更能体现无人机高光谱数据的空间细节也方便在答辩时快速展示不同片区的分类效果。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

ABP框架入门:ASP.NET Core企业级开发实战 2026/9/11 23:22:19

ABP框架入门:ASP.NET Core企业级开发实战

1. ABP框架概述与核心价值ABP(ASP.NET Boilerplate)是一个开源的应用程序框架,它基于ASP.NET Core平台,旨在为现代Web应用程序提供完整的解决方案。我第一次接触ABP是在2018年一个企业级项目选型时,当时团队需要快速构…

阅读更多 →
Python二手车爬虫与可视化毕业设计实战指南 2026/9/11 23:22:19

Python二手车爬虫与可视化毕业设计实战指南

简介:本资源是一套完整落地的本科毕业设计项目,面向计算机、数据科学及相关专业学生,聚焦二手车市场数据采集与商业分析实战场景。项目基于Python实现全流程:从主流平台动态爬取车辆信息,到SQLite本地数据库存储&#…

阅读更多 →
SDN流量预测与OpenFlow流表闭环控制系统 2026/9/11 23:22:19

SDN流量预测与OpenFlow流表闭环控制系统

简介:本资源是一套完整的基于SDN架构的流量预测与调度系统毕业设计项目,面向计算机、网络工程、人工智能及物联网等专业本科生与研究生,解决传统网络中流量动态性高、调度滞后、预测精度低等实际问题。项目采用Python后端Vue前端技术栈&#…

阅读更多 →
SSM+Vue药品管理系统开发实战:从架构设计到数据库实现 2026/9/11 23:22:19

SSM+Vue药品管理系统开发实战:从架构设计到数据库实现

简介:基于SSMVue的药品管理系统毕业设计资料包,面向需要完成Java课程设计与毕业设计的本科、专科学生,以及希望快速搭建B/S架构管理系统的开发者。系统围绕药品全流程管理,设置管理员、员工、用户三类角色,覆盖药品信息…

阅读更多 →
SDN流量预测与动态调度系统实战 2026/9/11 23:22:19

SDN流量预测与动态调度系统实战

简介:本资源是一套面向计算机相关专业学生与初阶开发者的SDN流量预测与调度系统毕业设计项目,融合网络虚拟化、时间序列预测与容器化部署能力,适用于课程设计、毕设选题及工程实践入门。压缩包含439个文件,主体为56个Python后端模…

阅读更多 →
Java财务管理系统:JSP+Servlet企业级毕设实战 2026/9/11 23:19:18

Java财务管理系统:JSP+Servlet企业级毕设实战

简介:本资源是一套完整的Java毕业设计项目——企业财务管理系统,面向计算机类本科生及Java初学者,解决毕业设计选题、系统开发、论文撰写与答辩全流程需求。压缩包共14个文件,包含3个MP4项目讲解视频(覆盖环境部署、部…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞