高光谱地物识别
高光谱图像分类方法与传统的多光谱分类有本质的区别,从高光谱图像的每个像元均可以获取一条连续的波谱曲线,就可以考虑用已知的波谱曲线和图上每个像元获取的波谱曲线进行对比,理想情况下两条波谱曲线一样,就能说明这个像元是哪种物质。我们把高光谱图像分类、物质识别、探测等称为波谱识别。
ENVI 提供许多波谱分析方法,包括:二进制编码、波谱角分类、线性波段预测(LSFit)、线性波谱分离、光谱信息散度、匹配滤波、混合调谐匹配滤波(MTMF)、包络线去除、光谱特征拟合、多范围光谱特征拟合等。下面以一高光谱数据为例,用波谱角分析方法、二进制编码法和波谱信息散度法从高光谱图像中识别物质的操作过程。
1 从标准波谱库选择端元进行地物识别
第一步:端元波谱收集
ENVI 的端元波谱收集途径非常多,包括 ASCII 文件、ASD 测量文件、波谱库、ROI/矢量文件、统计文件、剖面波谱图、N 维可视化分析器、二维散点图、SMACC 工具等。这里我们选择从波谱库中收集
端元波谱的方式。
- 启动 ENVI,打开高光谱数据 CupriteReflectance.dat
- 单击主菜单 Display-> Spectral Library Viewer,打开 usgs(1994)->minerals_asd_2151.sli,点击 Alunite、Calcite、Prehnite GDS613.a、Portlanndite,收集这些矿物的端元波谱并自动绘制在右侧的窗口中,将这四条光谱曲线绘制在新的波谱显示窗口,修改每条曲线为中文名;
第二步:物质识别常见高光谱分类方法包括波谱角填图(SAM)、二进制编码(Binary Encoding)和波谱信息散度(Spectral Information Divergence)。本文将采用这三种方法对影像进行矿物识别。下面分别对 3 种分类方法的原理和实验中所采用的参数设置进行说明,如表所示。
方法 | 原理 | 参数设置 |
波谱角填图 | 计算像元与端元波谱之间的夹角判定其相似度,夹角越小,越相似。 | single value:0.15 |
二进制编码 | 将数据和端元波谱编码为 0 和 1,使用逻辑函数对每一种编码的参照波谱和编码的分类波谱进行比较,生成分类图像。 | single value:0.15 |
波谱信息散度 | 利用散度度量像元波谱与端元波谱的匹配程度,散度越小,相似程度越高。 | none |
- 在 Toolbox 中,打开/Classification/Endmember Collection 工具,在文件对话框中选择高光谱数据 CupriteReflectance.dat;
- 在 Endmember Collection 面板中,选择 Import >from Plot Windows。将 4 个端元波谱全部选中,点击 OK;
- 选择 Algrithm >Spectral Angle Mapper 波谱角识别方法。
- 单击 Select All,选中所有的端元波谱。
单击 Apply,运行波谱角法制图。
第三步:结果输出在 Spectral Angle Mapper 面板上,设置波谱角阈值:0.15,选择结果输出路径和名称。
类似地,选择 Algrithm > Binary Encoding 二进制编码。单击 Select All,选中所有的端 元波谱。单击 Apply。
在 Binary Encoding 面板上,设置波谱角阈值:0.15,选择结果输出路径和名称。
类似地,选择 Algrithm > Spectral Information Divergence 波谱信息散度。单击 Select All,选中所有的端元波谱。单击 Apply。 在 Spectral Information Divergence 面板上,默认最大散度阈值为 0.05,选择结果输出路径和名称。
2 自定义端元进行地物识别
这里我们选择从图像上收集端元波谱的方式,包括收集单个像元波谱和区域的平均波谱。
第一步:构建端元波谱库
(1)启动 ENVI,打开高光谱数据 CupriteReflectance.dat;
(2)单击主菜单 Display> Profiles>Spectral,在图像上定位到像素坐标为:(467,412)的像元,即在工具栏 Go To 输入 467,412 回车,将该像元的光谱曲线显示在窗口中
(3)在 Toolbox 中,打开/Classification/Endmember Collection 工具,在文件对话框中选择高光谱数据 CupriteReflectance.dat;
(4)在 Endmember Collection 面板中,选择 Import –>from Plot Windows。将显示的端元波谱选中,点击 OK;单个像素的波谱曲线收集好了,下面是收集一个区域的平均波谱。
(5)在图层管理器中 CupriteReflectance.dat 上点击右键 New Region Of Interest,找到一片需要识别的区域,绘制一个多边形区域;可直接打开 ROI\端元 ROI.xml
(6)回到 Endmember Collection 面板,选择 Import–>from ROI from input file,将绘制的 ROI 都选中,点击 OK;
(7)在 Endmember Collection 面板,选择 Select All,单击 Plot 将几条波谱曲线显示出来。注:以防万一,点击 File->Save Spectra as->Spectral Library File,将获取的端元波谱保存为端元波谱文件。
第二步:确定端元波谱类型
(1)在 Toolbox 中,选择/Spectral/Spectral Analyst,选择在对话框的右下角选择 Open>Spectral Library,选择...\Program Files\Exelis\ENVI53\classic\spec_lib\usgs_min \usgs_min.sli 作为对比波谱库,在识别方法权重上按照默认,点击 OK;
(2)在 Spectral Analyst 面板上,选择 Options->Edit(x,y) Scale Factors,设置 X Data Multipliter 为 0.001,设置 Y Data Multipliter 为 0.0001,点击 OK;注:标准波谱库的波长是微米,y 轴的值为 0-1 反射率。
(3)在 Spectral Analyst 面板上,单击 Apply 按钮,选择之前步骤中得到的第一个波谱进行分析,点击
OK,记下分值最高对应的地物;
(4) 回到 Endmember Collection 面板,将波谱分析得到的地物名在 Name 中输入;
(5)重复(3)--(4)两步,识别剩下的波谱,最后结果如下图所示:
第三步:物质识别
1. 在 Endmember Collection 面板中,选择 Algrithm >Spectral Angle Mapper 波谱角识别方法;
2. 选择 Select All 将所有端元波谱全部选中,点击 OK;(3)单击 Apply,运行波谱角法制图。
3. 在 Spectral Angle Mapper 面板上,设置波谱角阈值:0.02,选择结果输出路径和名称。