《2022年遥感数据的波段运算 .pdf》由会员分享,可在线阅读,更多相关《2022年遥感数据的波段运算 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、遥感数据的波段运算一、波段运算(Band Math)Band MathTM功能允许你处理导致单个波段输出的复杂表达式。这些数学表达式也可以应用于一个多波段文件中的所有波段,providing“File Math”。关于使用波段运算的更多信息,请参阅ENVI Programmers Guide 第 29 页的“Band Math Basics”。1可利用的波段运算功能(Available Band Math Functions)Band Math 功能为用户提供一个灵活的图像处理工具,其中许多功能是无法在任何其它的图像处理系统中获得的。该功能的能力与 IDL 语言的能力直接相关。可用的函数包括但
2、不仅限于表 4-2 中列出的数学表达式。表 4-2:一些可用的波段运算函数。Series and Scalar 数学三角函数其它波段运算选项加(+)正弦(sin(x)关系运算符(EQ、NE、LE、LT、GE、GT)减(-)余弦(cos(x)逻辑运算符(AND、OR、XOR、NOT)乘(*)正切(tan(x)类型转换函数(byte,fix,long,float,double,complex)除(/)反正弦(asin(x)IDL 返回数组结果的函数最小运算符()反正切(atan(x)User IDL 函数和程序绝对值(abs(x)双曲正弦(sinh(x)名师资料总结-精品资料欢迎下载-名师精心整理
3、-第 1 页,共 7 页 -平方根(sqrt(x)双曲余弦(cosh(x)指数()双曲正切(tanh(x)自然指数(exp(x)自然对数(alog(x)以 10 为底的对数(alog10(x)注意一些有效的 IDL 表达式要求整个输入数组存在于内存中,它可以不必与 ENVI tiling 操作相兼容。2Band Math 对话框(1).选择Basic Tools Band Math.将出现 Band Math 对话框。假如运算结果是一个二维数组,它将接受任何有效的 IDL 数学表达式、函数或程序。(2).在标签为 “Enter an expression:”的文本框内,输入变量名(将被赋值到整
4、个图像波段或可能应用到一个多波段文件中的每个波段)和所需要的数学运算符。变量名必须以字符“b”或“B”开头,后面跟着 5 个以内的数字字符。实例:若你想计算三个波段的平均值,则在文本框“Enter an expression:”内输入数学方程式:(float(b1)+float(b2)+float(b3)/3.0 这时,变量 b1、b2 自动跳入”Previous band math expression”对话框中,可以输入到文本框中。该表达式中使用的三个变量,“b1”是第一个变量,“b2”是第二个变量,“b3”是第三个变量。注意,在本例中,IDL 的浮点型函数用来防止计算时出现字节溢出错误。
5、(3).输入一个有效的表达式被输入,点击“OK”处理。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -将出现Variable/Band Name Pairings 对话框。请参见以下部分。4要重新使用、保存或取消任何以前应用的数学表达式:(1).点击显示在“Previous Expression:”列表中的任何表达式,把它导入到“Enter an expression:”文本区中。(2).一旦被导入,点击“OK”,把该表达式应用到一组新的波段。将出现Variable/Band Name Pairings 对话框。请见下列的详细向导。5 要把表达式保存到一个输出文件,点击
6、“Save”,然后当出现 Enter Output Filename 对话框时,键入输出文件名。为了保持一致,输出文件名应该指定扩展名为.exp。(Tips:可以在记事本中先输入复杂的公式,再导入公式文件)。6要恢复原先保存的表达式,点击“Restore”,然后选择适当的文件名。该表达式将显示在“Previous Expression:”列表中。要清除所有原先的表达式,点击“Clear”。图 4-13:Band Math 对话框。Variable/Band Name Pairings 对话框Variable/Band Name Pairings 对话框允许你从一个输入波段列表中,把波段赋值给输
7、入在“Enter an expression:”文本框中的变量。要把一个值赋给原先实例中的变量“b1”:1.在标签为“Variables used in expression:”的文本框内,点击表达式“B1”。2.在标签为“可利用波段列表:”的列表中,点击所需要的波段。注意,一旦第一个波段被选择,只有那些相同空间大小的波段被显示在波段列表中。3.按照同种方法,为“B2”、“B3”等赋予一个值。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -要把一个多波段图像赋值给一个或所有变量:1.点击“Map variable to Input file”。2.使用标准的 ENVI
8、文件选择步骤,选择一个文件(这可视为“File Math”)。所选择的文件可以是波谱子集,但是若一个以上的文件被使用,它们必须有相同的波段数。通过数学表达式修改的文件数学(file math),一个多波段输出图像产生。3.一旦所有变量被定义,标准的 ENVI 输出对话框显示在 Variable/Bands Pairings 对话框的底部。可以把一个波段运算结果作为新的变量输入下一个运算过程。要选择一个空间子集:1.点击 “Spatial Subset”。2.将出现标准的 File Spatial Subset 对话框(第 145 的 “Standardized ENVI Spatial Sub
9、setting”)。系统默认值被设置为处理整个空间场景。要把结果输出到一个文件或内存,选择“File”或“Memory”切换按钮。若选择输出到一个文件,键入一个输出文件名,或使用“Choose”按钮选择一个文件名,然后点击 “OK”。结果图像被显示在可利用波段列表中。二、运用 IDL 程序和波段运算功能由于 ENVI 为你提供对 IDL 性能的访问,你可以使用内置的 IDL 功能部件的能力、IDL 用户函数,或书写你自己的程序执行自定义的操作。这些函数的唯一要求是它们接受一个或多个图像阵列作为输入,并且它们输出一个单波段二维数组的计算结果。这些函数必须保存在 IDL 路径列表内的一个目录下,以
10、便它们将自动编译。通过使用 ENVI 主菜单 System 下拉菜单下的Compile Module选项(见ENVI Programmers Guide 第 23 页的“Incorporating New Routines”),也可以对它们进行编译。以下是用户波段运算功能的一些简单的实例。要获得更多关于使用波段运算执行用户自定义程序的信息,请参阅ENVI Programmer s Guide 第 29 页的“Band Math Basics”和 ENVI 用户函数指南。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -波段运算函数 1 下面的实例是一个非常简单的自定义波段
11、运算函数,它把两个波段相加。下面的程序文本可以在一个文本编辑器中输入,并用文件名user_bm1.pro 来保存:实例:FUNCTION user_bm1,b1,b2 RETURN,b1+b2 END 要从Band Math“Enter an expression:”文本框中调用该函数,使用语法:user_bm1(b1,b2)波段运算函数 2 下面的实例是一个自定义的波段运算函数,它把一个变量的数据类型转换为字节型,并将数值倒置(inverts the values)。下面的程序文本可以在一个文本编辑器中输入,并用文件名user_bm2.pro保存:实例:FUNCTION user_bm2,b
12、1 lut=255-BINDGEN(256)b1=BYTSCL(b1)b1=lut(b1)RETURN,b1 END 要从Band Math“Enter an expression:”文本框中调用该函数,使用语法:user_bm2(b1)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -波段运算函数 3 下面的实例是一个自定义的波段运算函数,当 b1 非零时,它用变量 b2 的值代替变量 b1。这一函数对分类图象非常有用,它用于将另一幅图象的像元代替分类的像元。下面的程序文本可以在一个文本编辑器中输入,并用文件名user_bm3.pro 来保存:实例:FUNCTION u
13、ser_bm3,b1,b2 b1=(b1 NE 0)*b2 RETURN,b1 END 要从Band Math“Enter an expression:”文本框中调用该函数,使用语法:user_bm3(b1,b2)波段运算函数 4 下面的实例是一个自定义的波段运算函数,它计算归一化差值植被指数(Normalized Difference Vegetation Index,NDVI),并把它缩放到字节数据范围。注意,“min”和“max”关键字在函数中是必需的,以确保同样的最小和最大值被用于缩放一个tiled 图像中所有的tiles。对于变量 b1,应该使用一个 0.8 m 附近的红外图像波段,
14、而对于变量 b2,应该使用一个0.6 m 附近的“红”波段。下面的程序文本可以在一个文本编辑器中输入,并保存为user_bm4.pro:实例:FUNCTION user_bm4,b1,b2 b1=bytscl(float(b1)-b2)/(float(b1)+b2),min=-1.0,max=1.0)RETURN,b1 END 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -要从Band Math“Enter an expression:”文本框中调用该函数,使用语法:user_bm4(b1,b2)实例 5:作用:The following example create
15、s a custom Band Math function to perform the following ratio and optionally check for divide-by-zero.步骤:在记事本或IDL中编写如下代码文件名为”mfband.pro”保存在ENVI中的“SAVE_ADD”目录下.重启ENVI 调入含至少两个波段的图象输入变量b1,b2在 Enter Expression text box 中输入表达式bm_ratio(b1,b2)function bm_ratio,b1,b2,check=check den=float(b1)-b2 if(keyword_s
16、et(check)then ptr=where(den eq 0.,count)$else count=0 if(count gt 0)then denptr=1.0 result=(float(b1)+b2)/den if(count gt 0)then resultptr=0.0 return,result end 注意:Compiling Band Math Functions Custom Band Math functions cannot be compiled with ENVI RT.If you have ENVI RT,you must use a compiled(.sav)file to add a custom Band Math function.名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -