欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    ENVIIDL二次开发.ppt

    • 资源ID:5336938       资源大小:1.09MB        全文页数:39页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ENVIIDL二次开发.ppt

    ENVI/IDL 二次开发,新疆大学资源与环境科学学院买买提沙吾提QQ:317851568,主要内容,1,ENVI/IDL二次开发介绍,3,批处理模式,ENVI/IDL二次开发介绍,如何进行ENVI功能的扩展波谱、波段函数 扩展ENVI功能的最简单方法,波段和波谱运算函数,不需要处理文件I/O,不需要进行事件控制,不需修改菜单,用户只需编写运算函数部分内容,其它由ENVI进行管理。批处理模式不出现ENVI的菜单界面,通过调用ENVI提供的非交互式函数来实现交互式ENVI所提供的功能。,ENVI/IDL二次开发介绍,用户函数用户函数可以用IDL、C、Fortran或者其它的高级语言编写,并集成到ENVI软件中,通过ENVI的菜单来执行。用户函数可以通过ENVI获得输入数据,并将结果直接输入到ENVI中。用户函数包括了部件的定义,事件的处理,以及处理程序。用户函数和ENVI菜单的一个按钮联系起来,并像ENVI的其它函数一样执行。,ENVI/IDL二次开发介绍,ENVI程序中的通用关键字FIDFID是一个长整型的标量。FID为ENVI的程序员提供了一个命名变量,可以用于一个或几个ENVI程序,来打开或选择文件。所有对该文件进行操作的ENVI程序都是通过FID完成。如果文件打开失败,则FID返回为-1。,ENVI/IDL二次开发介绍,R_FID和M_FIDENVI处理程序产生结果一幅新图像也包括一个R_FID,或者称为返回FID关键字。如果结果是存在内存中的,设置R_FID关键字是访问数据的唯一方法。进行掩模的处理时还包括一个M_FID,或者称为掩模关键字,用于确定用于掩模波段的文件。,ENVI/IDL二次开发介绍,DIMS DIMS关键字是一个5个元素长整型数组。它定义了处理数据的空间子集。当需要确定FID的时候,你必须同时确定该文件的空间范围。DIMS0 存储一个打开的ROI区域的指针,仅在ROI被定义的时候使用,其它时候设为-1L DIMS1 采样的起始位置 Sample start DIMS2 采样的终止位置 Sample end DIMS3 行的起始位置 Line start DIMS4 行的结束位置 Line end,ENVI/IDL二次开发介绍,POSPOS关键字定义了用于处理的波段位置,是一个变长的长整型数组。波段从0开始,例如,要处理第三波段和第四波段,POS=2,3。,ENVI/IDL二次开发介绍,常用ENVI功能函数介绍文件管理 ENVI_PICKFILE:产生一个提示用户选择文件的对话框,并返回用户所选择的文件名 ENVI_SELECT:产生对话框提示用户从ENVI中已经打开的文件中选择一个文件,并返回用户所选择文件的FID,该函数还可以返回DIMS和POS的值 ENVI_OPEN_FILE:该函数返回一个文件的FID,并将文件信息添加到可用波段列表中 ENVI_FILE_MNG:该函数可以打开、关闭或者删除硬盘上的文件。无需用户干预 ENVI_GET_FILE_IDS:该函数返回所有当前打开的文件的FID,ENVI/IDL二次开发介绍,打开外部文件格式 ENVI_OPEN_DATA_FILE:该函数打开ENVI所支持的外部文件(无ENVI头文件)并返回FID获取数据 ENVI_GET_DATA:该函数从一个打开的文件中获取影像数据。它每次只返回某一波段的数据,数据的范围由DIMS关键字控制。ENVI_GET_SLICE:该函数从一个打开的文件中获取波谱影像数据,它返回影像某一行所有波段的数据值。结果以BIP或BIL的格式返回,ENVI/IDL二次开发介绍,将数据输入到ENVIENVI_ENTER_DATA:该函数将IDL数组中的数据输入到内存中,并通过可用波段列表进行管理。将影像数据存入硬盘 使用IDL的WRITEU函数写入数据 ENVI_SETUP_HEAD:使用该函数写某个影像数据的头文件,波段、波谱运算,波段运算,Function bm_func,b1,b2,bn,parameters and keywords processing steps return,result end,波段、波谱运算,波谱运算,ENVI批处理模式,批处理模式简介批处理模式的ENVI和正常模式下没有什么区别,只是通过一系列的特定的函数库来执行ENVI的功能。为了使用这些函数,必须首先将它们恢复到IDL内存中。因此为了正确获取这些函数,有必要了解一下ENVI程序的结构。ENVI功能文件由大约50多个小的IDL save文件组成,这些文件是包括数据和编译后的程序的二进制文件。这些save文件存放在ENVI安装目录下的Save目录下。ENVI的核心save文件包括ENVI的基本功能函数,动态运行函数以及ENVI运行所需的内部变量。,ENVI批处理模式,如何开始批处理模式 恢复ENVI sav文件 envi,/restore_base_save_files 开始批处理模式 envi_batch_init,log_file=batch.txt 退出批处理模式 envi_batch_eixt批处理的例子,用户函数,用户函数简介用户函数允许用户为ENVI添加新的功能并通过ENVI的菜单进行访问。用户能够添加任意数量的用户函数,并且每个函数都可以获得它自己的菜单选项。用户函数是事件的处理程序。因此,所有的ENVI用户函数必须遵循事件处理的基本规则,即用户函数定义时必须要加上一个附加的变量来接受事件结构。,用户函数,ENVI菜单修改使用任何文本编辑器就可以打开envi.men文件。文件的结构如下所示:0 File 1 Open Image Fileopen envi fileenvi_menu_event 1 Open Vector Fileopen vector fileenvi_menu_event 1 Open External File 2 Landsat 3 Fast open fast tm envi_menu_event 3 GeoTIFF open tiff envi_menu_event 3 HDF open envi file envi_menu_event 3 NLAPS open nlaps envi_menu_event每一行开始的数据定义了菜单项的层次。0表示最顶层,1表示一级子菜单,2表示二级子菜单,依次类推。,用户函数,Open External File第一个大括号括起来的部分定义了显示在菜单上的内容。open envi file第二个大括号括起来的部分定义了为菜单项所赋给的用户值。用户值在同一用户函数处理多个菜单项时非常有用,可以区别那个菜单项被选择。envi_menu_event第三个定义了菜单项事件处理程序的名称,即编写的用户函数名。此处使用的是用户函数名,而不是用户函数所在的文件名,所以没有后缀。需要注意的部分:用户值在大多数ENVI的程序中是需要的,要保持用户值的唯一性。但当编写用户函数时,大多数情况下,用户值部分是没有用的,这时候,可以将用户值设为和用户函数名一致,也可以将它设置为not used等醒目的标示。修改ENVI菜单添加如下部分:0MyFunctions 1Basic File Infonot usedfile_info,用户函数,为用户函数添加Widget部件ENVI包括了20多种的小部件,可以为用户函数所用。大多数的函数以WIDGET_开头。ENVI_PICKFILE:用于从硬盘上选择一个文件。可以用来收集任意类型的文件名。ENVI_SELECT:ENVI标准的文件选择对话框,用来选择一个打开的文件,确定空间和光谱子区,以及掩模波段。它也包括了一个打开按钮,能够允许用户从硬盘上打开一个新的文件。WIDGET_EDIT:提供了一个部件从列表中选择项目。,用户函数,WIDGET_EDIT:提供了一个部件从列表中选择项目WIDGET_GEO:用于提示用户选择经纬度值。,用户函数,WIDGET_MAP:用于编辑地图坐标和投影WIDGET_MENU,用户函数,WIDGET_MULTI:用于多项选择WIDGET_OUTF 用于选择一个输出文件名,用户函数,WIDGET_OUTFM:用于选择一个输出文件名或是输入到内存WIDGET_PARAM,用户函数,WIDGET_PMENU:提供下拉菜单WIDGET_RGB:用于修改RGB颜色值,用户函数,WIDGET_SLABEL:用于显示文本信息WIDGET_STRING,用户函数,Widget部件自动事件管理程序WIDGET_AUTO_BASE 如果要创建事件自动管理的部件构架,必须通过WIDGET_AUTO_BASE创建顶级BASE,在构建GUI的过程中使用的其它BASE使用原来的WIDGET_BASE函数创建。AUTO_WID_MNG 调用AUTO_WID_MNG函数进行部件的注册,检测事件,并以结构的形式返回用户输入的值,用户函数,用户函数中错误的捕获 使用Catch函数进错误的捕获Catch,errorIF(error NE 0)THEN BEGINok=DIALOG_MESSAGE(!error_state.msg,/cancel)IF(STRUPCASE(ok)EQ CANCEL)THEN returnENDIF,用户函数,用户函数与显示组交互ENVI中每一个三窗口的显示组都能够通过一个唯一数字标识DN进行区别。一旦获得某一显示组的DN值,ENVI提供了几个函数能够提供显示组的有用信息,并能够控制Zoom窗口的移动位置ENVI_DISP_QUERY:该函数体能够了获取当前显示影像的基本信息,包括影像文件的FID,空间分辨率,影像的显示类型(RGB,灰度或分类),显示的波段位置,以及三个窗口的大小,用户函数,ENVI_GET_IMAGE:该函数类似于ENVI_GET_DATA函数,但它用于从显示窗口中返回数据。给定波段位置,维度,以及DN值,ENVI_GET_IMAGE函数能够返回拉伸后的灰度值DISP_GET_LOCATION,该函数返回当前选定的像素的位置DISP_GOTO,该函数移动Zoom窗口到一个指定的位置,并在必要的情况下更新Image和Scroll窗口,用户函数,在用户函数中使用影像分块技术所有的ENVI用户函数也能够通过ENVI内建的分块函数获取数据。这确保了用户函数也能够处理任意大小的数据文件。ENVI的分块来自于三种格式:BSQ格式,BIL格式以及BIP格式。ENVI还提供了进度条部件来显示分块的处理情况。,用户函数,ENVI分块处理将输入数据分成同样大小的单元,可以是空间方式也可以是波谱方式,以确保所有大小的影像都能被处理。一个空间分块的大小是n行*所有列,而波谱分块的大小是Sample*band。,用户函数,空间分块近似等于按输入波段对影像进行分块,因此可以不用考虑文件的存储方式而进行空间处理。但访问单一文件的多个波段,所有波段将拥有同样数目的空间分块。通常进行空间分块的都是BSQ文件,而进行波谱分块的是BIL或BIP文件。使用和输入文件同样的存储方式非常有效。当进行邻域处理时,空间分块也可以设定重叠的行数。重叠行仅加在每个分块的顶部,在整个波段作为一个分块时,没有重叠行。例如:进行3x3卷积时,需要一行重叠来处理上一个分块的最后一行。,用户函数,分块处理的步骤如下:初始化空间或波谱分块需求,使用 ENVI_INIT_TILE 获取分块输入数据,ENVI_GET_TILE 当所有的分块数据都处理完毕,释放分块需求,ENVI_TILE_DONE,用户函数,保存结果 输出文件通过使用IDL程序OPENW写入,在调用OPENW程序前,需要通过GET_LUN函数获得文件单元号。通过IDL程序WRITEU函数将处理后的分块数据写入文件。在所有分块数据都写入后,文件被关闭,文件单元号通过IDL程序FREE_LUN释放。一旦文件被写入硬盘,可以使用ENVI函数ENVI_SETUP_HEAD进行ENVI头文件的写入。下列文件信息必须写入头文件:文件名,采样数,行数,波段数,偏移,存储方式,以及数据类型。此外还有一些可选的关键字。如X、Y的起始位置,文本描述,波段名称等等。,用户函数,对于内存输出,结果存储在内存中分配的数组中。处理后的数据块插入合适的存储位置。内存数组的大小为NS*NL*NB,IDL函数BYTARR,INTARR,LONARR,FLTARR,DBLARR,以及MAKE_ARRAY用来创建相对应的比特类型、整型、长整型、浮点、双精度浮点以及任意类型的内存数组。当处理结果完成后,包含处理结果的内存数组可以使用ENVI_ENTER_DATA传递给ENVI。在最简单的情况下,仅仅内存数组是必须的。同样有一些额外的信息可以提供,如XY的起始位置以及文字描述和波段名称。,用户函数,非分块处理程序ENVI_GET_DATA 该函数从文件中获取数据,一次只能对单一波段操作,范围由DIMS关键字指定。该函数提供了xfactor和yfactor两个参数能够产生放大和缩小的影像。ENVI_GET_SLICE 该函数从文件中获取波谱数据,以BIP或BIL的格式返回。,用户函数,使用处理进度报告 处理进度报告显示了当前处理的完成程度。使用ENVI提供的处理进度报告,开发人员只需控制增量大小和更新频率。可选的关键字Cancel用来在下次增量更新时终止处理进程。处理进度报告由三个程序控制,分别为初始化、设置增量、更新状态。这些函数列在下面:ENVI_REPORT_INC 设置报告的增量 ENVI_REPORT_INIT 初始化报告对话框 ENVI_REPORT_STAT 更新完成的百分数并检查用户是否执行了Cancel 注:只有在处理进程小于100%时,用户才可以取消处理,如果处理进度已达到100%,Cancel将被忽略。,用户函数,用户函数编译由于IDL编译器不能识别ENVI库函数,因此用户程序在编译的时候通常会报错。同时为了向下兼容,IDL编译器将()作为数组的定义,当IDL编译器不能识别函数时,它会将它当作是数组定义,从而导致编译错误。FORWARD_FUNCTION可以告诉编译器,哪些变量是函数,而非数组定义。COMPILE_OPT STRICTARR则强制编译器以作为数组的定义。,用户函数,RESOLVE_ALL在IDL程序中,用到许多IDL内置的函数,都是以源码的形式提供的。在IDL编译器中,它们被自动编译。但是在ENVI中,ENVI不能编译这些函数,因此要想将用户函数打包,必须要找到所有依赖的函数,而IDL提供了一个工具函数就是RESOLVE_ALL,该函数可以自动寻找和编译用户程序所依赖的所有函数。在使用RESOLVE_ALL函数时要注意,它也不能识别ENVI库函数,在遇到ENVI库函数时会报错,因此在使用时,必须加上CONTINUE_ON_ERROR关键字。,

    注意事项

    本文(ENVIIDL二次开发.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开