ENVI编写函数进行波段运算
编写函数有更好的灵活性。
波段运算函数的编写非常简单,接受输入波段,处理数据,并返回结果。以下面的方式
定义:
Function bm_func,b1,[b2,…,bn, parameters and keywords]
processing steps
return,result
end
以编写(b1+b2)/ (b1-b2)功能为例,编写波段运算函数步骤如下:
编写函数并保存。
默认保存在以下路径,也可以进行修改。
C:\Documents and Settings\Administrator\IDLWorkspace71
;函数定义为两个输入波段b1和b2以及一个check关键字
Function bm_ratio,b1,b2,check=check
;计算差值
den=FLOAT(b1)-b2
;如果设置了check关键字,检查被0除问题
IF(KEYWORD_SET(check)) THEN ptr=WHERE(den EQ 0.,count)$
ELSE count=0
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
编译函数
编译函数的方法有两种,一是直接编译 pro,一是拷贝函数或保存的 sav 文件到相应的目录下重启 ENVI+IDL。
1) 在 ENVI 的主菜单下,选择[File]→[Compile IDL Module],选择函数进行编译;
2) 把 bm_ratio.pro 或 sav 文件放入 ENVI 安装目录下的..\ envi46\save_add 下,重新启动
ENVI+IDL 即可。
3) 执行函数
在 ENVI 主菜单下,选择[Basic Tools]→[Band Math],在弹出的 BandMath 界面中,在[Enter
an Expresion]里面输入函数调用,点击[OK]执行。
注意:在点击OK执行之前需要先加载影像,否则没有可用波段供选择。
(5)执行两个波段的比值,不检查是否被0除,在表达式文本框中输入:
Bm_ratio(b1,b2)
(6)执行两个波段的比值,并检查是否被0除,输入下面的式子:
Bm_ratio(b1,b2,/check)
转载自:https://blog.csdn.net/archielau/article/details/18374703