主要内容

基于库特征和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”
hcube = hypercube with properties: [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.金宝appsupportpkg.getSupportPackageRoot ();目录(fullfile (fileroot,“工具箱”“图片”“金宝appsupportpackages”高光谱的...“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带有字段的结构数组:名称类型类子类粒子属物种SampleNo所有者波长范围来源收集日期描述测量第一列第二列波长单位数据单位FirstXValue LastXValue NumberOfXValues附加信息波长反射率⋮

从库结构中提取类名。

一会= [lib.Class];

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

图保存idx = 1:num (lib) plot(lib(idx).Wavelength,lib(idx). reflector,“线宽”, 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图像”) axes2 =轴(“父”无花果,“位置”,[0.47 0 0.45 0.9]);显示亮度图像(classMap“父”axes2)轴colormap (jet(元素个数(自由)))标题(“Pixel-wise分类地图”) ticks = linspace(1.4,4.8,numel(lib));colorbar (“滴答”蜱虫,“TickLabels”类名)

参考文献

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。

另请参阅

|||

相关的话题