LearningENVI&IDL分享 http://blog.sciencenet.cn/u/dongyanqing Learning ENVI&IDL

博文

[转载]【转】ArcGIS中自定义ENVI/IDL图像处理工具

已有 5929 次阅读 2011-2-22 23:42 |个人分类:ENVI|系统分类:科研笔记|关键词:图像处理| 图像处理 |文章来源:转载

ArcGIS中自定义ENVI/IDL图像处理工具

    随着空间信息市场的快速发展,遥感数据与GIS的结合日益紧密。遥感影像已经是GIS的核心组成部分,为GIS提供了即时、丰富的数据。导致遥感与GIS的一体化集成逐渐成为一种趋势和发展潮流。ENVIArcGIS一体化集成已经从最开始的数据互操作、工作流的无缝连接发展到了第三阶段,即系统无缝融合阶段,全面提升遥感影像价值。进一步提升了空间和影像分析的工作效率,并有效节约系统成本。

    目前ENVI4.8的部分图像处理功能可以无缝集成在ArcGIS93110版本的ArcToolbox中,在ArcGIS软件中能直接使用ENVITools,并且可以用ModelBuilderENVI工具和ArcToolbox中的GIS工具组合成需要的业务模型和工作流。同时这些模型和工具支持ArcGISServer的网络发布。ENVITools中现有的工具在ArcGIS下使用和建模都非常方便,在此不一一细说。

    下面主要介绍如何利用Python脚本将ENVI/IDL编写的图像处理功能集成到ArcGIS中,进行一体化的数据处理和分析。(以及如何利用ArcGISServer发布ENVI的图像处理功能。)

一、步骤

1、指定路径和文件夹

    指定一个路径创建一个文件夹,用于存放IDL文件和Python代码文件。

        如:C:MyTool

2、编写Python Script

        Python script文件是为了从用户交互式界面中获取参数,执行脚本文件时将这些参数传递给图像处理程序(IDL编写了.sav文件)调用图像处理的功能。

利用Python来编写脚本调用ENVI/IDL工具,包含三个部分:

1导入 envipy 类。

    “envipy”是ITT专门为ENVI/ArcGIS一体化开发的一个python模块,envipyIDL代码中调用ENVI库函数时的加载的代码ENVI/RESTORE_BASE_SAVE_FILESENVI_BATCH_INIT的效果是一样的,就是加载ENVI的进程。

2)从GP对象中获取参数。(Get the parameters from the geoprocessor object.)

3调用envipy类中的‘RunTool’方法。(Call the RunTool function in the envipy module.)

 

ArcGIS10为例(ArcGIS931可查看ENVIHelp文档):

     #导入模块

     import envipy, arcpy

     # Get input raster

     inRasterName = arcpy.GetParameterAsText(0)

     # Get output raster

     outRasterName = arcpy.GetParameterAsText(1)

     # Get the Kernel Size

     kernelSize = arcpy.GetParameterAsText(2) 

     # IDL procedure name in the SAVE file for this tool

     toolname = 'MyScriptTool' 

     # Execute ENVI custom tool 

     envipy.RunTool(toolname, inRasterName, outRasterName, kernelSize,  Library=r'MyScriptTool.sav')

Python的编译环境复制粘贴该代码,保存为MyScriptTool.py文件,供后面创建界面时使用。

3、编写IDL程序,并编译成sav文件

IDL的利用IDL调用ENVI的图像处理接口实现某一图像处理功能;再编译成sav文件供Python脚本中envipy.RunTool()调用。

有两种编译方式:

方式1:命令行

IDL> .full_reset_session

IDL> .compile myscripttool.pro;或者点击IDL开发环境界面上的‘编译’按钮,编辑该程序。

IDL> resolve_all,skip_routines='envi',/continue_on_error,/quiet

IDL> save,/routines,filename='C:MyToolMyScriptTool1.sav' ;指定保存路径和名字。

 

方式2:按钮操作

构建一个工程,将所有的profunction文件加载该工程中,右键该工程文件夹点击“构建工程”(注意工程属性的设置,属性中的RESOLVE_ALL选上与不选都可以)。

 

需要注意的是:

1可以将多个图像处理的工具(pro toolname1, arg0, arg1, arg2pro toolname2, arg0, arg1, arg2等等,每一个pro对应一个图像处理功能)打包成一个sav文件,这个sav文件在Python脚本中被调用。如第2节中的例子代码:

toolname = 'MyScriptTool'

envipy.RunTool(toolname, inRasterName, outRasterName, kernelSize,

               Library=r'MyScriptTool.sav')

    此代码中的 Library=r'MyScriptTool.sav'MyScriptTool.sav文件的文件名可以是任意的,ha.sav。但是必须保证该sav文件中有程序名与toolname对应(此代码中的toolname就是为了调用sav文件中的同名的程序,toolname不支持函数function,只支持程序pro)。

    将多个图像处理的程序打包成一个sav文件,这就保证了多个脚本工具可以对应一个同一个sav文件,免得每一个脚本对应的pro都要编译成单独的一个sav文件。

    如:有5个图像处理的程序pro tool1pro tool2pro tool3pro tool4pro tool5。可以编译成5sav文件,分别建立5个脚本工具。同样地,可以将这5pro编译成1sav文件,被5个脚本调用,效果是一样的,只是这种方式更方便些。

2尽量将sav文件与python脚本文件放在一个文件夹(相同目录)下,方便共享。如果不在一个目录下,在envipy.RunTool()Library要指定sav文件的完整路径,如Library = r'c:savefilesMyEnviTool.sav'

4、构建用户使用界面

在Catalog中构建界面需要三步骤:

l  创建文件和工具箱toolbox

l  toolbox添加script

l  运行该脚本script

操作流程如下:

1)打开arcgis desktop10,打开catalog,在catalog中指定或者新建一个文件夹并修改相应的名字,右键该文件夹——NEW——toolbox(并修改相应的名字mytool)。

2)右键该工具箱(mytool)——Add——Script


点击下一步“添加脚本文件”,将事先写好的脚本导入即可。


点击下一步“为IDLENVI功能程序中的参数进行设置”。


设置完成后,点击‘finish’即可。

3)上述步骤完成后,会在已建好的工具mytools下出现

双击,即可出现运行界面:


点击OK执行脚本工具。

二、共享脚本工具

如果想将制作的脚本工具与别人共享或移植到别的计算机上运行该脚本,必须保证三个文件在一个文件包(文件夹)中。

MyScriptTool.py ——脚本文件(.py)。

MyScriptTool.sav ——IDLENVI的功能文件(.sav)。

MyToolbox.tbx——创建的toolbox界面文件(.tbx)。

以上三个文件放在一个文件包中,移动改文件包即可完成共享。

 

使用时,打开ArcToolbox,右键空白处点击Add Toolbox,添加共享文件包中的.tbx文件即MyToolbox.tbx

然后该工具出现在ArcToolbox中,

 

如要下载源码和工具请链接:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=86612&extra

 

注意:如果没有指定建立toolbox的路径,直接在catalog中的arctoolbox中新建的toolbox,该文件的路径如下:

·         MyToolbox.tbx, located in:

For ArcGIS 10:C:Documents and SettingsusernameApplication DataESRIDesktop10.0ArcToolboxMy ToolboxesMyToolbox.tbx 

For ArcGIS 9.3:C:Documents and SettingsusernameApplication DataESRIArcToolboxMy ToolboxesMyToolbox.tbx

原帖:http://hi.baidu.com/%C6%D0%CC%E1%C3%F7/blog/item/a70513aec85b53df7cd92ab4.html



http://blog.sciencenet.cn/blog-344887-415607.html

上一篇:IDL下界面事件响应程序
下一篇:[转载]ENVI栅格文件格式说明

0

发表评论 评论 (2 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-11-18 06:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部