ENVI中利用波段运算计算中值的方法

我们经常遇到最大合成的需求,即求取每个像元在各个波段的最大值,生成一个新的波段,即最大合成产品。波段运算公式很简单,为 b1>b2>b3>b4…。

本文解决另外一个类似的需求,即中值合成。求取每个像元在各个波段的中值,生成一个新的波段。此时的波段运算公式较为复杂,下面以一个实例来介绍计算方法。

1)       以一个Landsat 8 OLI数据为例,计算前6个波段的中值。首先在ENVI中打开数据;

2)       在Toolbox中,打开Band Math工具,输入如下公式:

fix(median([[[b1]],[[b2]],[[b3]],[[b4]],[[b5]],[[b6]]], dimension=3))

注1:fix——将结果转换为与输入数据一致的数据类型,即16位有符号整型。根据需要可以修改为byteuintlongfloatdouble等函数;

median——计算中值函数,dimension表示计算维度;

[[[b1]],[[b2]],[[b3]],[[b4]],[[b5]],[[b6]]]——将6个二维数组转换为三维数组;

注2:当波段数为偶数时,可以设置even关键字,计算中间两个数的均值作为中值,公式变为:

fix(median([[[b1]],[[b2]],[[b3]],[[b4]],[[b5]],[[b6]]], dimension=3, /even))

3)       单击Add to list,点击OK,分别为b1~b6指定波段1~6,设置输出路径;

4)       查看结果如下图所示。

testMedian2.dat——没有使用even关键字的结果

testMedian3.dat——使用了even关键字的结果


图:计算结果

当前像元6个波段的DN值分别为 [595,2100,1138,822,685,709],通过排序可知,两种计算中值方法对应的结果分别为822和765,与上图中ENVI波段运算结果一致。

IDL> pix=[595,2100,1138,822,685,709]

IDL> pix[sort(pix)]

    595    685    709    822   1138   2100

IDL> (709+822)/2

    765

posted @   ENVI-IDL技术殿堂  阅读(1693)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示