福彩3d玩法介绍:IDL开发专题-ENVI功能扩展 - ENVI/IDL技术版 - ESRI中国社区 GIS...

来源:百度文库 编辑:中财网 时间:2024/04/29 11:27:46
资源共享] IDL开发专题-ENVI功能扩展 本帖最后由 lianyi_dyq 于 2009-4-25 00:06 编辑

1ENVI功能扩展
       ENVI作为功能强大的遥感软件,扩展ENVI的功能包括创建波段和波谱数学函数、自定义数据输入、交互式用户程序和ENVI二次开发等。
       ENVI的扩展,包括波段和波谱运算函数,自定义的空间、波谱,或是感兴趣区域(ROI)的处理,用户函数,自定义文件输入程序,批处理,以及其它如报告和绘图工具等。ENVI提供了一系列工具为程序员使用,能够极大地简化自定义程序的开发,并保持和ENVI一致的外观。
1.1ENVI波段运算和波谱运算
       对于用户来说,扩展ENVI的功能最简单方法就是使用波段和波谱运算函数。用户可以交互式通过波段和波谱运算表达式对话框输入大多数的波段和波谱运算函数。波段运算函数允许用户从任何波段或是文件中输入数据,处理数据,并输出整个波段。波谱运算函数允许用户从图表或文件中输入波谱数据,处理数据,并输出一个波谱。这种模式下,所有的数据的输入输出、获取、波段或波谱函数的调用及结果的输出都由ENVI中控制。因此使用波段或波谱函数进行处理时,用户不需要修改菜单、不必创建参数输入部件,不用执行I/O操作,只需在用户编写的函数中提供数据的计算处理功能。
1.1.1波段运算
       下图通过三个波段的相加说明了波段运算的处理过程。表达式中的每一个波段都对应于一个输入的影像波段,对这三个波段求和并输出结果影像。

                     
       这个表达式中的每个变量不仅可以对应于单一波段,也可以对应与一个文件。例如:在表达式b1+b2+b3中,如果b1映射为文件而b2,b3映射为单一波段则结果为b1所对应的文件的所有波段分别和b2b3进行求和。
       波段运算可以方便的进行特定波段的自定义处理,快速高效的使用波段运算需要用户能灵活的应用IDL下的数学运算,编写过程中可参考章节2.2数组和2.7运算符。
       波段运算时变量的定义必须以“b”或“B”开头,后面为数字且数字位数不超过5ENVI波段运算工具的使用有两种方式,数学表达式和波段运算函数。
1.1.1.1数学表达式
   编写数学表达式进行波段运算的步骤如下:
1.ENVI主菜单下,选择[Basic Tools][Band Math],在弹出的BandMath界面中,在[Enter an Expresion]里面输入表达式。
                     


2.点击Add to list按钮,然后在[Previous Band Math Expressions]里面选择输入的表达式点击OK

3.在弹出的界面中选择表达式中变量赋需要计算的波段。
                     


1.1.1.2波段运算函数
       编写波段运算函数跟数学表达式相比,在操作上更灵活,函数中可以添加更多的控制,如运算中的错误检测等。
波段运算函数的编写非常简单,接受输入波段,处理数据,并返回结果。以下面的方式定义:
Function bm_func,b1,[b2,…,bn, parameters and keywords]
       processing steps
       return,result
end
以编写(b1+b2/ (b1-b2)功能为例,编写波段运算函数步骤如下:
       1.编写函数并保存

       ;函数定义为两个输入波段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


2.编译函数
       编译函数的方法有两种,一是直接编译pro,一是拷贝函数或保存的sav文件到相应的目录下重启ENVI+IDL
       a)ENVI的主菜单下,选择[File][Compile IDL Module],选择函数进行编译;
       b)bm_ratio.prosav文件放入ENVI安装目录下的..\ envi46\save_add下,重新启动ENVI+IDL即可。
       3.执行函数
       ENVI主菜单下,选择[Basic Tools][Band Math],在弹出的BandMath界面中,在[Enter an Expresion]里面输入函数调用点击[OK]执行。   
                          

1.1.2波谱运算
       下图三个波谱的相加来说明波谱运算的过程。表达式中的每一个变量都被映射为一个输入波谱,对这三个波谱求和并将结果输出到绘图窗口。表达式中的变量也可以映射为文件而不仅是单一波谱,在这种情况下,结果将是一幅新的影像。

                        


       波谱运算的操作步骤跟波段运算基本一致,不同之处有:
       1.变量命名以“S”或“s”开头;
       2.执行时ENVI主菜单下,选择[Basic Tools][Spectral Math]