首页 > 其他分享 >基于IDL用户函数的波段运算

基于IDL用户函数的波段运算

时间:2022-09-05 11:36:39浏览次数:58  
标签:运算 自定义 bm 波段 IDL b1 b2 函数

ENVI 提供对 IDL 程序的访问的功能,可以使用内置的IDL 函数或者用户自定义IDL函数。这些函数要求它们接受一个或多个图像阵列作为输入,并且输出一个与输入波段具有相同行列的单波段二维数组作为计算结果。如下为一个自定义函数的基本格式:

FUNCTION bm_func, b1, [b2,..., bn, parameters and keywords] 

    processing steps 

    RETURN, result

END

下面以一个简单的例子介绍用IDL自定义函数,后在Band Math中使用这个函数,自定义函数实现的功能是计算一个比值(b1+b2)/(b1-b2),并且检查分母为0的情况。

第一步、编写函数

用记事本编写以下代码:

FUNCTION bm_ratio, b1, b2, check=check  ;定义两个变量和一个关键字

den = float(b1) - b2                  ;计算分母

 IF (keyword_set(check)) THEN ptr = WHERE(den EQ 0., count)  ELSE count = 0 ;如果设置了check关键字,检查分母为0情况

IF (count GT 0) THEN den[ptr] = 1.0    ;如果分母为0,临时则将分母赋值1.0

result = (float(b1) + b2) / den           ;计算比值

IF (count GT 0) THEN result[ptr] = 0.0   ;分母为0时,直接将结果返回0.0

RETURN, result

END

 

保存文件为bm_ratio.pro。

第二步、编译函数

有两种方式编译这个自定义函数:

1)       将bm_ratio.pro文件拷贝到安装路径的save_add 目录下,启动ENVI + IDL模式,自动将bm_ratio.pro编译。

2)       启动 ENVI + IDL模式, 在主菜单中,选择File->Compile IDL Module,在Enter Module Filename对话框中选择bm_ratio.pro。

第三步、应用函数

(1)          打开一个多波谱的图像文件。

(2)          在ENVI主菜单中,选择Basic Tools->Band Math。在Enter an expression文本框中输入:

  bm_ratio(b1, b2)           ;不执行检查分母为0的情况

或bm_ratio(b1, b2,/check)   ; 执行检查分母为0的情况

(3)          其他操作过程与Band Math工具一样。

如果编写的函数有错误或者没有启动ENVI + IDL模式,一般会出现图15.4情况。

图15.4 自定义函数不能成功加载

如果熟悉IDL的可视化编译环境(IDL Workbench),在第一步编写函数时候可以在IDL Workbench环境中编写,并且可以编译为.sav文件。在第二步编译函数时候可以单独启动ENVI Runtime模式。

用IDL编写自定义函数非常灵活,功能也非常强大,前提是需要IDL相关知识。

标签:运算,自定义,bm,波段,IDL,b1,b2,函数
From: https://www.cnblogs.com/enviidl/p/16657506.html

相关文章

  • IDL界面程序直接调用envi菜单对应功能的实现方法
    ENVI软件具备强大的二次开发功能,提供了绝大多数功能的函数调用接口。但二次开发的时候需要自己编写处理和操作界面,很多时候这也是个头疼的问题。如果希望在自己的程序界面......
  • requestIdleCallback和requestAnimationFrame的区别
    页面流畅与FPS页面是一帧一帧绘制出来的,当每秒绘制的帧数(FPS)达到60时,页面是流畅的,小于这个值时,用户会感觉到卡顿。1s60帧,所以每一帧分到的时间是1000/60≈16ms。......
  • ENVI5.5.3/IDL8.7.3新特性介绍
    ENVI5.5.3/IDL8.7.3于2020年2月正式发布。在ENVI5.5.3版本中,改进了一些更人性化的工具和设置,如主界面右下角显示文件的基本信息、可以更改窗口背景颜色等;帮助我们在ENVI中......
  • ENVI5.5.2/IDL8.7.2新特性
    2019年2月,ENVI5.5.2、IDL8.7.2 新版本发布。ENVI5.5.2主要新功能如下:新增波段扩展工具新增波谱库维数扩展工具新增开源遥感数据下载工具改进ReprojectRaster、Laye......
  • SQL 中的逻辑运算符
    SQL中的逻辑运算符在这篇文章中,我们将详细讨论SQL中的逻辑运算符logicaloperatorsinsqllogicaloperatorsinSQLlogicaloperatorsinSQLlogicaloperato......
  • 模意义下的数和运算
    模意义下的数和运算一共有12个苹果,平分给5个小朋友,最后会剩下几个苹果?12➗5=2......2第一个2叫商,可以用12/5得到,第二个2叫余数,可以用12%5得到,%叫做模,也就是mod定义......
  • 第一章节03 运算符
    第一章节03运算符主要感受前4个就可以了有比更高级的类型运算的结果就是更高级的类型,否则都是int类型,因为结果的值默认是int关于逻辑运算存在一种短路运算inta......
  • JavaScript 非运算(!)之双感叹号的使用技巧
    我的另一篇博文中提到JavaScript有哪些是假值,哪些是真值。对于null、undefined、"",等一些假值,JavaScript直接视为false。我有一个需求,判断从浏览器中获取的Cookie是......
  • 运算符
    1算术运算符:+-*/%(取余,又叫模)++--2赋值运算符=3关系运算符:><>=<===!=instanceof4逻辑运算符&&(与)||(或)!(非)5位运算符:&|^~>><<>>>6条件运算......
  • 类和对象-运算符重载
    运算符重载运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型4.5.1加号运算符重载作用:实现两个自定义数据类型相加的运算  成员函......