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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界