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

0
分享 2016-06-18
我们经常遇到最大合成的需求,即求取每个像元在各个波段的最大值,生成一个新的波段,即最大合成产品。波段运算公式很简单,为 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波段运算结果一致。


文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0102wihu.html

0 个评论

要回复文章请先登录注册