46-ENVI的二次开发

目录

ENVI功能扩展与二次开发    

1.    概述    

2.    ENVI Classic开发技术    

2.1    ENVI Classic菜单介绍    

2.2    ENVI Classic组件介绍    

2.2.1    组件介绍    

2.2.2    事件管理    

2.3    ENVI Classic功能扩展实例    

2.4    ENVI Classic二次开发    

2.4.1    启动二次开发模式    

2.4.2    常用关键字介绍    

2.4.3    常用函数介绍    

2.4.4    二次开发实例    

3.    ENVI 5.x开发技术    

3.1    启动ENVI 5    

3.2    ENVI 5 程序控制    

3.3    ENVI 5 数据控制    

3.4    ENVI 5 显示控制    

3.5    ENVI 5 图像处理    

3.6    ENVI 5 扩展工具    

 

 

1. 概述

        ENVI是使用IDL语言编写的完整的遥感图像处理平台。在ENVI中,用户可以很方便的通过IDL语言以及ENVI提供的二次开发工具对ENVI的功能进行扩展,添加新的功能函数,甚至开发独立ENVI界面的全新系统。可以大致分为两类,分别为ENVI功能扩展与ENVI二次开发。

一、ENVI功能扩展

        利用IDL可以方便的为ENVI添加功能扩展补丁,这些补丁不用安装,只需要将开发的程序文件拷贝到指定文件夹即可。目前世界各地有很多的ENVI使用者开发了上千个ENVI扩展补丁,大多数在网上可以下载。

图:灵活地对ENVI进行功能扩展

二、ENVI二次开发

        ENVI二次开发是在ENVI已有的API之上,借助IDL开发独立于ENVI界面的业务化平台。大部分ENVI平台的图像处理功能都以函数方式(ENVI Routines)提供,IDL可以直接调用这些函数,同时IDL本身具有开发GUI的功能。这样我们就可以方便的基于ENVI+IDL开发一个业务程度很高的平台,完全"扔掉"ENVI的界面和操作方式。

        注:由于ENVI Classic和ENVI 5.x的开发方式存在一定的不同,建议使用ENVI 4.8及之前的用户只关注第2章节即可。

 


2. ENVI Classic开发技术

 

2.1 ENVI Classic菜单介绍

        ENVI Classic的菜单系统,包括主菜单和显示窗口菜单,是由ENVI安装目录下menu目录下的envi.men和display.men这两个ASCII码文件定义的。Windows系统上menu的路径如下:

  • ENVI 4.x:Home:\Program Files\ITT\IDL\IDLXX\products\enviXX\menu
  • ENVI Classic:Home:\Program Files\Exelis\ENVIXX\classic\menu

        注:上边的XX代表版本ENVI或IDL的版本号

一、envi.men文件结构

        该文件定义了ENVI主菜单中的选项,display.men文件定义了显示窗口菜单中的选项。每次ENVI启动的时候,这两个文件被读入并根据其内容构建ENVI的菜单。在菜单中添加内容,只需在这两个文件中添加相应的内容并重启ENVI即可。

        使用任何文本编辑器就可以打开envi.men文件。在文件的顶部有些介绍的注释文本。注释结束后,就是如下的文件的结构:

0 {File}

1 {Open Image File} {open envi file} {envi_menu_event}

1 {Open Vector File} {open vector file} {envi_menu_event}

1 {Open Remote File} {open remote file} {envi_menu_event}

1 {Open External File} {separator}

2 {Landsat}

3 {Fast} {open eosat tm} {envi_menu_event}

        每一行开始的数据定义了菜单项的层次。0表示最顶层,1表示一级子菜单,2表示二级子菜单,如此类推。

  • {Open Image File}:第一个大括号括起来的部分定义了显示在菜单上的内容。
  • {open envi file}:第二个大括号括起来的部分定义了为菜单项所赋给的用户值。用户值在同一用户函数处理多个菜单项时非常有用,可以区别那个菜单项被选中。
  • {envi_menu_event}:第三个大括号定义了菜单项事件处理程序的名称,即编写的用户函数名。该处使用的是用户函数名,而不是用户函数所在的文件名,所以没有后缀。

        二、修改方法

        一是可以直接修改菜单配置文件envi.mem中添加"自定义函数"和"文件信息"菜单选项。

        二是用函数来修改,ENVI自身有个ENVI_DEFINE_MENU_BUTTON,是这么使用的,如扩展功能函数名称为Envi_file_info,event,那么只需添加个功能过程PRO Envi_file_info_define_buttons, buttonInfo,然后菜单的添加工作就可以在这个过程下完成了。

        ENVI_DEFINE_MENU_BUTTON的调用格式如下:

ENVI_DEFINE_MENU_BUTTON, ButtonInfo [, /DISPLAY], $ EVENT_PRO=string | /MENU | UVALUE=string [, POSITION=long integer or string] [, REF_INDEX=long integer] [, REF_UVALUE=variable], REF_VALUE=string [, SEPARATOR={0 | 1 | -1}] [, /SIBLING], VALUE=string

        其中:

  • Display-是创建在主菜单还是显示菜单;
  • VALUE -菜单的显示信息 -必须的;
  • UVALUE -必须的;
  • EVENT_PRO-程序事件名称;
  • Menu- 是否为菜单;
  • REF_INDEX-如REF_VALUE不唯一则可用此来设置;
  • REF_VALUE -作为parent的已存在菜单名;
  • SIBLING -是否创建同级菜单;

        注:参考代码"...\22.ENVI二次开发\Codes\envi_file_info.pro"。

 

2.2 ENVI Classic组件介绍

        用户函数可以实现扩展ENVI的功能部分,如果实现仅仅是无用户交互的简单功能函数编写就足够了,但如果涉及到了用户的交互式操作,如参数输入等模块,就会显得复杂了。虽然IDL可以编写通常的组建来满足需求,但在ENVI的功能扩展下面事件的控制就显得不那么方便了。

        ENVI提供了以WIDGET_开头的20多个功能组件来满足用户的需要,很多部件都包括"OK"和"Cancel"等按钮方便用户进行交互操作。

        组件的使用与信息获取可以参考源代码"...\22.ENVI二次开发\Codes\test_envi_widget.pro"。

 

2.2.1 组件介绍

        在ENVI Classic帮助的路径(Working with ENVI Classic > Using ENVI Classic Routines > ENVI Classic Routines >)可以获取组件的详细使用说明,均以WIDGET_开头。如下图所示。

 

  1. ENVI Classic帮助中的组件列表

为了大家能方便使用和查找,特意将ENVI提供的组件名称与功能进行了总结,如下表所示。

表:界面组件一览表

函数名称

功能描述

AUTO_WID_MNG  

对ENVI的复合组件自动进行事件调度。

ENVI_CENTER  

获得组件居中的偏移量。

ENVI_COLLECT_SPECTRA  

进行端元波谱收集。

ENVI_DEFINE_MENU_BUTTON

在ENVI 菜单系统中自动创建菜单按钮。

ENVI_INFO_WID  

在信息提示界面中显示文本数据。

ENVI_PICKFILE  

对话框选择文件。

ENVI_SELECT  

选择文件和波段的对话框组件。

RGB_GET_BANDS  

显示一对话框组件来从当前文件列表中选择三个波段。

WIDGET_AUTO_BASE  

创建自动调度事件管理的组件。

WIDGET_EDIT  

编辑多行文字列表的复合组件。

WIDGET_GEO  

度分秒方式输入经纬度的复合组件。

WIDGET_MAP

输入和编辑投影坐标系统的组件。

WIDGET_MENU  

创建单选或复选框的组件

WIDGET_MULTI  

多选的复合组件。

WIDGET_OUTF  

输出文件选择的组件。

WIDGET_OUTFM  

输出到文件还是到内存的选择组件。

WIDGET_PARAM  

设定输入格式的参数输入组件。

WIDGET_PMENU  

下拉列表组件。

WIDGET_RGB  

RGB、HLS或HSV方式修改颜色组件。

WIDGET_SLABEL  

显示文本信息的组件。

WIDGET_SLIST

列表显示选择组件。

WIDGET_SSLIDER  

滑动条组件。

WIDGET_STRING  

文本字符串输入组件。

WIDGET_SUBSET  

选择裁剪范围组件,包含文件坐标、地理坐标、文件等类型。

WIDGET_TOGGLE  

开关按钮组件。

 

2.2.2 事件管理

        IDL编写程序时,界面组件要先用Widget_Base创建顶组件,然后需要用XMANAGER程序进行事件的传递和获取。

        ENVI下自动管理事件的组件容器则需要用WIDGET_AUTO_BASE来创建顶级容器(Top Level Base)和AUTO_WID_MNG函数进行事件的管理,此时组件需要添加关键字AUTO_MANAGE。这种方式的应用使得ENVI下的函数扩展比单纯使用IDL简单的多。

 

2.3 ENVI Classic功能扩展实例

        以"...\22.ENVI二次开发\Codes\envi_file_info.pro"源代码为例,在ENVI中添加了一些菜单,其中"查看文件信息"的菜单编写了用户函数,即响应事件。

        下面介绍使用方法。

(1) 启动IDL工作台,并将"envi_file_info.pro"源码文件在IDL编辑器中打开;

(2) 点击IDL工具栏中的"编译"按钮,将pro编译到内存中,控制台提示如下:

IDL> .compile –v 'D:\ENVI&IDL资料库\2014ENVI入门学习素材包\22.ENVI二次开发\Codes\envi_file_info.pro'

% Compiled module: ENVI_FILE_INFO_DEFINE_BUTTONS.

% Compiled module: DEFINEFUN.

% Compiled module: ENVI_FILE_INFO.

注:在编译前,建议先点击"重置"按钮,将IDL进程重置。

(3) 在控制台输入如下命令,将pro文件编译为sav文件,然后将sav文件拷贝到save_add路径(C:\Program Files\Exelis\ENVI51\classic\save_add);

IDL> save, filename='C:\envi_file_info.sav',/routines

(4) 重启ENVI Classic,查看菜单添加效果与事件响应结果。如下图所示。

 

图:添加菜单效果(左)和事件响应(右)

 

2.4 ENVI Classic二次开发

        ENVI的二次开发能够让用户在命令模式下使用ENVI。这种方式在以下几种情况下非常有用:

(1) 用户主要使用IDL工作但偶尔需要用到ENVI的函数;

(2) 用户希望创建定制的应用程序其中混合了IDL代码和ENVI函数;

(3) 用户希望进行大量的ENVI处理而无需人工干预时。

        (4) 二次开发是通过一系列特定的函数库来执行ENVI的功能,因此为了获取ENVI库函数,有必要了解一下ENVI程序的结构。

        ENVI 的功能函数分散在大约50个IDL的 二进制save文件中,这些二进制文件存放在ENVI安装路径下的Save目录下,在Windows上这些sav文件存放在"...\Exelis\ENVI51\classic\save"目录下。核心save文件包括了ENVI的基本功能函数,动态运行函数及ENVI函数运行所需的内部变量。

 

2.4.1 启动二次开发模式

        ENVI二次开发模式的初始化是恢复ENVI的二进制save文件并调用ENVI的命令ENVI_BATCH_INIT。步骤如下:

        启动一个新的IDL编译器,并输入以下命令:

ENVI, /restore_base_save_files

ENVI_BATCH_INIT

        注:如果无关键字RESTORE_BASE_SAVE_FILES,最终会启动ENVI;调用ENVI_BATCH_INIT进行批处理模式的初始化。

如果希望在运行ENVI_BATCH_EXIT时不希望IDL也关闭,那么可以在ENVI的主菜单File > Perference > Miscellaneous选项,并确定Exit IDL on Exit from ENVI选项设置为No。

 

2.4.2 常用关键字介绍

        当您熟练使用ENVI二次开发时,将会注意到有几个关键字基本上所有的程序都是具有的,这些关键字涉及了文件的输入和输出。常用关键字描述如下:

  • FID

        文件ID(FID)是一个长整型的标量。FID为ENVI的程序员提供了一个命名变量,可以被数个ENVI程序所使用,来打开或选择文件。ENVI程序对该文件进行的所有操作都是通过FID完成的。但是,如果用户同时使用IDL直接读取文件,请注意FID和LUN不是等同的。

  • R_FID和M_FID

        ENVI处理程序所产生的影像结果也包括一个R_FID,或者称为返回FID关键字。如果结果是存在内存中的,设置R_FID关键字是访问该数据的唯一方法。在掩模处理程序还包括一个M_FID,或者称为掩模FID关键字,用于确定用作掩模波段的文件。

        如果打开文件发生错误,FID将被设置为-1。值为-1的FID是无效的,不能进行进一步的处理。因此在ENVI中进行编程时,总是要检查FID、R_FID以及M_FID是否有效。当遇到一个无效的FID,通常从当前的处理程序中返回。

  • DIMS

        DIMS关键字是一个5个元素长整型数组。它定义了处理数据的空间子集。当需要确定FID的时候,用户必须同时使用DIMS关键字确定该文件的空间子集。

  • DIMS[0]:用于存储指向一个打开的ROI区域的指针,仅在ROI被定义的时候使用,其它时候设为-1。
  • DIMS[1]:采样的起始位置(一个基于0的IDL数组下标)
  • DIMS[2]:采样的终止位置
  • DIMS[3]:行的起始位置
  • DIMS[4]:行的结束位置
  • POS

        POS关键字定义了用于处理的波段位置。POS关键字是一个变长的长整型数组。因为ENVI处理的文件可能具有多个波段,而使用POS矢量来确定用于处理的波谱子集。波段从0开始(band1=0,band2=1,…);例如,要处理多波段文件的第三波段和第四波段数据,POS=[2,3]。

        常用函数包含了文件管理、打开、数据获取等,下面介绍一些常用的函数。

 

2.4.3 常用函数介绍

        ENVI文件处理函数为程序员提供了相当大的灵活性。有以下的函数可供编程使用,用户可以根据所需的情况选择所需的函数。

一、文件管理函数

  • ENVI_PICKFILE

        ENVI_PICKFILE函数产生一个提示用户选择文件的对话框。该函数产生的界面和使用ENVI主菜单选择File > Open Image File一样的界面。该函数并不真正的打开文件,它只是以字符串的形式返回用户所选择的全路径文件名。

  • ENVI_SELECT

        ENVI_SELECT产生对话框提示用户从ENVI中已经打开的文件中选择一个文件。该函数产生ENVI标准的文件选择对话框,其中包括空间和波谱子区裁剪按钮,以及掩模波段选取按钮。

  • ENVI_OPEN_FILE

        该函数返回一个文件的FID,它是打开ENVI文件的最直接和简单的方法。默认情况下它将文件信息添加到可用波段列表中,可以使用NO_REALIZE可以阻止文件信息加入到可用波段列表中。

        注:如果可用波段列表已打开,该关键字无效。

  • ENVI_FILE_MNG

        该函数可以打开、关闭或者删除硬盘上的文件。无需用户交互。

  • ENVI_GET_FILE_IDS

        该函数返回所有当前打开的文件的FID。

二、打开文件函数

        ENVI能够读取相当广泛的数据格式,虽然ENVI_OPEN_FILE仅能够打开具有ENVI头文件的影像文件。ENVI也提供了一些特定的处理程序能够打开和返回外部格式的文件:

  • ENVI_OPEN_DATA_FILE

        该函数打开ENVI所支持的外部文件(通过关键字指定文件类型)并返回FID,无需用户交互。

三、获取数据函数

        当影像文件非常大时,不适合使用IDL的READU命令将它全部读入到内存中。因此,ENVI提供了两个处理函数能够以小的、易管理的数据块方式读取影像数据。这两个函数也提供了数据逻辑组织,一次一个波段或是一次光谱切片。

  • ENVI_GET_DATA

        该函数从一个打开的文件中获取影像数据。它每次只返回某一波段的数据。如果所需的空间数据不止一个波段,必需多次调用该程序以获得该相应波段的数据。数据的范围由DIMS关键字控制。

  • ENVI_GET_SLICE

        该函数从一个打开的文件中获取波谱影像数据,它返回影像某一行所有波段的数据值。结果以BIP或BIL的格式返回。

四、数据保存函数

  • ENVI_WRITE_ENVI_FILE

        该函数可以将IDL中的数组保存为ENVI标准格式,需要指定波段数、列数、行数(NB、NS、NL)等必须属性。将输出为一个二进制文件和hdr头文件,可以直接使用ENVI打开。

  • ENVI_SETUP_HEAD

        当我们使用IDL的WRITEU函数能够产生ENVI格式的文件后,需要使用此函数生成hdr头文件。常用在分块处理中(参考代码"...\22.ENVI二次开发\Codes\test_envi_tile.pro")。使用OPEN关键字,允许将影像文件输入到可用波段列表。ENVI_SETUP_HEAD函数也能够返回磁盘上影像文件的FID。

  • ENVI_OUTPUT_TO_EXTERNAL_FORMAT

        该函数可以将ENVI标准等格式文件输出为其他格式,包含ASCII文本、JPEG2000、TIFF、NITF等格式。

 

2.4.4 二次开发实例

一、调用ENVI实现面向对象特征提取

        参考代码目录"...\22.ENVI二次开发\Codes"下的两个代码,使用的数据位于同路径下的Data文件夹内。代码名和功能如下:

  • rulebased.pro:实现基于规则的河流提取
  • segmentonly.pro:实现面向对象图像分割

        二、批处理格式转换函数实现

        进行批处理模板用户界面的构建,实现将文件转换为TIFF格式的批处理操作。代码位于"...\22.ENVI二次开发\Codes\envi_batch_template"内,界面如下图所示。

图:ENVI批处理模板

 

3. ENVI 5.x开发技术

        在ENVI 5.0发布时,便加入了许多全新的二次开发接口。ENVI 5.1版本的发布,同样带来了新的功能函数接口。下面对ENVI 5版本的二次开发技术进行介绍。

 

3.1 启动ENVI 5

        ENVI 5.0新增了启动ENVI批处理模式的方法,格式如下:

Result = ENVI([/CURRENT] [, ERROR=variable] [, /HEADLESS] [, LAYOUT=array] [, LOG_FILE=string] [, UVALUE=variable])

        最常用的为:

e = ENVI() ;启动ENVI 5界面

   或

e = ENVI(/headless) ;headless关键字表示只调用ENVI函数,不打开ENVI界面

 

3.2 ENVI 5 程序控制

        使用e = ENVI()启动ENVI之后,e返回为一个对象,信息如下:

ENVI> help, e

E ENVI <165828>

ENVI> print, e

ENVI <165828>

LANGUAGE = 'zho'

LAYOUT = 1, 1

LOG_FILE = ''

ROOT_DIR = 'C:\Program Files\Exelis\envi51\'

UI =

UVALUE = !NULL

VERSION = '5.0.2'

WIDGET_ID = 3

        可以看到e中包含了许多信息,包括语言、视图布局、日志文件、安装目录、UI对象、UVALUE、版本和Widget_ID。

        得到e对象之后,便可以利用e的许多方法进行对ENVI的控制,比如新建图层、新建视图、控制视图布局、添加扩展、打开栅格矢量文件等等。方法及功能介绍如下表所示:

表:ENVI 5提供的程序控制接口

方法

功能介绍

ENVI.AddCustomReader

为File > Open As > Custom添加打开自定义格式数据的过程

ENVI.AddExtension

为Toolbox添加扩展工具,ENVI 5.0 SP2新增可添加菜单功能

ENVI.Close

关闭ENVI

ENVI.CreateRaster

创建ENVIRaster对象,栅格文件对象

ENVI.CreateRasterMetadata

创建ENVIRasterMetadata对象,栅格描述数据

ENVI.CreateRasterSpatialRef

创建ENVIRasterSpatialRef对象,即空间参考对象

ENVI.CreateView

创建新的视图(View)

ENVI.ExportRaster

输出栅格文件,可另存为DTED、ENVI、NITF、TIFF格式等。

ENVI.GetOpenData

获取已经打开的数据,返回栅格或矢量对象数组。

ENVI.GetPreference

获取ENVI设置参数,如输入输出路径等。

ENVI.GetTemporaryFilename

自动获取一个临时文件名,位于临时目录。

ENVI.GetView

获取当前视图,返回值为ENVIView对象。

ENVI.HideExtensionFiles

启动ENVI时隐藏某个扩展补丁

ENVI.LogMessage

将自定义消息保存到日志文件LOG_FILE内。

ENVI.OpenRaster

打开栅格数据,支持大多数格式。

ENVI.OpenVector

打开矢量数据。

ENVI.Refresh

可以禁用或启用ENVI刷新功能。

ENVI.ReportError

弹出错误提示对话框。

ENVI.Show

使ENVI处于当前激活窗口。

 

3.3 ENVI 5 数据控制

        ENVI 5提供了很多与数据相关的对象参考,具体如下表所示。

表:ENVI 5提供的数据控制对象与方法一览表

对象或方法

功能介绍

ENVICoordSys 

对象:可通过ENVIVector的COORD_SYS属性获取此对象。

ENVIDataCollection

对象:获取当前打开的文件Raster对象数组

ENVIFIDToRaster 

方法:将ENVI中的文件ID(FID)转换为ENVIRaster对象。

ENVIGCPSet

对象:ENVI的地面控制点对象。

ENVIGLTRasterSpatialRef

对象:空间参考对象,包含了地理查找表(GLT)。

ENVIMosaicRaster

对象:ENVI无缝镶嵌栅格对象。

ENVIPseudoRasterSpatialRef

对象:空间参考对象,包含了Pseudo 地理信息

ENVIRaster

对象:ENVI栅格对象,包含一些栅格数据操作方法。

ENVIRasterIterator

对象:ENVI分块处理对象。

ENVIRasterMetadata

对象:ENVI栅格元数据对象。

ENVIRasterToFID 

方法:将ENVIRaster转换为FID。

ENVIROI

对象:全新的ENVI感兴趣区域对象。

ENVIRPCRasterSpatialRef

对象:空间参考对象,存储RPC信息。

ENVIStandardRasterSpatialRef

对象:空间参考对象,包含了标准地理坐标系信息。

ENVITime 

对象:ENVI时间对象。

ENVIVector 

对象:ENVI矢量数据对象。

        注:ENVI 5.1较5.0版本有了一些更新,如上表中的ENVIMosaicRaster、ENVIROI等为5.1版本新增的数据对象。

 

3.4 ENVI 5 显示控制

        ENVI 5全新的用户界面,带来了新的操作习惯。增加了图层管理功能,可以在一个视图中叠加显示多个图层,同时提供了几种透视窗口,可以进行卷帘、闪烁等操作。

        同样,ENVI 5提供了与这些功能相对应的API,可实现对ENVI的图层进行操作、创建透视窗口、弹出选择文件对话框等功能。如下表所示:

表:ENVI 5提供的显示控制对象

对象

功能介绍

ENVIPortal

ENVI透视窗口对象。

ENVIRasterLayer

ENVI栅格图层对象,可对图层进行移动等操作。

ENVIROILayer

ENVI感兴趣区域图层。

ENVIUI

ENVI用户界面对象,可弹出文件选择对话框和地图坐标系统界面等。

ENVIVectorLayer

ENVI矢量图层对象,可对图层进行移动等操作。

ENVIView

ENVI视图对象,可对视图进行平移、旋转、缩放等操作。

 

3.5 ENVI 5 图像处理

        从5.1版本开始,我们可以使用ENVITask和ENVITaskParameter两个对象组合使用进行各种各样的图像处理操作,ENVI 5.1目前只提供了四个ENVITask,如下表所示:

表:ENVI 5.1版本提供的ENVITask

ENVITask名称

功能描述

ENVIQUACTask

对多光谱或高光谱图像执行快速大气校正。

ENVIRadiometricCalibrationTask

执行辐射定标,可以得到辐射亮度值、表观反射率或亮温。

ENVIReprojectGLTTask

对NPP VIIRS或MODIS数据执行几何校正(需要经纬度信息),同时可以移除蝴蝶结效应(需要Quality Band)。

ENVIRPCOrthorectificationTask

执行RPC正射纠正操作。

        这些Tasks与ENVI界面中对应工具支持的参数是一样的。所以想要快速调用这些Tasks,最好首先熟悉ENVI对应工具的使用与参数设定。

        以ENVIRPCOrthorectificationTask为例,介绍如何使用ENVITask进行图像处理。               ENVIRPCOrthorectificationTask具有很多属性,属性列表如下所示。

表:ENVIRPCOrthorectificationTask属性列表

属性名

意义

DEM_RASTER

指定DEM栅格对象(ENVIRaster)

DESCRIPTION (Get)

描述ENVITask要执行的处理。

GEOID_OFFSET (optional)

如果DEM参考平均海平面,可以指定大地水准面偏移量。

GRID_SPACING

网格间距,默认为10。如果设为1,将执行严格正射纠正(要保证DEM分辨率够高,且研究区地形起伏较大,否则不建议使用)。设置值越大,精度越低,速度越快。

IGNORE_VALIDATE (optional)

意义同ENVITask的同名属性。

INPUT_RASTER

输入栅格数据,必须包含RPC信息。

INPUT_GCP (optional)

输入为ENVIGCPSet对象,为正射纠正用到的控制点。

DEM_IS_HEIGHT_ABOVE_ELLIPSOID (optional)

设为1表示DEM已经是椭球体上方的高度。

NAME (Get)

ENVITask的名字。

OUTPUT_PIXEL_SIZE (optional)

输出栅格像元大小。

OUTPUT_INTERPOLATION_METHOD (optional)

重采样方法:0: Nearest Neighbor;1: Bilinear (default); 2: Cubic Convolution。

OUTPUT_RASTER (optional)

输出栅格对象(ENVIRaster),默认为ENVI标准格式。

OUTPUT_RASTER_URI (optional)

输出文件路径。如果不指定,则默认输出到临时文件夹。

OUTPUT_SUBSET (optional)

输出结果时可以进行空间裁剪。

        下面的示例代码:

PRO Example_RPCOrthorectification

; 启动ENVI5.1

e = ENVI()

; 选择输入文件

ImageFile = DIALOG_PICKFILE(TITLE='Select an input image')

Raster = e.OpenRaster(ImageFile)

; 选择DEM文件,这里使用ENVI5.1自带的DEM数据

DEMFile = 'C:\Program Files\Exelis\ENVI51\data\GMTED2010.jp2'

DEM = e.OpenRaster(DEMFile)

 

; 新建RPCOrthorectification ENVITask

Task = ENVITask('RPCOrthorectification')

; 设置Task的输入输出参数

Task.INPUT_RASTER = Raster

Task.DEM_RASTER = DEM

Task.DEM_IS_HEIGHT_ABOVE_ELLIPSOID = 0

Task.OUTPUT_RASTER_URI = e.GetTemporaryFilename()

 

; 执行Task

Task.Execute, Error=error

; 将输出结果添加到Data Manager

DataColl = e.DATA

DataColl.Add, Task.OUTPUT_RASTER

; 显示结果

View1 = e.GetView()

Layer1 = View1.CreateLayer(Task.OUTPUT_RASTER)

END

图:RPC正射校正进度条

图:RPC正射校正结果

 

3.6 ENVI 5 扩展工具

        在IDL8.2中,提供了新建ENVI扩展向导,在IDL中点击"文件"-"ENVI扩展"即可弹出如下对话框,填写相关信息,点击完成,则自动新建工程和源码文件。

图:新建ENVI扩展

        自动生成的代码如下:

        

        下面用一个示例介绍如何为ENVI Toolbox添加扩展工具,以及为ENVI添加新的菜单(ENVI 5.0 SP2新增功能)。参考代码"…\22.ENVI二次开发\Codes\test_extension.pro"

创建sav文件方法有两种:

(1) 在IDL资源管理器中,右键点击TEST_EXTENSION工程文件夹,点击构建工程即可。

(2) 编译pro源码文件,然后使用SAVE命令创建sav文件。

IDL> .compile -v 'D:\IDLWorkspace82\My_Extension\test_extension.pro'

% Compiled module: TEST_EXTENSION_EXTENSIONS_INIT.

% Compiled module: TEST_EXTENSION.

IDL> save, filename = 'D:\TEMP\TEST_EXTENSION.sav', /routines

        将sav文件拷贝到ENVI安装目录下的Extensions文件夹内,重启ENVI即可。可以看到创建的Display下面的新菜单,以及包含的二级菜单,和Toolbox下的新工具,如图所示:

图:新增加的菜单和工具

 

教程下载:http://pan.baidu.com/s/1mgJsaSS

代码下载:http://pan.baidu.com/s/1o69e8FC

视频下载:ENVI Classic —— http://pan.baidu.com/s/1pJM9KiZ

                 ENVI 5.x       —— http://pan.baidu.com/s/1ESH6A

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值