主要内容

基于最大丰度分类的高光谱图像分析

这个例子展示了如何通过执行最大丰度分类(MAC)来识别高光谱图像中的不同区域。丰度图描述了高光谱图像中端元的分布。图像中的每个像素要么是a纯像素或者一个混合像素.为每个像素获得的丰度值集表示在该像素中出现的每个端元的百分比。在本例中,您将对高光谱图像中的像素进行分类,方法是找到每个像素的最大丰度值并将其分配给相关的端成员类。

本示例使用来自Pavia University数据集的数据样本作为测试数据。测试数据包含9个端元,代表这些地面真相类:沥青,草地,砾石,树木,油漆金属板,裸露的土壤,沥青,自堵砖和阴影。

加载和可视化数据

加载.mat在工作区中包含测试数据的文件。的.mat文件包含数组paviaU,表示高光谱数据立方体和矩阵签名,表示从高光谱数据中提取的9个端元签名。该数据立方体有103个光谱波段,波长从430纳米到860纳米不等。几何分辨率为1.3米,每个波段图像的空间分辨率为610 × 340。

负载(“paviaU.mat”);img = paviaU;sig =签名;

计算每个光谱波段的中心波长,将波长范围均匀地间隔在光谱波段的数量上。

波长范围= [430 860];numBands = 103;波长= linspace (wavelengthRange (1) wavelengthRange (2), numBands);

创建一个超立方体对象使用高光谱数据立方体和中心波长。然后根据高光谱数据估计出RGB图像。设置ContrastStretching参数值真正的以提高RGB输出的对比度。可视化RGB图像。

hcube =超立方体(img,波长);rgbImg =再着色(hcube,“方法”“RGB”“ContrastStretching”,真正的);图imshow (rgbImg)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

测试数据包含9个ground truth类的端成员签名。每一列的团体包含一个基础真值类的端成员签名。创建一个表,列出每个端成员的类名和对应的列团体

num = 1:尺寸(sig, 2);endmemberCol = num2str (num”);一会= {“沥青”‘草地’“碎石”“树”金属板画的裸露的土壤的...“沥青”“自我阻塞砖”“阴影”};表(endmemberCol,一会,“VariableName”, {团体的列“Endmember类名”})
ans =9×2表列团体Endmember类的名称  _____________ ________________________ 1{“沥青”}2{“草地”}3{“碎石”}4{‘树木’}5{画金属片的}6{“裸露的土壤”}7{“沥青”}8{“自我阻塞砖”}9{“阴影”}

绘制端元签名。

图绘制(sig)包含(带数字的) ylabel (的数据值) ylim([400 2700]) title(“Endmember签名”)传说(类名,“位置”“西北”

图中包含一个axes对象。标题为Endmember Signatures的axis对象包含9个类型为line的对象。这些对象代表沥青,草地,砾石,树木,油漆金属板,裸露的土壤,沥青,自堵砖,阴影。

估计丰富地图

方法创建端成员的丰度映射estimateAbundanceLS函数,并选择方法为全约束最小二乘(FCLS)。该函数将丰度图输出为三维数组,空间维度作为输入数据。每个通道都是对应签名列的端元的丰度映射。在本例中,输入数据的空间维度是610 × 340,端元的数量是9。输出丰度图的大小是610 × 340 × 9。

abundanceMap = estimateAbundanceLS (hcube、团体、“方法”尺柜的);

显示丰度图。

无花果=图(“位置”,[0 0 1100 900]);n =装天花板(√大小(abundanceMap, 3)));cnt = 1:size(plentiancemap,3) subplot(n,n,cnt) imagesc(plentiancemap (:,:,cnt)) title([“大量的”一会{问}])结束持有

图中包含9个轴对象。标题为Abundance of Asphalt的坐标轴对象1包含一个类型为image的对象。标题为Abundance of Meadows的Axes对象2包含一个类型为image的对象。标题为“砾石丰度”的Axes对象3包含一个类型为image的对象。标题为“丰富的树”的Axes对象4包含一个类型为image的对象。坐标轴对象5,标题为丰富的彩绘金属板包含一个类型为image的对象。标题为丰度裸露土壤的axis对象6包含一个类型为image的对象。标题为丰度沥青的Axes对象7包含一个类型为image的对象。axis对象8的标题为丰富的自我阻塞砖块包含一个类型为image的对象。标题为“丰富的阴影”的Axes对象9包含一个类型为image的对象。

执行最大丰度分类

找出每个像素丰度值最大的通道数。每个像素返回的通道号对应于中的列团体它包含与该像素的最大丰度值相关联的端元签名。显示按最大丰度值分类的像素的彩色编码图像。

[~, matchIdx] = max (abundanceMap [], 3);图imagesc(matchIdx) colormap(jet(numel(classNames)))“TickLabels”类名)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

对分类区域进行分割,并将其覆盖在从高光谱数据立方体估计的RGB图像上。

segmentImg = 0(大小(matchIdx));overlayImg = 0(大小(abundanceMap, 1),大小(abundanceMap, 2), 3,大小(abundanceMap, 3));i = 1:size(plentiancemap,3) segmentmg (matchIdx==i) = 1;overlayImg(::,:,我)= imoverlay (rgbImg segmentImg);segmentImg = 0(大小(matchIdx));结束

显示分类和叠加的高光谱图像区域及其类名。从这些图像中,你可以看到沥青、树木、裸露的土壤和砖区域已经被准确地分类。

图(“位置”,[0 0 1100 900]);n =装天花板(√大小(abundanceMap, 3)));cnt = 1:size(abundance (3)) subplot(n,n,cnt);显示亮度图像(uint8 (overlayImg (:,:,: cnt)));标题([“地区分类为”一会{问}])结束持有

图中包含9个轴对象。标题为Regions Classified as Asphalt的Axes对象1包含一个类型为image的对象。标题为Regions Classified as Meadows的Axes对象2包含一个类型为image的对象。标题为Regions Classified as砾石的Axes对象3包含一个类型为image的对象。标题为“区域分类为树”的Axes对象4包含一个类型为image的对象。标题为“区域分类为已绘金属板”的axis对象5包含一个类型为图像的对象。标题为“区域分类为裸露土壤”的axis对象6包含一个类型为图像的对象。标题为“区域分类为沥青”的Axes对象7包含一个类型为image的对象。标题为“区域分类为自块砖块”的Axes对象8包含一个类型为image的对象。标题为“区域分类为阴影”的Axes对象9包含一个类型为image的对象。

另请参阅

||

相关的话题

Baidu
map