envi运算技巧.docx
《envi运算技巧.docx》由会员分享,可在线阅读,更多相关《envi运算技巧.docx(13页珍藏版)》请在冰豆网上搜索。
![envi运算技巧.docx](https://file1.bdocx.com/fileroot1/2023-1/23/9622f24e-fced-405f-ad4a-10ad29e4fc41/9622f24e-fced-405f-ad4a-10ad29e4fc411.gif)
envi运算技巧
1.(b1le0)*0+(b1ge0)*(b1*0.0001)
这个公式意思就是要是值小于0就乘以0,使其变为0;同时,值大于等于0的话就乘以0.0001这个系数
2行政边界的矢量分割可以在Acrtools->AnalysisTools->Extraction->Split中进行批量矢量分割。
3
现NDVI产品数据处理过程中遇到以下问题:
问题1:
NDVI是归一化植被指数,它的取值范围是-1—1,如何理解?
方法:
对于陆地表面覆盖来说,云、雨、雪在可见光比近红外波段有较高的反射作用,所以NDVI为负值;岩石、裸土的NDVI一般为0;有植被覆盖的地方一般大于0。
问题2:
导入ENVI进行查看,发现未拼接重投影之前影像数据范围为-3000—0.99880,拼接重投影之后影像数据范围在-3000—9988。
是数据值发生了改变吗?
方法:
ENVI — Basic Tool — Preprocessing — Data-Specific Utilities — View HDF Attribute
(在envi里面查看NDVI波段参数)
可以发现它的有效值范围为(-2000—10000),因此数据值-3000是无效值,其他的值是乘以了10000这个系数(scale_factor),因此在拼接重投影过程中ndvi值并没有发生变化。
还有些值如32767等表示有云 。
问题3:
按上面所述,它的根本值没有发生改变,但是毕竟一部分数值已经扩大了啊,怎么处理比较合理?
方法:
ENVI — Basic Tools — Band Math
(波段运算,把负值去掉)
在弹出的对话框Band Math中,Enter an expression:
(b1 lt 0)*0+(b1 ge 0)*(b1*0.0001)。
这个公式意思就是:
要是值小于0 就乘以0,使其变为0;同时,值大于等于0的话就乘以0.0001这个系数。
这样就OK了。
关于B1 代表 所选的那个影像。
问题4:
如何通过NDVI来计算植被覆盖度?
方法:
一般都是用的像元二值模型。
利用NDVI值得到植被覆盖度。
公式:
fc = (NDVI - NDVIsoil)/( NDVIveg - NDVIsoil)
取NDVIsoil=NDVImin, NDVIveg=NDVImax。
(1)得到NDVI数据
(2)查出NDVI影像的最大最小值:
在scroll 窗口右键 — Quick Statistics
对于最小值,由于是计算植被覆盖度,植被的NDVI应该是大于0 ,因此应该选择大于0的最小值。
对于最大值,最大值不是1(红光波段反射率不等于0),因此应该选择数量大于0值小于1的最大值。
注意:
最大最小值提取需要设置置信度。
如果置信度是0,则NDVImin取所有像元中最小的值,NDVImax取所有像元中最大的;如果取置信度是1,则NDVImin取像元中像元值累计概率1%附近的像元值,NDVImax取99%附近的那个像元值(注意是像元值的累积概率:
累计概率=累积像元个数/总像元个数),同理其他也一样。
问题:
置信度如何获得?
(3)波段计算:
Basic Tool — Band match
输入计算公式:
float((b1-minb1)/(maxb1-minb1))
问题5:
如何查看NDVI数据的“波谱曲线”(也就是spectral profile)呢?
方法:
执行Basic Tool→Layer Stacking,将同一年份的某几个月,或者将某几年的数据放到同一文件夹里进行多期数据波段叠加,然后点击PixelLocator,输入特定像元的位置,查看特定像元出的Z profile,就可以获取一个点上对应的多个波段的值(如DN值),此时看到,Envi做出的曲线图并不好看,可以将其导出为ASCII,然后在Excel中作图。
也可以执行:
File→SaveFileAs→EnviStandard的方式来实现。
注:
提取某个点上对应的栅格值,也可以在ArcGIS中进行:
Extraction→Extractvaluetopoint,如果是提取一个点上多期数据的值,可以用Extractmultivaluestopoint工具(Batch),如下图所示:
4.arcgis矢量数据的拼接
解决办法:
先用arctoolbox---datamanagementtools---general----append进行矢量图层的合并;
然后再用arctoolbox---datamanagementtools----generalization----dissolve进行属性表合并.效果很好.
5.通常我们所说的相关分析是指线性相关,要求两个变量符合双变量正态分布,但是在实际工作中很多人是无意或者故意忽视了这个至关重要的理论前提,直接就做所谓的相关分析了。
我通常的做法是在空间统计分析模块中用点提取的方式获取两个图层的数据,比如说随机取100个点,提取出来的100对数据点在专业的统计分析软件中进行双变量态分布检验。
如果不符合双变量正态分布,则可以进行Spearman等级相关,或者对呈偏枋分布的数据进行BOX-COX转换,使之符合正态分布;如果符合的话,可直接进行线性回归分析。
通常我们的零假设是两者不存在显著的统计相关,如果检验结果得到p<0.05,那么我们就拒绝原假设,即可认为两者存在显著的统计相关;若p>0.05,那接受原假设,即两者不存在显著的统计相关。
6.空间权重矩阵计算
工具箱介绍.png(94.83KB)
打开工具.png(21.95KB)
数据介绍3.png(111.72KB)
工具参数设置4.png(123.99KB)
结果5.png(33.85KB)
矩阵转换为表格6.png(71.06KB)
最后结果7.png(93.4KB)
7.DEM生成坡度、坡向时:
(1)转成平面投影
(2)3D分析-rastersurface-slope
8、
9、应用setnull工具
该工具的原理是将某一数值设置为Nodata(这里我们把值为0的像元设置为Nodata,其它像元数值保持不变)。
该工具只能是对单波段数据进行操作,如果我们得到的数据是单波段的,那这种方法再合适不过了。
工具位置:
ArcToolbox—SpatialAnalystTools—Conditional—SetNull
参数设置如下:
Inputconditionalraster:
这里选择的样例数据为Landsat5数据的第5波段;
Expression(optional):
写入SQL查询语句,这里将值为零的像元设为Nodata。
Inputfalserasterorconstantvalue:
值不为零的像元数值保持不变,仍为原始像元值。
Outputraster:
设置输出影像位置。
10.提取像元值到点上(可提前将栅格文件转为点文件)
现在有一个DEM和一个shape点文件,名称分别为“DEM”和“POINT”。
将两者叠加后每个点会落在栅格数据的某个像元中,分文介绍如何将每个点所在的栅格像元值赋予其上的点。
将两个文件加载到ArcGIS的TOC窗口中,打开Toolbox,依此找到SpatialAnalystTools—>Extraction—>ExtractValuetoPoints,如图1所示。
图1 ExtractValuetoPoints在ArcToolbox中的位置
双击打开ExtractValuetoPoints,按照图2进行设置。
图2 ExtractValuebyPoints对话框设置
设置完成后点击OK进行计算,待计算结束后,提取出栅格像元值的点文件会自动添加到当前的TOC窗口中。
打开属性表可以看到多了一列名为“RASTERVALU”的字段,该字段中存储的就是每个矢量点对应的栅格数据的像元值,在这里即为高程值。
如图3所示。
图3 提取后的栅格像元值
11.有些栅格文件没法建立属性表,可以先裁剪出自己所需要的区域来,在进行属性创建,就没问题了。
12.str( !
YEAR!
)+str( !
MNTH!
)+str( !
DAY!
)
就是把年月日变为字符串然后串联
13.d
14.
两个栅格进行叠加,有时会有一部分没有数据,即用identify点击该区域,Value为NoDat
a,而不是像其他非空区域一样有值。
此时注意nodata区域要赋予0值,因为nodata+任何数=nodata,因此要采用条件查询函数将
NoData的地方赋值为0.
方法是ArcTools->SpatialAnalystTools->MapAlgebra->SingleOutputMapAlgebra.
算法表达式为:
CON(ISNULL([raster]),0,[raster])。
其中[raster]是输入栅格名称。
会自动生成一个以输入栅格图像的外接长方形为范围的栅格图像,非空的地方为栅格值,
NoData的地方为0。
如果需要赋值为0的NoData区域大于这个外接长方形,可在Single
OutputMapAlgebra对话框Environment->Generalsetting->Extent中设置你所需要的mask。
然后就可以直接用spatialanalysis->rastercalculate进行计算了。