版权声明:本教程涉及到的数据仅供练习使用,禁止用于商业用途。

目录

高级光谱分析

1.    概述

2.    详细操作步骤    

  

  

1.概述

高光谱识别非常重要的一个步骤就是端元波谱的获取(端元波谱概念源自混合像元分解),也就是分类样本的选择。端元光谱的确定有两种方式:(1) 使用光谱仪在地面或实验室测量到的"参考端元";(2) 在遥感图像上得到的"图像端元"。方法(1)一般从标准波谱库选择,方法(2)直接从图像上寻找端元可选择的方法有:从二维散点图中基于几何顶点的端元提取,借助纯净像元指数(Pixel Purity Index——PPI)和n维可视化工具用于端元波谱收集,基于连续最大角凸锥(Sequential Maximum Angle Convex Cone——简称SMACC)的端元自动提取。

本课程学习借助纯净像元指数(Pixel Purity Index——PPI)和n维可视化工具用于端元波谱收集,之后进行地物识别。

如下图为波谱识别一般流程,从图中可以可到,由于端元波谱获取方法不同,光谱识别操作流程有一定的区别。

python提取高光谱波段 高光谱图像获取_迭代

图1.1波谱识别流程

2.详细操作步骤

下面以一个经过大气校正的航空高光谱数据为例,介绍基于PPI端元提取方法完成高光谱图像分类的过程。

数据:《基本光谱分析》章节中的高光谱数据:CupriteReflectance.dat

2.1高光谱图像物质识别

第一步:端元波谱获取

(1)启动ENVI,打开高光谱数据CupriteReflectance.dat;

(2)在Toolbox中,选择/Transform/MNF Rotation/Forward MNF Estimate Noise Statistics,选择高光谱数据,点击OK;

(3)选择输出路径及文件名,其他参数按照默认,点击OK。

python提取高光谱波段 高光谱图像获取_高光谱_02

图2.1 MNF变换结果输出面板

(4)在Toolbox中,选择/Spectral/Pixel Purity Index/Pixel Purity Index (PPI) [FAST] New Output Band,选择上一步MNF变换后的结果,单击Spectral Subset按钮,选择前11个波段;

(5)在PPI计算参数面板中,设置迭代次数(Number of Iterations):默认为5000和阈值(Threshold Factor):2.5。迭代次数越高,得到结果的精度越高,但是计算数据越慢,阈值越小,得到结果的精度越高,但是得到纯净数量越小。

(6)这里按照默认参数,选择输入路径及文件名,单击Next计算结果;

python提取高光谱波段 高光谱图像获取_迭代_03

图2.2 PPI计算参数

(7)在PPI的结果上点击右键,选择New Region of Interest,在ROI Tools窗口选择Threshold,选择PPI结果,Min Value 设置为10,Max Value设置为2503,回车,点击OK,看到阈值范围的ROI显示在图层上;

python提取高光谱波段 高光谱图像获取_python提取高光谱波段_04

图2.3 按照阈值建立ROI

(8)在Toolbox中,打开/Spectral/n-Dimensional Visualizer/n-Dimensional Visualizer New Data,选择MNF变换结果,点击OK;

(9)在n-D Selected Bands列表框中,选择前5个波段,单击Start按钮,构成的散点图在N维可视化窗口中旋转,通过Start和stop控制旋转到的位置,Speed控制角度,这里设置Speed为10,转动到一定程度时候,单击Stop按钮,在视图中用鼠标勾画"白点"集中区域。继续单击Start按钮查看选择选择点是否集中,如果点不集中,选择Class>Items 1:20>White,选择散落的点删除。

(10)在散点图中单击右键,选择New Class,新建一个样本区,重复第(8)步,选择足够多的样本区。

python提取高光谱波段 高光谱图像获取_python提取高光谱波段_05

图2.4 N维可视化空间选择端元

(11)在散点图上,单击右键选择Mean All,选择高光谱数据CupriteReflectance.dat作为波谱曲线源数据,自动绘制样本内的像元平均波谱。

python提取高光谱波段 高光谱图像获取_数据_06

图2.5 绘制的端元波谱

(12)在Toolbox中,打开/Spectral/Spectral Analyst,选择标准矿物波谱库...\Program Files\Exelis\ENVI51\classic\spec_lib\usgs_min \usgs_min.sli作为对比波谱库,在识别方法权重上设置Binary Encoding权重设置为1,其他按照默认,点击OK;

python提取高光谱波段 高光谱图像获取_数据_07

图2.6 设置识别方法权重

(13)在Spectral Analyst面板上,选择Options>Edit(x,y) Scale Factors,设置X Data Multipliter为0.001,设置Y Data Multipliter为0.0001,点击OK;

python提取高光谱波段 高光谱图像获取_python提取高光谱波段_08

图2.7 设置待识别波谱与标准波谱库的单位比例关系

(14)在Spectral Analyst面板上,单击Apply按钮,选择之前步骤中得到的第一个波谱进行分析,点击OK,记下分值最高对应的地物;

python提取高光谱波段 高光谱图像获取_python提取高光谱波段_09

图2.8 波谱曲线分析结果

(15)在波谱曲线显示面板,将波谱分析得到的地物名在Name中输入;

(16)同样的方法,识别剩下的波谱,最后结果如下图所示:

python提取高光谱波段 高光谱图像获取_数据_10

图2.9端元波谱结果

第二步:波谱识别

(1)在Toolbox中,打开/Classification/Endmember Collection工具,在文件对话框中选择高光谱数据;

(2)在Endmember Collection面板中,选择Import >from Plot Windows。将显示的端元波谱选中,点击OK;

(3)在Endmember Collection面板中,选择Algrithm >Spectral Angle Mapper 波谱角识别方法;

(4)选择Select All将所有端元波谱全部选中,点击OK;

(5)单击Apply,运行波谱角法制图;

(6)在Spectral Angle Mapper面板上,设置波谱角阈值:0.05,选择结果输出路径和名称。

第三步:浏览结果及分类后处理

得到的结果就是ENVI的分类文件的格式,自动加载显示在图中。

2.2波谱沙漏工具

 

以上高光谱物质识别的步骤都集成在波谱沙漏工具,采用向导式的操作,下面介绍用该工具进行高光谱物质识别的流程。

(1)打开高光谱数据;

(2)打开/Spectral/Spectral Unmixing/Spectral Hourglass Wizard,波谱沙漏工具,显示了工具说明,点击Next;

(3)点击Select Input File,选择高光谱数据,点击Next;

(4)设置MNF变换参数,默认是全部波段输出,点击Next。

(5)查看MNF变换结果,点击Next;

(6)计算数据维数,点击Calculate Dimensionality,在Spatial Coherence Threshold面板中,设置Threshold Level 为0.8(即选择信息量达到80%的波段数量),回车,点击OK,数据维数自动修改为17(即前17个波段的信息量就达到了80%),点击Next;

(7)选择端元波谱方式,Drive Endmembers from Image?Yes 或者No。如果选择No,则需要从外部文件中获取端元波谱;如果选择Yes,则从图像上获取端元波谱。这里我们选择Yes,单击Next。

(8)计算纯净像元指数。需要设置三个参数

  • 迭代次数(Number of PPI Iterations)

设定数据被映射到随机向量的次数。迭代次数越多,ENVI越能较好的发现极值像元。因此要平衡迭代次数与所用时间的关系。每次迭代所需的时间是由CPU和系统的配置决定的。通常为高光谱数据制图时,需要上千次的迭代。运行中的迭代次数显示在图像头文件的描述行中。

  • PPI阈值(PPI Threshold Value)

以数据位数为单位键入一个阈值。例如:阈值为"2",则只有DN值与极值像元的差值大于两位数的像元才被标为极值。该阈值在影射向量的末端选取像元。阈值应是数据噪声等级的2-3倍。例如,对于TM 数据,它的噪声通常小于1 DN ,因此阈值用2或3即可。当用包含标准化噪声的MNF数据时,1 DN 等于1标准差,因此阈值用2或3即可。较大的域值将使得PPI找到更多的极值像元,但是它们不可能是"纯"的端元。

  • 最大使用内存(PPI Maximum Memory use):默认是10M,可根据内容大小自行调整。

(9)迭代次数和PPI阈值都按照默认值,使用最大内存设置为1000M,单击Next;

(10)这一步是选择PPI的个数,以便在N维散点图中选择波谱端元。默认是10000个PPI纯净像元,点击Next;

(11)在N维可视化空间,自动选择了部分端元,可以手动修改或者重新收集部分端元波谱。直到在每个角度下,各类端元都是离散的;

python提取高光谱波段 高光谱图像获取_python提取高光谱波段_11

图2.10 N维可视化空间选择端元

(12)在流程化工具面板中,点击Retrieve Endmembers,Endmember List下面就列出了选择的几类端元,点击Plot Endmembers,绘制出几类端元的波谱曲线,

python提取高光谱波段 高光谱图像获取_迭代_12

图2.11 显示波谱曲线

(13)点击Start Spectral Analyst,选择自带的标准矿物波谱库...\Program Files\Exelis\ENVI51\classic\spec_lib\usgs_min \usgs_min.sli,在Spectral Analyst面板上,选择Options>Edit(x,y) Scale Factors,设置X Data Multipliter为0.001,设置Y Data Multipliter为0.0001,点击OK,在Spectral Analyst面板上,单击Apply按钮,依次选择每类端元进行波谱分析,在Endmenber List中选中该类,点击Edit Names,名称改为得分最高对应的地物;若是得分太低,可直接将该类端元删除,最后得到端元识别的结果;

python提取高光谱波段 高光谱图像获取_数据_13

图2.12 波谱识别

(14)点击Next,是否输入其他的端元波谱,默认为No,如果选择Yes,则会打开波谱收集工具,这里按照默认No,点击Next;

(15)提供了三种高光谱制图的方法:SAM光谱角法、MTMF以及Unmixing方法,这里选择SAM方法,最大光谱角度阈值设置为0.05,点击Next;

(16)查看分类的结果,(若是结果不理想,可以点击Prev,调节阈值或者选择其他分类方法),点击Next;点击Finish。完成光谱分析,最后打印出了流程化操作过程的记录,可以File >Save Text to ASCII,保存为文本文件,以供查看

python提取高光谱波段 高光谱图像获取_数据_14

图2.13流程化工具记录

python提取高光谱波段 高光谱图像获取_高光谱_15

图2.14 波谱沙漏工具高光谱物质识别结果

 教程下载:http://pan.baidu.com/s/1bns5Xkb

 数据下载:http://pan.baidu.com/s/1qWjsbnu

 视频下载:http://pan.baidu.com/s/1c08IWBQ