波谱运算(Spectral Math)工具
Spectral Math是一种灵活的波谱处理工具,可以用数学表达式或IDL程序对波谱曲线(以及选择的多波段图像)进行处理。波谱曲线可以来自一幅多波段图像的Z剖面、波谱库或ASCII文件。
如图15.5为波谱运算的简单示意图——求三个波谱曲线的和。在表达式s1+s2+s3中(波谱运算中的变量是以s开头),可以分别给s1、s2、s3指定为一条波谱曲线,得到的结果是一条波谱曲线(x值与s1、s2、s3一样,y值是三者之和);也可以s1是一个多波段图像文件(其实是每个像素点的Z-剖面),s2和s3分别是两条波谱曲线,得到的结果是一个与输入的多波段图像一样波段数和行列数的图像。
图15.5波谱运算示意图
下面以求表达式(s1+s2+s3)/3为例介绍Spectral Math工具的使用。输入数据源为ENVI自带的波谱库文件。
- 在主界面中,选择Display→Spectral Library Viewer,启动波谱库浏览器。
- 在Spectral Library Viewer面板左侧,自动加载了ENVI自动波谱库文件。选择veg_lib文件夹里的“sli”波谱库文件。
- 点击波谱列表中的地物名称,其光谱曲线将显示在面板右侧的视图中,任意选择三个光谱曲线(图15.6),可以点击右侧中间的三角箭头浏览已选的波谱列表。
图15.6 Spectral Library Viewer面板
- 在Toolbox工具箱中,双击Spectral/Spectral Math工具,打开Spectral Math面板。
- 在打开的Spectral Math面板中,在文本框Enter an expression中输入表达式(s1+s2+s3)/3,点击Add to List按钮将公式添加到上面的列表中,选中列表中的公式,点击OK;
提示:由于波谱库中的光谱数据类型为浮点型,所以不需要进行数据类型转换。如果输入光谱数据类型为字节型、整型等,需要进行数据类型转换。
- 在弹出的Variables to Spectra Pairings面板中,为s1、s2、s3指定波谱曲线。Output Result to可以选择Same Window或New Window,这里选择New Window,将结果输出到新窗口中。可通过鼠标左键将输入三条曲线拖拽到新的窗口中,结果如图所示,红绿蓝三条曲线为输入波谱,紫色为输出波谱。
- 在Variable to Spectra Pairings 面板中(图15.7),为每个变量指定波谱曲线。或者可以单击Map Variable to Input File按钮指定输入文件。
图15.7 Variable to Spectra Pairings 面板
- 输出结果(Output Result to):New Window。
- 单击OK按钮执行,结果是一条波谱曲线。
在波谱运算中也可以使用IDL的数组运算符,以及数据类型转换函数。详细如表15.4所示。
表15.4 波谱运算常用函数和运算符(括号中所示)
一般数学运算符 |
三角函数 |
其它的波谱数学选项 |
加法(+) |
正弦(sin(x)) |
关系运算(EQ,NE,LE,LT,GE,GT) |
减法(-) |
余弦(cos(x)) |
布尔运算(AND,OR,XOR,NOT) |
乘法(*) |
正切(tan(x)) |
类型转换函数(byte(), fix(), long(), float(), double(), complex()) |
除法(/) |
反正弦(atan(x)) |
返回数组结果的IDL函数 |
小于(<) |
反余弦(acos(x)) |
返回数组结果的IDL程序 |
大于(>) |
反正切(atan(x)) |
用户自定义的IDL函数和程序 |
绝对值(abs(x)) |
双曲正弦(sinh(x)) |
|
平方根(sqrt(x)) |
双曲余弦(cosh(x)) |
|
指数(^) |
双曲正切(tanh(x)) |
|
自然指数(exp(x)) |
|
|
自然对数(alog(x)) |
|
|
在波谱运算中也可以使用IDL程序和函数,操作步骤与波段运算基本一样。如下自定义函数格式。
FUNCTION sm_func, s1, [s2,..., sn, parameters and keywords]
processing steps
RETURN, result
END
编译和使用可参考前面章节的波段运算。
摘自《ENVI遥感图像处理方法 第二版》高等教育出版社