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

0
分享 2016-06-06
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的情况。
第一步、编写函数
用记事本编写以下代码:

保存文件为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 相关知识。
文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0101091y.html

0 个评论

要回复文章请先登录注册