波段运算(bandmath)工具中常用的函数和实例

更新时间:2023-10-03 01:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

波段运算(bandmath)工具中常用的函数

BandMath工具能够方便的执行图像中各个波段的加、减、乘、除、三角函数、指数、对数等数学函数计算,也可以使用IDL编写的函数。BandMath工具使用函数都是基于IDL的数据组运算符。

IDL的数组运算符使用方便且功能强大。它们可以对图像中的每一个像元进行单独检验和处理,而且避免了FOR循环的使用(不允许在波段运算中使用)。数组运算符包含关系运算符(LT、LE、EQ、NE、GE、GT)、Boolean运算符(AND、OR、NOT、XOR)和最小值、最大值运算符(<、>)。这些特殊的运算符对图像中的每个像元同时进行处理,并将结果返还到与输入图像具有相同维数的图像中。例如:要找出所有负值像元并用值-999代替它们,可以使用如下的波段运算表达式:

(b1 lt 0)*(-999)+(b1 ge 0)* b1

关系运算符对真值(关系成立)返回值为1,对假值(关系不成立)返回值为0。系统读取表达式(b1 lt 0)部分后将返还一个与b1维数相同的数组,其中b1值为负的区域返回值为1;其他部分返回值为0,因此在乘以替换值-999时,相当于只对那些满足条件的像元有影响。第二个关系运算符(b1 ge 0)是对第一个的补充——找出那些值为正或0的像元,乘以它们的初始值,然后再加入替换值后的数组中。这个用法可以扩展到两个图像中,比如图像1中值大于220(有云部分)用图像2中对应的像素值代替,其余保留图像1中的值,表达式就可以写成:

(b1 lt 220)*b2+(b1 le 220)* b1 (第一个应该是gt)

类似的使用数组运算符的表达式为波段运算提供了很强的灵活性。下表中描述了

BandMath工具中常用的IDL数组操作函数,详细介绍,请参阅《IDL Reference Guide》。

种类 基本运算 三角函数 操作函数 加(+)、减(-)、乘(*)、除(/) 正弦sin(x)、余弦cos(x)、正切tan(x) 反正弦asin(x)、反余弦acos(x)、反正切atan(x) 双曲正弦sinh(x)、双曲余弦cosh(x)、双曲正切tanh(x) 关系和逻辑运算符 小于(LT)、小于等于(LE)、等于(EQ)、不等于(NE)、大于等于(GE)、大于(GT) AND、OR、NOT、XOR 最小值运算符(<)和最大值运算符(>) 其他数学函数 指数(^)和自然指数(exp(x)) 自然对数(alog(x)) 以10为底的对数(alog10(x)) 整型取整——round(x)、ceil(x)、和floor(x) 平方根(sqrt(x)) 绝对值(abs(x))

ENVI 波段运算的函数和实例 波段运算(Band Math)

Band MathTM

功能允许你处理导致单个波段输出的复杂表达式。这些数学表达式也可以应用于一个多波段文件中的所有波段,providing “File Math”。

关于使用波段运算的更多信息,请参阅 ENVI Programmer’s Guide 第 29 页的 “Band Math Basics”。

可利用波段运算功能(Available Band Math Functions)

Band Math 功能为用户提供一个灵活的图像处理工具,其中许多功能是无法在任何其它的图像处理系统中获得的。该功能的能力与 IDL 语言的能力直接相关。可用的函数包括但不仅限于 表 4-2 中列出的数学表达式。

Series and Scalar 数学

加 (+)

减 (-)

乘 (*)

除 (/) 最小运算符 (<) 最大运算符

三角函数 其它波段运算选项

正弦

(sin(x))

余弦

(cos(x))

正切

(tan(x))

反正弦 (asin(x))

反余弦 (acos(x))

反正切

关系运算符

(EQ、NE、LE、LT、GE、GT)

逻辑运算符 (AND、OR、XOR、NOT)

类型转换函数(byte, fix,long, float, double,complex)

IDL 返回数组结果的函数

IDL 返回数组结果的程序

User IDL 函数和程序

(>) 绝对值 (abs(x))

平方根 (sqrt(x))

指数 (^) 自然指数 (exp(x))

自然对数 (alog(x)) 以10为底的对数 (alog10(x))

(atan(x))

双曲正弦 (sinh(x))

双曲余弦 (cosh(x))

双曲正切 (tanh(x))

表 4-2: 一些可用的波段运算函数。 注意

一些有效的 IDL 表达式要求整个输入数组存在于内存中,它可以不必与 ENVI tiling 操作相兼容。

Band Math 对话框

1. 选择

Basic Tools > Band Math.

将出现 Band Math 对话框。假如运算结果是一个二维数组,它将接受任何有效的 IDL数学表达式、函数或程序。

2. 在标签为 “Enter an expression:” 的文本框内,输入变量名(将被赋值到整个图像波段或可能应用到一个多波段文件中的每个波段) 和所需要的数学运算符。

变量名必须以字符 “b” 或 “B” 开头,后面跟着 5 个以内的数字字符。

实例:

若你想计算三个波段的平均值,数学方程式:

(float(b1)+float(b2)+float(b3))/3.0

可以输入到文本框中。该表达式中使用的三个变量,“b1” 是第一个变量,“b2” 是第二个变量,“b3” 是第三个变量。注意,在本例中,IDL 的浮点型函数用来防止计算时出现字节溢出错误。

3. 一旦一个有效的表达式被输入,点击 “OK”处理。

将出现 Variable/Band Name Pairings 对话框。请参见以下部分。 ·

要重新使用、保存或取消任何以前应用的数学表达式:

1. 点击显示在 “Previous Expression:” 列表中的任何表达式,把它导入到 “Enter an expression:” 文本区中。

2. 一旦被导入,点击 “OK”,把该表达式应用到一组新的波段。 将出现 Variable/Band Name Pairings 对话框。请见下列的详细向导。 ·

要把表达式保存到一个输出文件,点击 “Save”,然后当出现 Enter Output Filename对话框时,键入输出文件名。

为了保持一致,输出文件名应该指定扩展名为 .exp 。 ·

要恢复原先保存的表达式,点击 “Restore”,然后选择适当的文件名。

该表达式将显示在 “Previous Expression:” 列表中。 ·

要清除所有原先的表达式,点击 “Clear”。

图 4-13: Band Math 对话框。

Variable/Band Name Pairings 对话框

Variable/Band Name Pairings 对话框允许你从一个输入波段列表中,把波段赋值给输入在“Enter an expression:” 文本框中的变量。

·

要把一个值赋给原先实例中的变量 “b1”:

1. 在标签为 “Variables used in expression:” 的文本框内,点击表达式 “B1”。 2. 在标签为 “可利用波段列表:” 的列表中,点击所需要的波段。

注意,一旦第一个波段被选择,只有那些相同空间大小的波段被显示在波段列表中。 3. 按照同种方法,为 “B2”、“B3” 等赋予一个值。 ·

要把一个多波段图像赋值给一个或所有变量:

1. 点击 “Map variable to Input file”。

2. 使用标准的 ENVI 文件选择步骤,选择一个文件(这可视为 “File Math”)。 所选择的文件可以是波谱子集,但是若一个以上的文件被使用,它们必须有相同的波段数。

通过数学表达式修改的文件数学(file math),一个多波段输出图像产生。

3. 一旦所有变量被定义,标准的 ENVI 输出对话框显示在 Variable/Bands Pairings 对话框的底部。

·

要选择一个空间子集:

1. 点击 “Spatial Subset”。

2. 将出现标准的 File Spatial Subset 对话框 (第 145 的 “Standardized ENVI Spatial Subsetting”)。系统默认值被设置为处理整个空间场景。

·

要把结果输出到一个文件或内存,选择 “File” 或 “Memory” 切换按钮。

·

若选择输出到一个文件,键入一个输出文件名,或使用 “Choose” 按钮选择一个文件名,然后点击 “OK”。

结果图像被显示在可利用波段列表中。

本文来源:https://www.bwwdw.com/article/nzod.html

Top