ENVI 5.2二次开发更加智能、全面

0
分享 2016-06-07
大家所熟悉的ENVI二次开发方式是调用*_doit函数,这种传统的开发方式在函数调用时参数设置复杂,开发不够智能。从ENVI 5.0版本开始,便加入了许多全新的二次开发函数接口,这些全新的函数接口采用面向对象的开发方式,使得ENVI二次开发变得更加轻松、智能。
最新发布的ENVI5.2版本在保留传统的ENVI二次开发方式(*_DOIT)的基础上,新增了更多全新的函数接口及58个即拿即用的图像处理任务(ENVI Task),使得ENVI二次开发功能更加全面。详细介绍请参考ENVI Help->Programming->Routines及Programming Guide(二次开发手册)。
1. 智能的二次开发方式
面向对象(Object-Oriented,简称OO)开发方式主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物。全新的ENVI 二次开发方式不需要用户拥有强大的面向对象技能,只需理解对象概念即可。对象是一个程序的基石,但对象具体是什么呢?这里举个例子:当你第一眼看到下图的藏獒时,你看到了它的毛色为黄色,鼻子大,眼睛小等特性,如果你拿棍子打它,它会立马起来咬你,这是它的行为。因此,我们说这里的藏獒就是一个对象,每个对象都有它的属性(特性)和方法(行为)。
理解了对象的概念,ENVI5.2二次开发方式将变的非常简单、智能。
 
图:藏獒->对象

ENVI新的二次开发中,通过e=ENVI()方式启动ENVI,这里返回的e就是一个对象,将e的信息打印出来:
ENVI> print,e
ENVI <274465>
DATA =
LANGUAGE = 'eng'
LAYOUT = 1, 1
LOG_FILE = ''
PREFERENCES =
ROOT_DIR = 'C:\Program Files\Exelis\envi52\'
UI =
UVALUE = !NULL
VERSION = '5.2'
WIDGET_ID = 897
可以看到e中包含了许多信息,包括语言(Language)、视图布局(layout)、日志文件(log_fid)、安装目录(root_dir)、UI对象、UVALUE、版本(Version)和Widget_ID,这些都是e这个对象的属性。
我们说每个对象除了属性之外还有方法,例如:通过e对象的Openraster方法打开一个栅格数据。

我们通过查看Openraster方法的帮助,可以知道该方法的返回值raster也是一个对象,那对象raster又有自己的属性和方法,例如:利用raster对象的Export方法将数据导出为TIF格式。

至此,大家应该理解对象的概念了!

2. 全新的二次开发接口
ENVI5.2提供了功能更加全面的函数接口,根据函数调用方式的不同分为两类:ENVI函数接口调用、ENVI Tasks调用。
2.1ENVI函数接口调用
ENVI5.2提供了更多的程序控制、数据控制以及显示控制相关的函数接口,功能更加全面,例如:使用ENVIMosaicRaster函数对输入栅格做镶嵌,函数调用方法如下:

ENVI5.2包含的程序控制、数据控制以及显示控制相关的函数接口总结如下,
程序控制包含的方法及功能如下表所示:

数据控制中包含的函数如下表所示:

显示控制包含的函数如下表所示:

 
2.2ENVI Task调用
ENVI5.2新增了58个即拿即用的图像处理任务,几乎包括了所有基本的ENVI图像处理,用户可以利用ENVITask和ENVITaskParameter两个函数调用任何一个任务,可以说ENVI Task调用是一种特殊的函数接口调用。这里我们对58种任务做了总结和说明如下表所示:

以ENVI5.2新增的NNDiffuse融合方法为例,介绍如何调用ENVI Task,其他Task调用方法类似,IDL代码如下所示:

执行的结果如下图所示:
 
图:NND融合前后对比

文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0102vakm.html

0 个评论

要回复文章请先登录注册