基于IDL用户函数的波段运算
ENVI 提供对 IDL 程序的访问的功能,可以使用内置的IDL 函数或者用户自定义IDL函数。这些函数要求它们接受一个或多个图像阵列作为输入,并且输出一个与输入波段具有相同行列的单波段二维数组作为计算结果。如下为一个自定义函数的基本格式:
FUNCTION bm_func, b1, [b2,..., bn, parameters and keywords]
END
下面以一个简单的例子介绍用IDL自定义函数,后在Band Math中使用这个函数,自定义函数实现的功能是计算一个比值(b1+b2)/(b1-b2),并且检查分母为0的情况。
第一步、编写函数
用记事本编写以下代码:
FUNCTION bm_ratio, b1, b2, check=check den = float(b1) - b2 IF (count GT 0) THEN den[ptr] = 1.0 result = (float(b1) + b2) / den IF (count GT 0) THEN result[ptr] = 0.0 RETURN, result END |
保存文件为bm_ratio.pro。
第二步、编译函数
有两种方式编译这个自定义函数:
1)
2)
第三步、应用函数
(1)
(2)
或bm_ratio(b1, b2,/check)
(3)
如果编写的函数有错误或者没有启动ENVI + IDL模式,一般会出现图15.4情况。
图15.4 自定义函数不能成功加载
如果熟悉IDL的可视化编译环境(IDL Workbench),在第一步编写函数时候可以在IDL Workbench环境中编写,并且可以编译为.sav文件。在第二步编译函数时候可以单独启动ENVI Runtime模式。
用IDL编写自定义函数非常灵活,功能也非常强大,前提是需要IDL相关知识。