envi idl 二次开发-自定义envi扩展工具
- 格式:docx
- 大小:167.47 KB
- 文档页数:3
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下的新工具,如图所示:。
ENVI二次开发技术内幕1前言ENVI(The Environment for Visualizing Images)遥感影像处理软件是美国ITT 公司推出的基于交互式数据语言IDL开发的一套功能强大的遥感影像处理系统,ENVI可以轻松的读取、显示、分析各种类型的遥感数据并提供了从影像预处理、信息提取到与地理信息系统整合的完整处理流程。
但对一些特殊需求,如添加未知格式数据支持、处理流程定制等可能都需要二次开发的模式。
ENVI比较方便的进行二次开发,这是由于其底层强大的IDL 语言支持,多种开发方式支持及200多个功能函数接口等因素决定的。
2ENVI二次开发的层次ENVI的二次开发包括三个层次,ENVI的功能扩展、独立系统开发和其他语言集成开发。
ENVI的功能扩展是利用ENVI的现有功能及底层IDL语言强大的运算能力实现的功能模块的定制开发,在现有ENVI的主框架上扩展功能模块,添加自系统功能补丁等方式。
独立系统开发是在非交互式ENVI环境下(如IDL构建系统框架),利用ENVI 提供的函数接口实现数据处理功能。
其他语言集成开发指的是在其他语言如VC++、Visual 2005下调用ENVI的功能。
2.1 功能扩展2.1.1波段、波谱运算与自定义功能扩展ENVI的功能最简单的方法就是使用波段和波谱运算功能,通过该方式用户可以在波段和波谱运算表达式对话框输入运算函数进行交互运算。
波段、波谱运算功能的实现有两种方式:数学表达式和波段、波谱运算函数。
数学表达式:该方式充分利用IDL的数组处理能力,通过简单表达式输入方式实现复杂的功能。
实例:两图像的波段b1和b2,波段b1中的云部分(认为象元值大于200为云)用波段b2的部分替代。
实现的步骤1)在ENVI主菜单下,选择[Basic Tools]→[Band Math],在弹出的BandMath界面中,在[Enter an Expresion]里面输入表达式2)点击Add to list按钮,然后在[Previous Band Math Expressions]里面选择输入的表达式点击OK。
enviidl二次开发-自定义envi扩展工具envi idl 二次开发-自定义envi扩展工具ENVI扩展工具文件夹的在安装目录的Extension 下:”C:\Program Files\Exelis\ENVI53\extensions”,自定的的envi扩展工具保存为.sav文件到该路径下后,启动envi就可以使用自定的扩展工具。
2.新建扩展完成后,会生成定义的代码,在pro envi5_canny_extensions_init 过程中,是用于定义扩展工具的显示的地方,如需要在原始菜单下的【Edit】菜单里的【Redo】下,添加Canny扩展功能,就可以写>>> e.AddExtension, ‘Canny’, ‘envi5_canny’,/menu, PATH=’Edit’,after = ‘Redo’, /SEPARATOR; Add the extension to the toolbox. Called automatically on ENVI startup.pro envi5_canny_extensions_init; Set compile optionscompile_opt IDL2; Get ENVI sessione = ENVI(/CURRENT); Add the extension to a subfoldere.AddExtension, 'Canny', 'envi5_canny', PATH='';添加到原始菜单下,/Sep表示分割符e.AddExtension, 'Canny', 'envi5_canny',/menu,$PATH='Edit',after = 'Redo', /SEPARATORend3.在功能过程envi_canny中定义实现的方法,可以直接运行测试,之后进行【重置】,编译该过程,并将该过程保存到扩展工具目录下>>>IDL> save,filename =”C:\Program Files\Exelis\ENVI53\extensions\envi5_canny.sav”,/routines ; ENVI Extension code. Called when the toolbox item is chosen.pro envi5_canny; Set compile optionscompile_opt IDL2; General error handlerCATCH, errif (err ne 0) then beginCATCH, /CANCELif OBJ_VALID(e) then $e.ReportError, 'ERROR: ' + !error_state.msgMESSAGE, /RESETreturnendif;Get ENVI sessione = ENVI(/CURRENT);******************************************; Insert your ENVI Extension code here...;******************************************UI = e.ui;选择输入文件Raster = UI.SelectInputData(/Raster);如果用户点返回,判断raster是否可用if ~obj_valid(raster) then return;如果可用data = Raster.GetData(bands=[0])result = canny (data)outfile = e.GetTemporaryFilename();定义输出栅格的波段,并且保存outRaster = ENVIRaster(result, uri = outfile, nbands =1) outRaster.Save;显示边缘检测后的栅格View = e.getview()Layer = View.Createlayer(outRaster)end显示的结果如下:。
ENVI 二次开发指南航天星图(北京)有限公司2006年7月前言ENVI(The Environment for V isualizing Images)遥感影像处理软件是美国RSI公司推出的由专业的遥感科学家基于交互式数据语言IDL开发的一套功能强大的遥感影像处理系统,它可以轻松读取、显示、分析各种类型遥感数据,并提供了从影像预处理、信息提取到与地理信息系统整合过程中需要的各种工具。
ENVI软件进行入中国市场十年来,凭借着其强大的遥感影像处理功能、丰富的遥感数据格式支持、简单易用的使用风格、中文化的菜单支持、全面的操作系统支持及IDL底层开发平台强大的可扩展能力被广大的遥感用户逐步熟悉和使用,并被广泛地应用于国土、地质、环境、林业、农业、军事、自然资源勘探和海洋资源管理等多个领域。
航天星图(北京)有限公司作为美国RSI公司在中国地区的独家代理商和增值服务商,不仅负责向广大用户提供RSI所有产品的销售和技术持,并且在RSI的全力支持下,为用户提供包括遥感数据生产流程设计、遥感影像增值服务、遥感平台定制开发、产品化设计和开发等全方位的技术服务,为用户的空间信息应用提供专业快速的解决方案。
面对越来越多的用户对ENVI/IDL二次开发中文手册的需要,我们特组织编写了ENVI二次开发指南。
全书包括ENVI编程介绍、波段运算、批处理、用户函数、常用编程工具、交互式函数等ENVI编程的各个方面。
书中附有大量的编程示例,详细说明了如何使用ENVI 进行二次开发。
我们的联系方式:E_mail: support@鉴于水平与时间有限,培训教程中不妥乃至错误之处在所难免,恳望学员不吝批评指正。
航天星图科技(北京)有限公司I目录前言 (I)第一章概述 (1)一、ENVI扩展简介 (1)1、扩展ENVI 是有可能的 (1)2、波段和波谱运算函数 (1)3、用户函数 (1)4、交互式用户程序 (2)5、自定义文件格式输入 (2)6、批处理 (2)7、ENVI 菜单文件 (2)8、编译 (2)9、Toggle Catch (3)二、ENVI编程的介绍 (3)1、非交互情况下复杂程序的控制 (3)2、ENVI和IDL环境下文件I/O的区别 (3)3、ENVI和IDL函数库目录 (4)三、ENVI处理程序的通用关键字 (4)1、FID (4)2、R_FID和M_FID (4)3、DIMS (5)4、POS (5)四、常用ENVI函数功能介绍 (5)1、文件管理 (5)2、打开外部文件格式 (6)3、获取数据 (6)4、使用感兴趣区(ROI)进行空间选取 (6)5、生成ENVI格式的文件 (6)第二章波段和波谱运算函数 (8)一、波段运算 (8)1、波段函数基础 (8)2、编写波段运算函数 (9)3、编译波段运算函数 (9)4、波段运算例子 (9)二、波谱运算 (10)1、波谱运算基础 (10)2、编写波谱运算函数 (11)3、编译波谱运行函数 (11)4、波谱函数的例子 (11)第三章批处理模式 (13)一、ENVI的批处理模式 (13)二、混合批处理模式 (14)三、批处理模式初始化 (14)航天星图科技(北京)有限公司II四、离开批处理模式 (15)五、编写批处理程序 (15)六、在批处理模式中记录ENVI的日志信息 (16)七、批处理的有用提示 (17)八、为批处理创建一个快捷方式 (17)八、批处理程序的例子 (17)1、文件信息的统计 (17)2、饱和度拉伸(非交互) (18)第四章用户函数 (21)一、用户函数介绍 (21)二、修改ENVI的菜单 (22)1、ENVI菜单系统简介 (22)2、ENVI菜单系统结构 (22)三、编写一个用户函数的实例 (23)四、为用户函数添加小部件 (24)五、可用的ENVI部件 (24)六、小部件事件自动管理程序 (30)七、用户函数中的错误捕获 (32)1、I/O错误处理 (32)2、例子:I/O 错误处理 (32)3、使用Catch函数进行非I/O错误的异常捕获 (33)八、与显示窗口进行交互 (33)九、使用影像分块技术 (34)1、影像分块简介 (34)2、分块处理程序 (34)3、分块处理程序例子 (35)4、保存结果 (38)5、非分块处理程序 (44)6、处理进度报告 (45)十、对于ENVI用户函数有用的IDL函数 (46)第五章常用编程工具 (48)一、绘图 (48)二、报告 (48)三、RGB颜色三元组 (48)四、获取文件信息 (49)五、文件的管理 (50)第六章交互式用户函数 (51)一、绘图函数 (51)二、波谱分析函数 (53)三、用户定义的地图投影类型 (55)四、用户自定义单位 (58)五、用户自定义的RPC读入程序 (59)六、用户自定义的移动函数 (61)第七章自定义文件输入 (66)航天星图科技(北京)有限公司III一、解析影像文件头 (66)二、自定义的影像读入程序 (69)第八章ENVI编程的其他主题 (76)一、ENVI的坐标系统 (76)1、影像坐标(像素坐标) (76)2、文件坐标 (76)3、XSTART和YSTART (76)4、XSTART和YSTART的编程 (77)二、感兴趣区(ROI) (78)1、感兴趣区处理 (78)2、选取ROI (79)3、使用ROI数据 (82)4、使用ROI DIMS指针 (84)5、使用ROI地址 (85)航天星图科技(北京)有限公司IV第一章概述一、ENVI扩展简介1、扩展ENVI 是有可能的扩展ENV 包括一系列的定制。
envi idl 二次开发-自定义envi扩展工具
ENVI扩展工具文件夹的在安装目录的Extension下:”C:\Program Files\Exelis\ENVI53\extensions”,自定的的envi扩展工具保存为.sav文件到该路径下后,启动envi就可以使用自定的扩展工具。
2.新建扩展完成后,会生成定义的代码,在pro envi5_canny_extensions_init 过程中,是用于定义扩展工具的显示的地方,如需要在原始菜单下的【Edit】菜单里的【Redo】下,添加Canny扩展功能,就可以写>>> e.AddExtension, ‘Canny’, ‘envi5_canny’,/menu, PATH=’Edit’,after = ‘Redo’, /SEPARATOR
; Add the extension to the toolbox. Called automatically on ENVI startup.
pro envi5_canny_extensions_init
; Set compile options
compile_opt IDL2
; Get ENVI session
e = ENVI(/CURRENT)
; Add the extension to a subfolder
e.AddExtension, 'Canny', 'envi5_canny', PATH=''
;添加到原始菜单下,/Sep表示分割符
e.AddExtension, 'Canny', 'envi5_canny',/menu,$
PATH='Edit',after = 'Redo', /SEPARATOR
end
3.在功能过程envi_canny中定义实现的方法,可以直接运行测试,之后进行【重置】,编译该过程,并将该过程保存到扩展工具目录下>>>
IDL> save,filename =”C:\Program Files\Exelis\ENVI53\extensions\envi5_canny.sav”,/routines
; ENVI Extension code. Called when the toolbox item is chosen.
pro envi5_canny
; Set compile options
compile_opt IDL2
; General error handler
CATCH, err
if (err ne 0) then begin
CATCH, /CANCEL
if OBJ_VALID(e) then $
e.ReportError, 'ERROR: ' + !error_state.msg
MESSAGE, /RESET
return
endif
;Get ENVI session
e = ENVI(/CURRENT)
;******************************************
; Insert your ENVI Extension code here...
;******************************************
UI = e.ui
;选择输入文件
Raster = UI.SelectInputData(/Raster)
;如果用户点返回,判断raster是否可用
if ~obj_valid(raster) then return
;如果可用
data = Raster.GetData(bands=[0])
result = canny (data)
outfile = e.GetTemporaryFilename()
;定义输出栅格的波段,并且保存
outRaster = ENVIRaster(result, uri = outfile, nbands =1)
outRaster.Save
;显示边缘检测后的栅格
View = e.getview()
Layer = View.Createlayer(outRaster)
end
显示的结果如下:。