本工具适用于ENVI 5.6及以上版本(本人测试最低版本为5.6.3)。
ENVI内置了上百种指数公式,但是大家在使用过程中肯定会有自定义指数的需求。在之前只能通过波段运算工具实现指数计算,现在可以通过本工具方便的添加自定义光谱指数,然后可以通过如下工具或API使用新指数:
-
光谱指数工具:Toolbox/Band Algebra/Spectral Indices
-
虚拟栅格API:ENVISpectralIndexRaster
-
ENVITask API:SpectralIndex、SpectralIndices
1 安装工具
方法1:使用 ENVI App Store 进行 ENVI 扩展工具的安装与管理。
App Store 下载地址:https://envi.geoscene.cn/appstore
方法2:手动下载安装 https://envi.geoscene.cn/appstore/addssclces
2 以NDWI为例
2.1 添加指数
ENVI中其实内置了一个NDWI指数(公式如下),由于使用了不太常见的1241nm波段,所以不太实用。
还有另一个NDWI指数公式,用到了最常见的绿波段和近红外波段,所以更加实用。
NDWI = (green-nir)/(green+nir)
下面介绍添加方法。
新建一个文本文件,重命名为NDWI2.json,内容为JSON格式,包含如下信息(建议严格区分大小写):
{
"NDWI2": {
"name": "Normalized Difference Water Index 2",
"type": ["Vegetation", "Canopy Water Content", "Normalized"],
"equation": "(green - nir) / (green + nir)",
"bands": ["green", "nir"]
}
}
或者可以直接下载NDWI2.json文件:https://envi.geoscene.cn/spectral_indices
其中,
-
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/View Band Names and Wavelength Ranges,查看可用的波段标识、波长范围、中心波长)。
-
bands:列出公式中使用的所有波段标识。
在Toolbox中,双击运行/Band Algebra/Add Custom Spectral Indices,再弹出的对话框中选择刚才编辑好的NDWI2.json文件,点击OK,自动添加指数并弹出提示。
注:本工具可一次性选择多个json文件,每个json文件中也可包含多个指数信息。
2.2 使用指数
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,语法类似。
3 以NDBSI为例
干度指标(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/Add Custom Spectral Indices,在弹出的对话框中选择刚才编辑好的NDBSI.json文件,点击OK,自动添加指数并弹出提示,重启ENVI即可使用。
注:本工具可一次性选择多个json文件,每个json文件中也可包含多个指数信息。
如下图所示,左图为多光谱图像,右图为NDBSI计算结果。
标签:...,swir1,自定义,为例,指数,NDBSI,json,green,nir From: https://www.cnblogs.com/enviidl/p/18322503