基于深度学习的多光谱图像语义分割 —— 从原理到实践(第二节) 基于深度学习的多光谱图像语义分割 —— 从原理到实践第二节上一节我们建立了语义分割和多光谱图像的基本认知并明确了本示例的整体流程。现在进入实战第一步下载数据、加载到 MATLAB、理解数据结构并进行初步可视化。2. 数据获取与预处理2.1 下载预训练的 U‑Net 模型可选如果你只是想快速体验分割效果而不想花费数小时训练网络可以直接使用官方提供的预训练模型。该模型已经在 Hamlin Beach 数据集上训练了 70 个 epoch并取得了很好的精度。我们首先指定一个存放数据的文件夹这里使用系统临时目录下的rit18_data文件夹dataDirfullfile(tempdir,rit18_data);然后下载预训练网络的 ZIP 压缩包并解压加载其中的 net 变量 matlab matlab trainedNet_urlhttps://ssd.mathworks.com/supportfiles/...vision/data/trainedMultispectralUnetModel_v2.zip;downloadTrainedNetwork(trainedNet_url,dataDir);load(fullfile(dataDir,trainedMultispectralUnetModel,...trainedMultispectralUnetModel_v2.mat)); 注意downloadTrainedNetwork 是本示例自带的辅助函数它会自动处理下载和解压。如果你的网络环境无法直接访问 MathWorks 服务器可以手动下载该 ZIP 文件并解压到对应目录然后执行 load 命令。加载成功后工作区中会出现 net 变量一个 dlnetwork 对象这就是训练好的 U‑Net。2.2 下载原始数据集接下来下载 Hamlin Beach 多光谱数据集MAT 版本约 3.0 GB。同样使用辅助函数matlabdownloadHamlinBeachMSIData(dataDir);该函数会将 rit18_data.mat 文件下载到 dataDir 下。下载完成后我们将其加载到工作区matlabload(fullfile(dataDir,rit18_data.mat));此时工作区中会新增多个变量最重要的三个是train_data —— 训练集图像val_data —— 验证集图像test_data —— 测试集图像用 whos 查看它们的原始尺寸matlab whos train_data val_data test_data输出如下具体数值可能因版本略有差异text Name Size Bytes Class Attributes test_data7x12446x76541333663576uint16 train_data7x9393x5642741934284uint16 val_data7x8833x6918855493716uint16可以看到数据排列为 通道数 × 高度 × 宽度其中第 1 维是通道7 个通道第 2 维是宽度列数第 3 维是高度行数但 MATLAB 中常见的多通道图像布局是 高度 × 宽度 × 通道数。为了后续处理方便我们必须进行维度转置。2.3 维度重排从 CHW 到 HWC使用 permute 函数将第 2、3 维移到前面将通道维放到最后matlab train_datapermute(train_data,[231]);val_datapermute(val_data,[231]);test_datapermute(test_data,[231]);再次用 whos 检查matlab whos train_data val_data test_data现在尺寸变为text Name Size Bytes Class Attributes test_data12446x7654x71333663576uint16 train_data9393x5642x7741934284uint16 val_data8833x6918x7855493716uint16这样每个变量就是一个 高度 × 宽度 × 通道 的三维数组符合 MATLAB 图像的惯例。为什么顺序很重要因为后续函数如 histeq、imshow、blockedImage都默认前两维是空间维度第三维是通道。如果顺序不对这些函数会误解数据导致错误结果。2.4 了解光谱波段中心波长数据集中还提供了一个变量 band_centers表示每个通道的中心波长单位纳米matlabdisp(band_centers)输出text490550680720800900这里只列出了 6 个值因为第 7 通道是掩膜没有波长信息。对应关系为通道 1490 nm蓝色通道 2550 nm绿色通道 3680 nm红色通道 4720 nm近红外通道 5800 nm近红外通道 6900 nm近红外可见本数据集涵盖了可见光到近红外的广泛范围为植被、水体等判别提供了丰富信息。2.5 可视化多光谱数据为了直观感受不同通道的含义我们先显示 RGB 组合图像。已知 RGB 通道对应的是第 3红、2绿、1蓝通道因此提取这三个通道并组合matlab rgbTrainhisteq(train_data(:,:,[321]));rgbValhisteq(val_data(:,:,[321]));rgbTesthisteq(test_data(:,:,[321]));这里使用了 histeq 进行直方图均衡化目的是增强对比度使图像在屏幕上更明亮清晰原始数据是 16 位无符号整型直接显示可能偏暗。然后我们将三张图像的 RGB 分量并排显示为蒙太奇matlabmontage({rgbTrain,rgbVal,rgbTest},BorderSize10,BackgroundColorwhite);title(RGB Component of Training,Validation,and TestImage(Left to Right));运行后会得到类似下面的效果由于是文字描述无法显示实际图像你可以在 MATLAB 中亲自运行查看训练图像左覆盖了公园的主要区域包含树木、草地、道路、建筑等。验证图像中和测试图像右是不同航拍区域场景略有差异。2.6 显示近红外通道接下来单独显示第 4、5、6 通道均为近红外同样做直方图均衡化以便观察matlab ir4Trainhisteq(train_data(:,:,4));ir5Trainhisteq(train_data(:,:,5));ir6Trainhisteq(train_data(:,:,6));montage({ir4Train,ir5Train,ir6Train},BorderSize10,BackgroundColorwhite);title(Infrared Channels4,5,and6(Left to Right)of Training Image);你会看到第 4 通道720 nm中树木显得较暗而草地相对亮一些。第 5、6 通道800、900 nm中树木的亮度逐渐变化这反映了不同植被在近红外不同子波段的反射特性差异。这些额外的光谱信息正是多光谱图像相对于普通 RGB 的优势所在——它们能够“看到”人眼不可见的细节从而让深度学习模型更好地分离不同地物。2.7 查看掩膜通道第 7 通道是一个二值掩膜Mask值为 1 表示该像素属于有效分析区域即图像内部有意义的部分值为 0 表示图像边界或无效区域例如飞行器拍摄时边缘的暗角。我们提取三个数据集的掩膜matlab maskTraintrain_data(:,:,7);maskValval_data(:,:,7);maskTesttest_data(:,:,7);montage({maskTrain,maskVal,maskTest},BorderSize10,BackgroundColorwhite);title(Mask of Training,Validation,and TestImage(Left to Right));掩膜图像为黑白二值图白色区域代表有效像素。在后续的训练和评估中我们只关心掩膜内的像素忽略背景区域这样可以避免无效数据干扰模型学习。2.8 理解原始标签类别数据集中除了图像数据还包含对应的标签图train_labels、val_labels、test_labels。这些标签图与图像空间尺寸相同每个像素值是一个整数0~18表示该像素的类别 ID。我们可以查看所有类别的名称matlabdisp(classes)输出为text0.Other Class/Image Border1.Road Markings2.Tree3.Building4.Vehicle(Car,Truck,or Bus)5.Person6.Lifeguard Chair7.Picnic Table8.Black Wood Panel9.White Wood Panel10.Orange Landing Pad11.Water Buoy12.Rocks13.Other Vegetation14.Grass15.Sand16.Water(Lake)17.Water(Pond)18.Asphalt(Parking Lot/Walkway)共有 18 个类别其中 ID 0 是背景/图像边界不计入分析。本例为了简化问题只区分 植被Vegetation 和 非植被NotVegetation因此需要将原始标签合并为二类。2.9 将标签转换为二分类我们定义目标类别集合matlab classNames[NotVegetation,Vegetation];根据语义植被包括类别 ID 为 2 (Tree)、13 (Other Vegetation) 和 14 (Grass)。其余所有非背景类以及背景都属于非植被。我们创建新的标签数组其中值为 1 表示非植被值为 2 表示植被具体代码如下matlab vegetationClassIDs[21314];nonvegetationClassIDssetdiff(1:length(classes),vegetationClassIDs);labelsTrainzeros(size(train_labels),uint8);labelsTrain(ismember(train_labels,nonvegetationClassIDs))1;labelsTrain(ismember(train_labels,vegetationClassIDs))2;labelsValzeros(size(val_labels),uint8);labelsVal(ismember(val_labels,nonvegetationClassIDs))1;labelsVal(ismember(val_labels,vegetationClassIDs))2;这里使用 ismember 快速判断每个像素的原始类别是否属于目标集合然后赋值。注意我们将背景ID 0也归为非植被因为 nonvegetationClassIDs 包含所有非植被类别包括 ID 0。接着我们将验证集的真实标签保存为 PNG 文件以便后续评估时使用matlabimwrite(labelsVal,gtruth.png);2.10 可视化训练标签为了确认标签转换是否正确我们将训练集的 RGB 图像与新的二值标签叠加显示matlab cmap[101;010];% 第一行品红非植被第二行绿色植被Blabeloverlay(rgbTrain,labelsTrain,Transparency0.8,Colormapcmap);imshow(B,cmap);title(TrainingLabels(MagentaNotVegetation,GreenVegetation));numClassesnumel(classNames);ticks1/(numClasses*2):1/numClasses:1;colorbar(TickLabelscellstr(classNames),Ticksticks,TickLength0,TickLabelInterpreternone);运行后你会看到一幅彩色叠加图其中品红色区域代表非植被道路、建筑、水体等绿色区域代表植被树木、草地、灌木等。这样可以直观地判断标签质量以及分类的合理性。2.11 本节小结至此我们已经完成了下载预训练模型和原始数据集将数据从 CHW 格式转为 HWC 格式可视化 RGB、红外通道和掩膜理解多光谱数据的组成将原始 18 类标签合并为二分类保存验证集真实标签并可视化训练标签。下一节我们将面对一个现实挑战图像尺寸巨大无法一次性送入 GPU。届时我们将引入 分块处理Patch‑based Processing 技术利用 MATLAB 的 blockedImage 和 blockedImageDatastore 高效管理大图像数据。敬请期待第三节《分块图像与数据存储——让大图像训练不再困难》。

相关新闻

最新新闻

Headless数据库自治运维(中):主动巡检与智能诊断

Headless数据库自治运维(中):主动巡检与智能诊断

在上篇中,我们搭建了自治运维的三层核心架构,完成了从 “人驱动” 到 “系统主动治理” 的模式升级。而自治能力的第一道关口,就是感知能力 —— 能不能比人工更早、更全面地发现风险,能不能比人工更快、更准地定位根因&#xff0…

2026/7/18 3:34:39
ROS2 Action详解:长时任务调度与可中断反馈机制

ROS2 Action详解:长时任务调度与可中断反馈机制

1. 项目概述:为什么Action是ROS2中绕不开的“重型任务调度器”在ROS2开发中,刚从ROS1转过来的老手常会困惑:“我明明用Service就能发个指令、等个响应,为啥还要学Action?”——这问题我带过十几期ROS2实训班&#xff0…

2026/7/18 3:34:39
TS6120,G5080,MG3660,IP2780,TS9120,MP288,G2810,G3800故障码5B00,5B02,5B04,P07,E08,1700,1702,1704清零就修好了,亲测

TS6120,G5080,MG3660,IP2780,TS9120,MP288,G2810,G3800故障码5B00,5B02,5B04,P07,E08,1700,1702,1704清零就修好了,亲测

蓝奏云:点这里下载 密码:00 百度云:点这里下载 备用:pan.baidu.com/s/1gls2G4rqWWP-Mw-z6tVjnQ?pwd0000 常见型号如下: G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G151…

2026/7/18 3:34:39
Java JVM编译器优化:C1与C2原理及调优实战

Java JVM编译器优化:C1与C2原理及调优实战

1. Java运行时编译机制概述Java 1.8中的运行时编译系统是JVM性能优化的核心组件,主要分为Client Compiler(C1)和Server Compiler(C2)两种模式。这两种编译器在JVM启动时通过-client和server参数选择,分别针…

2026/7/18 3:34:39
多平台文件存储与 CDN 加速深度实践:从上传链路、元数据到权限分发的完整设计

多平台文件存储与 CDN 加速深度实践:从上传链路、元数据到权限分发的完整设计

在线教育平台的文件系统,本质上是“内容资产基础设施”。它既要支撑课程封面、富文本图片、PDF 课件、音频附件等轻量资源,也要和视频点播、课程权限、订单购买、学习端访问体验协同工作。 如果把文件模块做成一个简单的 upload 接口,前期看起…

2026/7/18 3:34:39
Android WebView与H5交互全解析:原理、优化与安全实践

Android WebView与H5交互全解析:原理、优化与安全实践

1. Android原生与WebView交互的核心场景在移动应用开发中,混合开发模式已经成为主流方案之一。作为Android开发者,我经常遇到需要在原生代码中嵌入Web页面的需求。WebView组件就像一座桥梁,连接着原生Android的强大功能和Web技术的灵活性。实…

2026/7/18 3:29:38

月新闻