主要内容

利用库特征和SAM对高光谱图像进行分类

这个例子展示了如何使用光谱角度映射器(SAM)分类算法对高光谱图像中的像素进行分类。该算法通过计算一个像素的光谱与从ECOSTRESS光谱库中读取的纯光谱签名之间的光谱匹配得分,对测试数据中的每个像素进行分类。这个例子使用Jasper Ridge数据集的一个数据样本作为测试数据。测试数据包含四个潜在的端元,包括道路、土壤、水和树木。在这个例子中,你将:

  1. 通过计算每个测试像素的光谱与纯光谱之间的SAM光谱匹配得分,生成测试数据中存在的不同区域的评分图。纯光谱来自ECOSTRESS谱库。

  2. 使用最小评分标准对区域进行分类,并为测试数据中的每个像素分配一个类标签。

读取测试数据

方法从Jasper Ridge数据集读取测试数据超立方体函数。函数返回一个超立方体对象,该对象存储高光谱数据立方体以及从测试数据读取的相应波长和元数据信息。测试数据有198个光谱波段,波长范围为399.4 nm ~ 2457 nm。光谱分辨率可达9.9 nm,每个波段图像的空间分辨率为100 × 100。

hcube =超立方体(“jasperRidge2_R198.img”
DataCube: [100×100×198 int16]波长:[198×1 double]元数据:[1×1 struct]

从数据立方体中估计一个RGB图像。应用对比度拉伸来增强输出RGB图像的对比度。

rgbImg =再着色(hcube,“方法”“rgb”“ContrastStretching”,真正的);

显示测试数据的RGB图像。

图显示亮度图像(rgbImg);轴图像标题(“数据立方的RGB图像”

阅读ECOSTRESS光谱库的签名

ECOSTRESS光谱库由单个表面材料的纯光谱签名组成。如果一个像素的光谱与ECOSTRESS库中的特征匹配,则该像素完全由该单一表面材料组成。该光谱库汇集了3400多个天然和人造材料的光谱特征。因为您知道隐藏在测试数据中的端元,所以选择与这四个端元相关的ECOSTRESS谱库文件。

从ECOSTRESS光谱库中读取与水、植被、土壤和混凝土相关的光谱文件。使用这些类型的光谱特征:

  • 人工分类道路和公路结构

  • 土壤分为砂、粉、粘土区

  • 植被对树木区域进行分类

  • 水对水域进行分类

fileroot = matlabshared.supportpkg.getSupportPackageRoot ();目录(fullfile (fileroot,“工具箱”“图片”“supportpackages”高光谱的...“hyperdata”“ECOSTRESSSpectraFiles”));文件名= [“water.seawater.none.liquid.tir.seafoam.jhu.becknic.spectrum.txt”...“vegetation.tree.eucalyptus.maculata.vswir.jpl087.jpl.asd.spectrum.txt”...“soil.utisol.hapludult.none.all.87p707.jhu.becknic.spectrum.txt”...“soil.mollisol.cryoboroll.none.all.85p4663.jhu.becknic.spectrum.txt”...“manmade.concrete.pavingconcrete.solid.all.0092uuu_cnc.jhu.becknic.spectrum.txt”];自由= readEcostressSig(文件名)
自由=1×5带字段的struct数组:名称类型类子类ParticleSize属种SampleNo所有者波长range起源收集日期描述测量FirstColumn SecondColumn波长unit DataUnit FirstXValue LastXValue NumberOfXValues附加信息波长反射率

从库结构中提取类名。

一会= [lib.Class];

绘制从ECOSTRESS光谱库中读取的纯光谱签名。

图保存idx = 1:numel(lib) plot(lib(idx).波长,lib(idx).反射率,“线宽”, 2)结束盒子标题(“来自ECOSTRESS库的纯光谱签名”)包含(“波长(\妈妈)”) ylabel (的反射率(%))传说(类名,“位置”“东北”)标题(传说,“类名”)举行

计算测试数据中像素的得分图

方法找到每个像素光谱与库特征之间的光谱匹配分数spectralMatch函数。默认情况下,spectralMatch函数利用SAM分类算法计算两个光谱之间的相似度。该函数返回一个与高光谱数据立方体具有相同空间维度的数组,通道等于指定的库签名的数量。每个通道都包含单个库签名的评分映射。在本例中,指定了5个ECOSTRESS光谱库文件用于比较,高光谱数据立方体的每个波段的空间维度为100 * 100像素。因此,分数映射的输出数组的大小是100 × 100 × 5。

scoreMap = spectralMatch(自由、hcube);

显示分数地图。

图蒙太奇(scoreMap,“大小”[1元素个数(自由)),“BorderSize”10)标题(“获得每个纯光谱的评分图”“字形大小”14) colormap(飞机);colorbar

使用最小评分标准对像素进行分类

SAM值越低,光谱相似性越高。通过在库签名中为每个像素找到最佳匹配,使用最小得分标准对测试像素进行分类。其结果是一个基于像素的分类映射,其中每个像素的值是库签名文件的索引自由该像素的SAM值最低。例如,如果分类映射中的一个像素值为1,则该像素与中的第一个库签名具有很高的相似性自由

[~, classMap] = min (scoreMap [], 3);

创建一个类表,将分类映射值映射到用于光谱匹配的ECOSTRESS库签名。

classTable =表((min (classMap(:)):马克斯(classMap(:))),类名,...“VariableNames”, {“分类映射值”“匹配库签名”})
classTable =5×2表分类映射值匹配库签名  ________________________ __________________________ 1“海水”2“树”3“Utisol”4“软土”5“具体”

显示高光谱数据的RGB图像和分类结果。目测结果表明,光谱匹配能有效地对每个像素进行分类。

无花果=图(“位置”,[0 0 700 300]);axes1 =轴(“父”无花果,“位置”,[0.04 0 0.4 0.9]);显示亮度图像(rgbImg“父”, axes1);轴标题(“数据立方的RGB图像”2 .中文:“父”无花果,“位置”,[0.47 0 0.45 0.9]);显示亮度图像(classMap“父”axes2)轴colormap (jet(元素个数(自由)))标题(“Pixel-wise分类地图”) ticks = linspace(1.4,4.8,numel(lib));colorbar (“滴答”蜱虫,“TickLabels”类名)

参考文献

Kruse, F.A, A.B. Lefkoff, J.W. Boardman, K.B. Heidebrecht, A.T. Shapiro, P.J. Barloon, A.F.H. Goetz。光谱图像处理系统(SIPS) -成像光谱仪数据的交互式可视化和分析。环境遥感44岁的没有。2-3(1993年5月):145-63。https://doi.org/10.1016/0034 - 4257 (93) 90013 - n。

另请参阅

|||

相关的话题

Baidu
map