enviidl二次开发

上传人:痛*** 文档编号:243991478 上传时间:2024-10-01 格式:PPT 页数:39 大小:1.18MB
返回 下载 相关 举报
enviidl二次开发_第1页
第1页 / 共39页
enviidl二次开发_第2页
第2页 / 共39页
enviidl二次开发_第3页
第3页 / 共39页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,ENVI/IDL,二次开发,北京星图环宇科技有限公司,陈妍,主要内容,1,ENVI/IDL,二次开发,介绍,2,波段、波谱运算,3,批处理模式,4,用户函数,ENVI/IDL,二次开发介绍,如何进行,ENVI,功能的扩展,波谱、波段函数,扩展,ENVI,功能的最简单方法,波段和波谱运算函数,不需要处理文件,I/O,不需要进行事件控制,不需修改菜单,用户只需编写运算函数部分内容,其它由,ENVI,进行管理。,批处理模式,不出现,ENVI,的菜单界面,通过调用,ENVI,提供的非,交互式函数来实现交互式,ENVI,所提供的功能。,ENVI/IDL,二次开发介绍,用户函数,用户函数可以用,IDL,、,C,、,Fortran,或者其它的高,级语言编写,并集成到,ENVI,软件中,通过,ENVI,的,菜单来执行。用户函数可以通过,ENVI,获得输入数,据,并将结果直接输入到,ENVI,中。,用户函数包括了部件的定义,事件的处理,以及,处理程序。用户函数和,ENVI,菜单的一个按钮联系,起来,并像,ENVI,的其它函数一样执行。,ENVI/IDL,二次开发介绍,ENVI,程序中的通用关键字,FID,FID,是一个长整型的标量。,FID,为,ENVI,的程序员提,供了一个命名变量,可以用于一个或几个,ENVI,程,序,来打开或选择文件。所有对该文件进行操作,的,ENVI,程序都是通过,FID,完成。,如果文件打开失败,则,FID,返回为,-1,。,ENVI/IDL,二次开发介绍,R_FID,和,M_FID,ENVI,处理程序产生结果一幅新图像也包括一个,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,二次开发介绍,POS,POS,关键字定义了用于处理的波段位置,是一个,变长的长整型数组。波段从,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,二次开发介绍,将数据输入到,ENVI,ENVI_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_exit,批处理的例子,用户函数,用户函数简介,用户函数允许用户为,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,error,IF(error NE 0)THEN BEGIN,ok=,DIALOG_MESSAGE(!error_state.msg,/cancel),IF(,STRUPCASE(ok,)EQ CANCEL)THEN return,ENDIF,用户函数,用户函数与显示组交互,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,。,用户函数,空间分块近似等于按输入波段对影像进行分块,因此可以不用考虑文件的存储方式而进行空间处理。但访问单
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!