ENVI中利用波段运算计算中值的方法
我们经常遇到最大合成的需求,即求取每个像元在各个波段的最大值,生成一个新的波段,即最大合成产品。波段运算公式很简单,为 b1>b2>b3>b4…。
本文解决另外一个类似的需求,即中值合成。求取每个像元在各个波段的中值,生成一个新的波段。此时的波段运算公式较为复杂,下面以一个实例来介绍计算方法。
1)
2)
fix(median([[[b1]],[[b2]],[[b3]],[[b4]],[[b5]],[[b6]]], dimension=3))
注1:fix——将结果转换为与输入数据一致的数据类型,即16位有符号整型。根据需要可以修改为byte、uint、long、float、double等函数;
median——计算中值函数,dimension表示计算维度;
[[[b1]],[[b2]],[[b3]],[[b4]],[[b5]],[[b6]]]——将6个二维数组转换为三维数组;
注2:当波段数为偶数时,可以设置even关键字,计算中间两个数的均值作为中值,公式变为:
fix(median([[[b1]],[[b2]],[[b3]],[[b4]],[[b5]],[[b6]]], dimension=3, /even))
3)
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)] IDL> (709+822)/2 |

浙公网安备 33010602011771号