本工具适用于 ENVI 5.6 及以上版本(本人测试最低版本为 5.6.3)。
光谱指数工具:Toolbox/Band Algebra/Spectral Indices 虚拟栅格 API:ENVISpectralIndexRaster ENVITask API:SpectralIndex、SpectralIndices
方法1:使用 ENVI App Store 进行 ENVI 扩展工具的安装与管理。App Store 下载地址:
https://envi.geoscene.cn/appstore
方法2:手动下载安装
https://envi.geoscene.cn/appstore/addssclces
Add Spectral Indices(添加光谱指数):利用编辑好的json文件,导入自定义光谱指数。详细说明参考“2 以NDWI为例”和“3 以NDBSI为例”章节内容。 View Band Names and Wavelengths(查看波段名称和波长):由于在编辑指数公式时,需要用到波段名称(波段标识),此工具展示了可用的波段标识列表。详细说明参考“4 其他工具”章节内容。 View Spectral Indices Information(查看光谱指数信息):可以浏览所有内置和自定义的光谱指数列表和信息,可复制、保存指数信息,然后在此基础上修改为自定义指数,再导入ENVI中使用。详细说明参考“4 其他工具”章节内容。
NDWI指数有两个,都是在1996年提出的,虽然名字一样,但是目的不一样。
ENVI中内置了一个NDWI(植被水分指数),公式如下。该指数用于植被含水量研究,对植被冠层含水量的变化很敏感,因为857nm和1241nm的反射率具有相似但略有不同的液态水吸收特性。植被冠层对光的散射增强了1241nm处的弱液态水吸收。该指数可应用于森林冠层应力分析、密集叶状植被的叶面积指数研究、植物生产力建模和火灾敏感性研究。
还有另一个NDWI(归一化差分水体指数),该指数一般用来提取影像中的水体信息,效果较好,但是阴影对结果影响较大。
NDWI = (green-nir)/(green+nir)
下面介绍添加NDWI指数的方法。
新建一个文本文件,重命名为NDWI2.json,内容为JSON格式,包含如下信息(建议严格区分大小写):
{
"NDWI2": {
"name": "Normalized Difference Water Index 2",
"type": ["Normalized"],
"equation": "(green - nir) / (green + nir)",
"bands": ["green", "nir"]
}
}
或者可以直接下载NDWI2.json文件:
https://envi.geoscene.cn/spectral_indices
NDWI2:指数缩写,保持唯一(不能与ENVI内置指数缩写一样)。 name:指数名称,保持唯一(不能与ENVI内置指数name一样),将显示在Spectral Indices工具面板中,建议尽量规范。 type:指数类型,本字段内容对于结果计算没有影响。可选项为Broadband Greenness、Canopy Nitrogen、Canopy Water Content、Dry or Senescent Carbon、Gas、Leaf Pigments、Light Use Efficiency、Mineral、Narrowband Greenness、Normalized、Vegetation。其中Normalized表示归一化指数。 equation:指数公式,运算符(加减乘除等)前后必须加空格。变量名使用波段标识(双击运行Toolbox/Band Algebra/Custom Spectral Indices/View Band Names and Wavelengths,查看可用的波段标识、波长范围、中心波长)。 bands:列出公式中使用的所有波段标识。
在Toolbox中,双击运行/Band Algebra/Custom Spectral Indices/Add Spectral Indices,在弹出的对话框中选择刚才编辑好的NDWI2.json文件,点击OK,自动添加指数并弹出提示。
注:本工具可一次性选择多个json文件,每个json文件中也可包含多个指数信息。
2.2.1 工具中使用
启动工具 Toolbox/Band Algebra/Spectral Indices,选择多光谱图像,选择新添加的 Normalized Difference Water Index 2 指数,设置输出路径,点击OK执行。
如下图所示,左图为多光谱图像,右图为NDWI计算结果。
2.2.2 调用虚拟栅格接口
2.2.3 调用ENVITask接口
可以调用SpectralIndex、SpectralIndices两个Task计算NDWI2,语法类似。
干度指标(NDBSI)可由裸土指数SI和建筑指数IBI合成,常用于RSEI生态环境监测中。公式如下:
式中,b2、b3、b4、b8、b11分别为哨兵2数据B2(490nm - blue)、B3(560nm - green)、B4(665nm - red)、B8(842nm - nir)、B11(1610nm – swir1)波段的反射率。
为了在json文件中更清晰的编辑公式,把公式修改为如下格式:
SI = (tmp1 - tmp2) / (tmp1 + tmp2)
tmp1 = b11 + b4
tmp2 = b8 + b2
IBI = (tmp3 - tmp4) / (tmp3 + tmp4)
tmp3 = 2.0 * b11 / (b11 + b8)
tmp4 = b8 / (b8 + b4) + b3 / (b3 + b11)
替换为波段标识,整理最终公式如下:
NDBSI = ((tmp1 - tmp2) / (tmp1 + tmp2) + (tmp3 - tmp4) / (tmp3 + tmp4)) / 2.0
tmp1 = swir1 + red
tmp2 = nir + blue
tmp3 = 2.0 * swir1 / (swir1 + nir)
tmp4 = nir / (nir + red) + green / (green + swir1)
新建一个文本文件,重命名为NDBSI.json,内容为JSON格式,包含如下信息(建议严格区分大小写):
{
"NDBSI": {
"name": "Normalized Difference Built-Up and Soil Index",
"type": ["Vegetation", "Normalized"],
"equation": "((tmp1 - tmp2) / (tmp1 + tmp2) + (tmp3 - tmp4) / (tmp3 + tmp4)) / 2.0; tmp1 = swir1 + red; tmp2 = nir + blue; tmp3 = 2.0 * swir1 / (swir1 + nir); tmp4 = nir / (nir + red) + green / (green + swir1)",
"bands": ["blue", "green", "red", "nir", "swir1"]
}
}
或者可以直接下载NDBSI.json文件:
https://envi.geoscene.cn/spectral_indices
注:此指数的公式有些特殊,使用“;”分隔了几个公式。其中第1个公式为主公式,变量使用tmpX标识,后边的几个公式指明了tmpX的计算公式,这样的好处是公式更简洁。
在Toolbox中,双击运行/Band Algebra/Custom Spectral Indices/Add Spectral Indices,在弹出的对话框中选择刚才编辑好的NDBSI.json文件,点击OK,自动添加指数并弹出提示,重启ENVI即可使用。
注:本工具可一次性选择多个json文件,每个json文件中也可包含多个指数信息。
下面以工具为例演示使用指数,调用虚拟栅格和ENVITask API方法与NDWI类似,这里不再赘述。
启动工具 Toolbox/Band Algebra/Spectral Indices,选择多光谱图像,选择新添加的 Normalized Difference Built-Up and Soil Index 指数,设置输出路径,点击OK执行。
如下图所示,左图为多光谱图像,右图为NDBSI计算结果。
工具位于Toolbox/Band Algebra/Custom Spectral Indices/View Band Names and Wavelengths。
双击启动工具,可以查看当前所有可用的波段标识和波长范围,如下图所示。这些波段标识可用于编辑指数公式,作为变量使用。
工具位于Toolbox/Band Algebra/Custom Spectral Indices/View Spectral Indices Information。
双击启动工具,可以浏览所有内置和自定义的光谱指数列表和信息,可根据关键字快速检索指数,右侧面板中展示了指数的所有信息,包含指数缩写、名称、类型、公式、所需波段。可以复制、保存指数信息,然后在此基础上修改为自定义指数的内容,再使用“Add Spectral Indices(添加光谱指数)”工具导入ENVI中使用。