ENVI56扩展工具:添加自定义光谱指数——以NDWI和NDBSI为例

本工具适用于ENVI 5.6及以上版本(本人测试最低版本为5.6.3)。

ENVI内置了上百种指数公式,但是大家在使用过程中肯定会有自定义指数的需求。在之前只能通过波段运算工具实现指数计算,现在可以使用本工具方便的添加自定义光谱指数,然后通过如下工具或API计算新指数:

  • 光谱指数工具:Toolbox/Band Algebra/Spectral Indices

  • 虚拟栅格APIENVISpectralIndexRaster

  • ENVITask APISpectralIndex、SpectralIndices

 

1 安装工具

方法1使用 ENVI App Store 进行 ENVI 扩展工具的安装与管理。

App Store 下载地址:https://envi.geoscene.cn/appstore

 

方法2手动下载安装 https://envi.geoscene.cn/appstore/addssclces

 

提供三个工具,均位于Toolbox/Band Algebra/Custom Spectral Indices/,分别为:

  • Add Spectral Indices(添加光谱指数):利用编辑好的json文件,导入自定义光谱指数。详细说明参考“2 以NDWI为例”“3 以NDBSI为例”章节内容。

  • View Band Names and Wavelengths(查看波段名称和波长):由于在编辑指数公式时,需要用到波段名称(波段标识),此工具展示了可用的波段标识列表。详细说明参考“4 其他工具”章节内容。

  • View Spectral Indices Information(查看光谱指数信息):可以浏览所有内置和自定义的光谱指数列表和信息,可复制、保存指数信息,然后在此基础上修改为自定义指数,再导入ENVI中使用。详细说明参考“4 其他工具”章节内容。

 

2 以NDWI为例

2.1 添加指数

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

其中,

  • 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/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接口

可以调用SpectralIndexSpectralIndices两个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文件中也可包含多个指数信息。

 

下面以工具为例演示使用指数,调用虚拟栅格和ENVITask API方法与NDWI类似,这里不再赘述。

启动工具 Toolbox/Band Algebra/Spectral Indices,选择多光谱图像,选择新添加的 Normalized Difference Built-Up and Soil Index 指数,设置输出路径,点击OK执行。

 

如下图所示,左图为多光谱图像,右图为NDBSI计算结果。

 

4 其他工具

4.1 查看波段名称和波长

工具位于Toolbox/Band Algebra/Custom Spectral Indices/View Band Names and Wavelengths。

双击启动工具,可以查看当前所有可用的波段标识和波长范围,如下图所示。这些波段标识可用于编辑指数公式,作为变量使用。

 

4.2 查看光谱指数信息

工具位于Toolbox/Band Algebra/Custom Spectral Indices/View Spectral Indices Information

双击启动工具,可以浏览所有内置和自定义的光谱指数列表和信息,可根据关键字快速检索指数,右侧面板中展示了指数的所有信息,包含指数缩写、名称、类型、公式、所需波段。可以复制、保存指数信息,然后在此基础上修改为自定义指数的内容,再使用“Add Spectral Indices(添加光谱指数)”工具导入ENVI中使用。

posted @ 2024-07-25 10:44  ENVI-IDL技术殿堂  阅读(709)  评论(0编辑  收藏  举报