ENVI5.0对ENVI启动、数据读取、显示窗口、处理函数API进行了更新,增加了工具箱扩展流程,更新的API函数更加简洁,使用更加方便。下面首先对ENVI启动、数据读取、显示窗口控制等功能进行代码示例展示,然后利用这些功能代码结合工具箱扩展流程编写一个ENVI扩展工具实例。
1<wbr><wbr><wbr><wbr> ENVI启动</wbr></wbr></wbr></wbr>
代码简化了启动,使得在启动ENVI的代码更加简洁、直观。IDL的命令行下启动ENVI只需要输入代码:
二次开发模式下输入代码:
ENVI5.0代码
|
之前版本代码
|
e=ENVI(/Headless)
|
ENVI, /RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT
|
2<wbr><wbr><wbr><wbr> 数据读写</wbr></wbr></wbr></wbr>
之前版本中,ENVI依靠文件的ID号即FIDs来进行栅格文件的操作。ENVI5.0下可以通过新的API接口返回值来进行直接处理。比如对栅格文件的读写操作示例代码:
ENVI5.0代码
|
;启动ENVI
e = ENVI(/HEADLESS)
<wbr></wbr>
;打开文件
file = FILEPATH('qb_boulder_msi', ROOT_DIR = e.root_dir, $
<wbr><wbr><wbr>SUBDIR=['data'])</wbr></wbr></wbr>
raster = e.OpenRaster(file)
;读取影像的第一个波段
data = raster.GetData(BANDS = 0)
<wbr></wbr>
;另存为新文件
resultFile = e.GetTemporaryFilename('.dat')
newRaster = e.CreateRaster(resultFile, data, INHERITS_FROM = raster)
newRaster.Save
<wbr></wbr>
|
5.0之前版本代码
|
;启动ENVI
ENVI, /RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT
<wbr></wbr>
;打开文件
file = FILEPATH('qb_boulder_msi', ROOT_DIR=ENVI_GET_PATH(), $
<wbr><wbr><wbr>SUBDIR=['..','data'])</wbr></wbr></wbr>
ENVI_OPEN_FILE, file, R_FID = fid
ENVI_FILE_QUERY, fid, DIMS = dims
<wbr>;读取影像的第一个波段</wbr>
data = ENVI_GET_DATA(FID = fid, DIMS = dims, pos = 0)
<wbr></wbr>
;另存为新文件
inherit = ENVI_SET_INHERITANCE(fid, dims)
resultFile = FILEPATH('qb_boulder_msi_classic_band0.dat', /TMP)
ENVI_WRITE_ENVI_FILE, data, INHERIT = inherit, R_FID = r_fid, $
<wbr><wbr><wbr>OUT_NAME = resultFile</wbr></wbr></wbr>
ENVI_BATCH_EXIT
|
3<wbr><wbr><wbr><wbr> 窗口控制</wbr></wbr></wbr></wbr>
在IDL下可以通过代码进行数据图层、显示窗口绘制等操控处理。
<wbr></wbr>ENVI5.0代码
|
;启动ENVI
e = ENVI()
<wbr></wbr>
;打开两个文件
file1 = FILEPATH('qb_boulder_pan', ROOT_DIR = e.root_dir, $
<wbr><wbr><wbr>SUBDIRECTORY = ['data'])</wbr></wbr></wbr>
file2 = FILEPATH('qb_boulder_msi', ROOT_DIR = e.root_dir, $
<wbr><wbr><wbr>SUBDIRECTORY = ['data'])</wbr></wbr></wbr>
raster1 = e.OpenRaster(file1)
raster2 = e.OpenRaster(file2)
<wbr></wbr>
;在两个独立的窗口中显示
view1 = e.GetView()
view1_layer = view1.CreateLayer(raster1)
view2 = e.CreateView()
view2_layer = view2.CreateLayer(raster2)
<wbr></wbr>
;在一个窗口中显示
view3 = e.CreateView()
view3_layer1 = view3.CreateLayer(raster1)
view3_layer2 = view3.CreateLayer(raster2)
portal = view3.CreatePortal()
<wbr></wbr>
;窗口进行关联显示
view1.GeoLink, /LINK_ALL
<wbr></wbr>
;窗口视图中心点移动到指定坐标位置
view1.GoToLocation,482234.9000d,4427500.7000D,/map
|
5.0之前版本代码
|
;启动ENVI
ENVI
<wbr></wbr>
;打开两个文件
file1 = FILEPATH('qb_boulder_pan', ROOT_DIR = ENVI_GET_PATH(), $
<wbr><wbr><wbr>SUBDIRECTORY = ['..','data'])</wbr></wbr></wbr>
file2 = FILEPATH('qb_boulder_msi', ROOT_DIR = ENVI_GET_PATH(), $
<wbr><wbr><wbr>SUBDIRECTORY = ['..','data'])</wbr></wbr></wbr>
ENVI_OPEN_FILE, file1, R_FID = fid1
ENVI_OPEN_FILE, file2, R_FID = fid2
<wbr></wbr>
;在两个独立的窗口中显示
ENVI_DISPLAY_BANDS, fid1, 0, /new
ENVI_DISPLAY_BANDS, fid2, [2,1,0], /new
<wbr></wbr>
;获取窗口的ID号 Get the display numbers
displays = ENVI_GET_DISPLAY_NUMBERS()
<wbr></wbr>
; 窗口视图中心点移动到指定坐标位置
ENVI_CONVERT_FILE_COORDINATES, fid1, XF, YF,482234.9000d,4427500.7000D
DISP_GOTO, displays[0], XF, YF
ENVI_CONVERT_FILE_COORDINATES, fid2, XF, YF,482234.9000d,4427500.7000D
DISP_GOTO, displays[1], XF, YF
|
4<wbr><wbr><wbr><wbr> 数据处理</wbr></wbr></wbr></wbr>
数据处理时,可以在现在的数据操控基础上转换调用ENVI的处理函数进行。
;启动ENVI
e = ENVI()
<wbr></wbr>
;打开一数据文件
file = FILEPATH('qb_boulder_msi', ROOT_DIR = e.ROOT_DIR, $
<wbr><wbr><wbr>SUBDIRECTORY = ['data'])</wbr></wbr></wbr>
raster = e.OpenRaster(file)
<wbr></wbr>
;设置输出文件名
out_file = e.GetTemporaryFilename()
<wbr></wbr>
;转换为Fid(File ID)
fid = ENVIRasterToFID(raster)
<wbr></wbr>
;利用Fid进行处理,获取处理后的r_fid
ENVI_FILE_QUERY, fid, DIMS=dims
ENVI_DOIT,'CONV_DOIT', FID=fid, $
<wbr><wbr><wbr>DIMS=dims, OUT_NAME=out_file, $</wbr></wbr></wbr>
<wbr><wbr><wbr>METHOD=0, R_FID=r_fid</wbr></wbr></wbr>
<wbr></wbr>
;转换r_fid为ENVI的栅格对象
out_raster = ENVIFIDToRaster(r_fid)
<wbr></wbr>
;在显示窗口中显示原图和处理后结果
view = e.GetView()
layer1 = view.CreateLayer(raster)
layer2 = view.CreateLayer(out_raster)
portal = view.CreatePortal()
|
5<wbr><wbr><wbr><wbr> 工具箱扩展</wbr></wbr></wbr></wbr>
基于ENVI提供的数据读写、窗口控制和数据处理函数可以方便的实现ENVI工具箱的扩展。IDL中提供了ENVI工具箱扩展向导来扩展工具箱。以在ENVI的工具箱下添加浮雕效果处理功能为例,扩展工具箱的基本步骤如下:
1)<wbr><wbr><wbr><wbr><wbr><wbr><wbr> 新建ENVI扩展</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
单击IDL菜单文件-新建ENVI扩展,弹出如下界面,工程名称为“em_boss”,扩展名称为“em_boss”,IDL程序名称为“envi_em_boss_extension”,扩展路径为“ImageProcessing”。
点击完成后,会在当前工作空间中建立名为emboss的工程,并包含了一个完整的代码框架。框架内容如下:
; Add the extension to the toolbox. Called automatically on ENVI startup.
pro my_extension_extensions_init
<wbr> ; Set compile options</wbr>
<wbr> compile_opt IDL2</wbr>
<wbr></wbr>
<wbr> ; Get ENVI session</wbr>
<wbr> e = ENVI(/CURRENT)<wbr></wbr></wbr>
<wbr> ; Add the extension to a subfolder</wbr>
<wbr> e.AddExtension, 'emboss', 'my_extension', PATH='I:\program files\Exelis\ENVI50\extensions'</wbr>
end
<wbr></wbr>
; ENVI Extension code. Called when the toolbox item is chosen.
pro my_extension
<wbr> ; Set compile options</wbr>
<wbr> compile_opt IDL2</wbr>
<wbr></wbr>
<wbr> ; General error handler</wbr>
<wbr> CATCH, err</wbr>
<wbr> if (err ne 0) then begin</wbr>
<wbr><wbr><wbr> CATCH, /CANCEL</wbr></wbr></wbr>
<wbr><wbr><wbr> if OBJ_VALID(e) then $</wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> e.ReportError, 'ERROR: ' + !error_state.msg</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr> MESSAGE, /RESET</wbr></wbr></wbr>
<wbr><wbr><wbr>return</wbr></wbr></wbr>
<wbr> endif<wbr></wbr></wbr>
<wbr> ;Get ENVI session</wbr>
<wbr> e = ENVI(/CURRENT)<wbr></wbr></wbr>
;******************************************
; Insert your ENVI Extension code here...
;******************************************
<wbr></wbr>
end
|
2)<wbr><wbr><wbr><wbr><wbr><wbr><wbr> 编写处理功能代码</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
在框架代码的标识处、添加编写输入输出和处理图像的功能代码如下:
<wbr> ;打开输入文件</wbr>
<wbr> inFile=DIALOG_PICKFILE(DIALOG_PARENT=e.WIDGET_ID, $</wbr>
<wbr><wbr><wbr> TITLE='Please select input file',$</wbr></wbr></wbr>
<wbr><wbr><wbr> /MUST_EXIST)</wbr></wbr></wbr>
<wbr><wbr><wbr></wbr></wbr></wbr>
<wbr> ;选择输出文件</wbr>
<wbr> outFile=DIALOG_PICKFILE(DIALOG_PARENT=e.WIDGET_ID, $</wbr>
<wbr><wbr><wbr> TITLE='Please select output file')</wbr></wbr></wbr>
<wbr><wbr><wbr></wbr></wbr></wbr>
<wbr> ;打开并显示</wbr>
<wbr> raster = e.OpenRaster(inFile)</wbr>
<wbr> view=e.GetView()</wbr>
<wbr> layer1=view.CreateLayer(raster, BANDS=[0])</wbr>
<wbr></wbr>
<wbr> ;创建文件输出</wbr>
<wbr> rasterNew = e.CreateRaster(outFile, INHERITS_FROM=raster)</wbr>
<wbr></wbr>
<wbr> ;获取栅格的分块数</wbr>
<wbr> tiles = raster.CreateTileIterator(BANDS=[0])</wbr>
<wbr> ;依次处理</wbr>
<wbr> FOREACH tile, Tiles DO BEGIN</wbr>
<wbr><wbr><wbr> data = EMBOSS(tile, /EDGE_WRAP)</wbr></wbr></wbr>
<wbr><wbr><wbr> rasterNew.SetTile, Data, Tiles</wbr></wbr></wbr>
<wbr> ENDFOREACH</wbr>
<wbr></wbr>
;保存文件
<wbr> rasterNew.Save</wbr>
<wbr> ;新增显示图层</wbr>
<wbr> layer2 = view.CreateLayer(rasterNew)</wbr>
<wbr></wbr>
<wbr> ;卷帘显示并动态切换</wbr>
<wbr> portal = view.CreatePortal()</wbr>
<wbr> portal.Animate</wbr>
|
3)<wbr><wbr><wbr><wbr><wbr><wbr><wbr> 生成sav文件</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
右击工程名称“em_boss”,弹出菜单中选择“构建工程”,会生成“envi_em_boss_extension.sav”文件。
4)<wbr><wbr><wbr><wbr><wbr><wbr><wbr> 使用扩展</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
将生成的“envi_em_boss_extension.sav”文件拷贝到ENVI50安装目录的扩展目录下,默认为“c:\program files\Exelis\ENVI50\extensions”,启动ENVI,在工具箱下会发现新增加的扩展工具。
<wbr></wbr>
双击执行工具,选择输入文件和输出文件名,工具会对图像进行处理,并将原始图像与处理后图像动态叠加显示。
<wbr><br></wbr>
分享到:
相关推荐
ENVI用户指南--不错的ENVI教程 ENVI用户指南--不错的ENVI教程
envi-app-store安装后,打开envi,然后联结网络,可以下载envi最新插件
ENVI拓展工具-MCTK_5.3
python库,解压后可用。 资源全名:envi-0.2.1-py2.py3-none-any.whl
常用ENVI功能扩展工具:植被增强工具、直方图匹配工具、完全约束最小二乘法混合像元分解、批量构建栅格图像轮廓线、Google Earth Super-Overlay Tool (GEST)。
1) 启动ENVI,打开遥感图像文件; 2) 按照下面指定的工具或菜单路径找到Image Derivative工具,并启动。 在ENVI 5.2中,在Toolbox中选择/Extensions/VegetationEnhance 在ENVI Classic/4.8中,选择主菜单Spectral...
Image-analysis-classifaction-and-change-detection-in-remote-sensing-with-algorithms-for-ENVI-IDL-and-Python.pdf
读写ENVI文件,有助于进一步学习ENVI的读写
基于ENVI5.3以上版本的S_G滤波工具,将文件放置在对应安装路径下重新打开软件即可使用
5 个附录分别针对:ENVI 基本功能、文件格式、波谱库、地图投影以及描述 ENVI 该版 本的新特征。该介绍性章节包括与 ENVI 图形用户界面(GUI)的交互,使用 ENVI 窗口,及其它 介绍性材料。新的 ENVI 用户使用前务必...
ENVI所有功能模块,操作步骤介绍的中文帮助,很详细,也很全面。相当于ENVI官方帮助的中文翻译,有详细的操作步骤介绍。
ENVI--band-math-波段运算.pdf
ENVI5.3SP1软件许可声明亲测可用,详细资源下载可浏览百度资源下载
Envi met针对的是街区尺度的热环境...Envi met是由德国的Michael Bruse (University of Mainz Germany 开发的一个三维微气候模型 以0 5 10m的空间解析度和10S的时间解析度来模拟城市环境中的实体表面 植物 空 [更多]
ENVI 5.0 sp3 64位licence 破解
ENVI5.0-Google Map ENVI与Google相结合
小熊工具箱v2.0—ENVI功能扩展,提升工作效率
ENVI4.7-单机版-Windows-安装说明
对某市的遥感影像的处理 资源大小3.6GB(含压缩包) 文件主要包括: 1. 遥感数据(原始数据), 2.根据数据特点灵活选择图像的裁剪、合成、辐射校正、几何校正、滤波后的结果文件;...5. 分类结果评价。 6.课程设计报告