基于最大丰度分类的高光谱图像分析
这个例子展示了如何通过执行最大丰度分类(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)
测试数据包含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签名”)传说(类名,“位置”,“西北”)
估计丰富地图
方法创建端成员的丰度映射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([“大量的”一会{问}])在结束持有从
执行最大丰度分类
找出每个像素丰度值最大的通道数。每个像素返回的通道号对应于中的列团体
它包含与该像素的最大丰度值相关联的端元签名。显示按最大丰度值分类的像素的彩色编码图像。
[~, matchIdx] = max (abundanceMap [], 3);图imagesc(matchIdx) colormap(jet(numel(classNames)))“TickLabels”类名)
对分类区域进行分割,并将其覆盖在从高光谱数据立方体估计的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)));标题([“地区分类为”一会{问}])在结束持有从