ENVI5.0 Beta体验-二次开发

ENVI5.0Beta提供了全新的界面,拥有了良好的操作体验效果,见https://www.cnblogs.com/enviidl/p/16521796.html。ENVI的二次开发方式在保留原来的功能强大、方便调用的二次开发模式(ENVI Batch mode)基础上,对界面控制和扩展方面进行了更新:

1、 命令行下灵活的界面控制

   在IDL的命令行下对ENVI的数据加载和界面功能控制函数进行了封装和简化,使得用户利用命令控制ENVI显示更加方便。

   例如打开一个多波段影像进行两个窗口关联显示的示例代码(“;”后面为额外注释)如下:

;启动ENVI

IDL> e = envi()

;定义输入影像文件完整路径名称

ENVI> file = FILEPATH('qb_boulder_msi', SUBDIR = ['products', 'envidata'])

;打开影像文件

ENVI> image = e.OpenRaster(file)

;获取当前显示窗体

ENVI> view1 = e.GetView()

;显示窗体中真彩色合成显示图像,见图1

ENVI> rgb = view1.CreateLayer(image)

;添加第二个显示窗体

ENVI> view2 = e.CreateView()

;第二个显示窗体中假彩色合成显示图像

ENVI> cir = view2.CreateLayer(image, /CIR)

;地理关联两个显示窗体,见图1

ENVI> view1.GeoLink, view2

;关闭显示窗体1

ENVI> view1.Close      

;退出ENVI

ENVI> e.close


图1 命令行下显示真彩色合成图像

 图2 命令行下地理关联显示真彩色合成和假彩色合成图像

2、 方便易用的ENVI工具箱扩展

   自ENVI5.0中提供了更加直观的工具箱和快捷的功能调用,利用IDL编写功能扩展也非常的容易。下面以编写生成自动闪烁透视图扩展工具为例,步骤如下:

1)      新建ENVI工具扩展工程

启动IDL,点击菜单“New ENVI Extension…”,见图3.

 图3 IDL工作台中新建ENVI功能扩展

在工具扩展项目属性中输入扩展名称与功能函数等参数,如图4

图4 扩展工具参数设置

2)      编写功能代码

点击按钮“完成”,IDL会自动创建工程“MyExtension”和源码文件“emboss_band1.pro”,并在源码文件中提供代码框架,见图5。

图5 自动生成的扩展工具代码框架

编写工具扩展功能代码,打开影像文件并对比闪烁显示的代码如下:

;******************************************

 ; Insert your ENVI Extension code here...

 ;******************************************

 ;对话框选择待显示影像文件

 inFile=DIALOG_PICKFILE(DIALOG_PARENT=e.WIDGET_ID, $ 

   TITLE='Please select input file',$   

   /MUST_EXIST)   

 ;对话框交互选择输出结果文件   

 outFile=DIALOG_PICKFILE(DIALOG_PARENT=e.WIDGET_ID, $ 

   TITLE='Please select output file')   

   

 ;打开输入影像文件并显示  

  raster = e.OpenRaster(inFile) 

 view=e.GetView() 

 layer1=view.CreateLayer(raster, BANDS=[0])

 ;创建输出结果文件 

  rasterNew = e.CreateRaster(outFile, INHERITS_FROM=raster) 

 ; 基于文件分块创建闪烁区域图像块

  tiles = raster.CreateTileIterator(BANDS=[0]) 

 FOREACH tile, Tiles DO BEGIN 

   data = EMBOSS(tile, /EDGE_WRAP)   

   rasterNew.SetTile, Data, Tiles   

 ENDFOREACH

 

 ;保存文件并加载到显示窗体 

 rasterNew.Save 

  layer2 = view.CreateLayer(rasterNew)  

 ;加载透视窗口并对比闪烁显示

  portal = view.CreatePortal() 

 portal.Animate

 end

3)      sav文件生成

可以通过工程构建方式生成或命令行下生成,如命令行下生成代码:

IDL> .RESET_SESSION

IDL> .COMPILE emboss_band1.pro

IDL> RESOLVE_ALL, /CONTINUE_ON_ERROR, SKIP_ROUTINES='ENVI'

IDL> SAVE, FILENAME='emboss_band1.sav', /routines

4)      扩展使用

将生成的sav文件拷贝到ENVI5.0安装目录下enviextensions子目录,重启ENVI。在ENVI的ToolBox下Extensions下发现新编写的工具,双击执行后效果见图6。

图6 扩展工具调用

posted @ 2022-09-05 11:16  ENVI-IDL技术殿堂  阅读(324)  评论(0编辑  收藏  举报