2023年IDL程序设计笔记.docx
《2023年IDL程序设计笔记.docx》由会员分享,可在线阅读,更多相关《2023年IDL程序设计笔记.docx(32页珍藏版)》请在咨信网上搜索。
1、目录Part one:文件读写操作11、格式化输入与输出(readprint)12、ASCII文件读写23、二进制文件读写54、图像格式文件读写75、科学数据格式读写*8Part two:图形绘制11(一)plot过程绘制11(二)plotg()函数绘制12(三)散点图12(四)柱状图、条形图15(五)绘制颜色条colorbar18Part three: ENVI二次开发201、自定义波段运算函数202、IDL中常见波段运算213、ENVI classic 创建自定义菜单224、ENVI classic+IDL 二次开发23 Part one:文献读写操作1、格式化输入与输出(readprin
2、t)1) Read:该函数用于从键盘键入数据,默认数据类型为浮点型,若要输入其他类型数据,需要先定义数据类型。Eg:2) Print:该函数用于将数据输出打印到控制台,这里重要讲格式化控制输出format关键字。表01 常用格式化控制符格式代码输出效果aN字符或者字符串按照N个字符宽度输出fn.m浮点型数组按照N个字符宽度输出,小数点保存M位dn.mdouble型数组按照N个字符宽度输出,小数点保存M位en.m按照N个字符宽度的科学计数法输出,小数点后精确到M位Nx输出N个空格字符串/H直接引用字符串输出或者用H直接输出字符串c( )用于输出日期数据Eg:2、ASCII文献读写 常见ASCII
3、文献:txt、matlab程序文献(*.m)、c程序文献(*.c)、遥感影像头文献(如ENVI格式的头文献*.hdr)1) 选择文献:fn = dialog_pickfile(title=选择ASCII文献:,get_path = work_dir)cd,work_dir ;用于跳转到当前工作途径2) 查询文献:file_search()函数Eg:查找当前工作途径下所有的txt文献,并返回文献数目*: File_lines(fname)函数用于查询文本文献的行数。3) 打开文献:在IDL中读写ASCII码或者二进制文献,一方面需要将文献与一个逻辑设备号关联起来。语法:openr/openw/o
4、penu, lun, fname, /get_lun, width=10,/append4) 读写操作:IDL中运用readf函数读取文本文献、运用printf函数写入ASCII文献 Readf, lun, var01, var02. printf, lun, var01, var02.5) 文献关闭:在对文献操作完毕之后,需要关闭文献的逻辑设备号,eg: freee_lun,lunEG:*如何获取某个文献你的列数:先读取一行数据,然后运用空格进行字符串拆分;最后运用n_elements()计算元素个数即为ns对于某些遥感数据的头文献前面几行是说明文献,后一部分才是数据的,读取有两种方式:1)
5、 定义一个临时变量temp,将说明文字用该变量存储2) 直接跳行:skip_lun, lun, 3, /lines ;跳过文献的前三行3、二进制文献读写多数遥感数据的数据文献都是二进制文献。1) 函数readu, lun, var01, var02.用于读取二进制文献*:对于某些数据文献开头是说明信息,读取时可以用point_lun, lun, position直接按字节跳过。Eg:读取IDL文献下的envi.img数据2) 函数writeu, lun, var01, var02用于写入二进制文献。Eg01:将上面读取的envi.img计算其NDVI并保存为二进制文献Eg02:Eg03:;读取
6、cha06下的风云02卫星数据pro read_AWX file = E:zengskIDLCha06dataFY2C_TBB_IR1_OTG_20231130_AOAD.AWX openr, lun, file, /get_lun ;跳过前20个字节 point_lun,lun,20 Headline = indgen(3);定义三个整型数据,分别读取记录长度、头文献记录数、数据记录数 readu, lun, Headline print,headline0, headline1,headline2 ;定位到第58个字节,读取数据日期 point_lun, lun, 58 Begindate
7、 = indgen(5);记录开始日期 readu, lun, Begindate Enddate = indgen(5);记录结束日期 readu, lun, Enddate lat_long = indgen(4);记录网格左上和右上角的经纬度 readu, lun, lat_long print,Begindate print,Enddate print,lat_long ;基于Headline信息数组,定义字节数组,其行列数分别为记录长度和数据记录数 data = bytarr(Headline2,Headline0) ;定位到数据部分,其头文献结束的字节位置为“头文献记录数*记录长度
8、” point_lun, lun, Headline0 * Headline1 print,Headline0 * Headline1 ;读取数据部分 readu, lun, data help,data ;显示数据 window, 0, xsize = 500, ysize = 500 tv, congrid(data, 500, 500)end4、图像格式文献读写IDL自带了丰富的多种图像读写函数,如BMP,JPG,PNG, JPEG2023, DICOM,TIFF等相关函数:文献查询:query_image(fname, dimensions = dimensions, channels
9、 = nb ) ;channels返回波段数、dimensions返回图像的行列数 读取图像:read_image ( fname );结果返回图像数组 写入图像:write_image, fname(可带途径), jpg/bmp/tiff ,data, /order ; order关键字用于设立图像的纵坐标从上往下算起,默认为从下往上。*注: I、以上三个函数对于IDL支持的图像格式都合用。 II、显示图像时:tv用法:tv, data, true = 1/2/3 ;其中关键字true = 1表达数据格式为(3, m, n)、true = 2表达数组格式为(m, 3, n)、true = 3
10、表达格式为(m, n, 3) III、tvrd:屏幕拷贝函数,返回当前直接图形窗口或设备的指定矩形部分的内容。IV、对遥感图像而言,其数据存放方式有BSQBIPBIL,以一个三维m列n行的遥感数据为例:BSQ的表达方式为m, n, 3、BIP表达方式为3, m ,n、BIL的表达方式为m, 3, n,常用的图像文献一般是BIP方式存储,遥感文献一般是BSQ。1) JPEG格式:读read_jpeg写write_jpegEg01:Eg02:2) BMP格式:(不采用任何压缩),数据存储量一般很大读:read_imge(fname) or read_bmp(fname, /rgb)写:write_
11、bmp, fname, data, /rgb3) TIFF格式: TIFF可以存储多波段图像,还可以包含投影信息,如landsat-7就是直接用.tiff存储的。Eg01: 5、科学数据格式读写*IDL中支持的科学数据格式涉及CDF、HDF、HDF5、HDF-EOS、NetCDF等等。1) HDF4文献: 目前国内外的多种卫星传感器都是将HDF作为标准数据格式,涉及EOS/MODIS、EOS/OMI、HJ-01/HSI、FY-3/MERSI。EG01:;读取E:ENVIIDL下的MODIS数据的经纬度以及其1KM的反射率数据集pro test_hdf fname=dialog_pickfile
12、(title =选择数据文献:,get_path=cur_dir) cd, cur_dir hdf_id=hdf_sd_start(fname);打开hdf文献,返回一个文献id hdf_sd_fileinfo,hdf_id,sd_nums,attribute;用于获取HDF文献的数据集数目和属性数目 print,sd_nums,attribute ;读取经度 lat_index=hdf_sd_nametoindex(hdf_id,Latitude);根据数据集名称来获取数据集的索引号 lat_id=hdf_sd_select(hdf_id,lat_index);运用索引号选择数据集,返回一个
13、数据集的id hdf_sd_getinfo,lat_id,name=name,unit=unit;查询已打开的数据集的基本信息 print,name, , unit hdf_sd_getdata,lat_id,lat;读取数据,参数lat用于返回读取的数据 hdf_sd_endaccess,lat_id;关闭已经打开的数据集 help,lat ;读取纬度 lon_index=hdf_sd_nametoindex(hdf_id,Longitude) lon_id=hdf_sd_select(hdf_id,lon_index) hdf_sd_getinfo,lon_id,name=name,uni
14、t=unit print,name, , unit hdf_sd_getdata,lon_id,lon hdf_sd_endaccess,lon_id help,lon ;读取1KM反射率数据 ref_index=hdf_sd_nametoindex(hdf_id,EV_1KM_RefSB) ref_id=hdf_sd_select(hdf_id,ref_index) hdf_sd_getinfo,ref_id,name=name,unit=unit print,name, , unit hdf_sd_getdata,ref_id,ref_value hdf_sd_endaccess,ref_
15、id help,ref_value hdf_sd_end, hdf_id;关闭打开的文献 end运营效果2)*.h5、*.hdf5、*.he5格式的读取:;下面介绍一个读取环境卫星*.h5数据格式的例子pro read_hdf5 fname=dialog_pickfile(title =选择数据文献:,get_path=cur_dir) cd, cur_dir ;打开一个图形用户界面查看h5文献 result=h5_browser(fname) ;h5_message=h5_parse(fname);查询文献的基本信息,返回一个结构体变量 ;print,h5_message h5_id=h5f
16、_open(fname);打开一个h5文献,返回一个文献的id sd_id=h5d_open(h5_id,ImageData/BandData);打开相应的数据集,数据集名称可带途径 Bandata=h5d_read(sd_id);读取数据 ;关闭文献 h5d_close,sd_id h5f_close,h5_id help,Bandata ;将Bandata转成BIP格式存储 Bandata_BIP = transpose(Bandata, 2,0,1) help,Bandata_BIP write_tiff,E:ENVIIDLHJ-1.tif, Bandata_BIPend2) netCD
17、F文献读取:netCDF(network Common Data Form, 网络通用数据格式),常用于气象科学数据存储。;下面介绍一个读取ECMWF数据的例子,ECMWF为*.nc格式数据;pro test_nc fname=dialog_pickfile(title =选择数据文献:,get_path=cur_dir) cd, cur_dir nc_id=ncdf_open(fname);打开netCDF文献 nc_message=ncdf_inquire(nc_id);对打开的文献进行查询,返回文献基本信息 help,nc_message ;变量查询 ;后一个参数为变量索引号或者名称;这
18、里我读取的是它的第四个变量V10 var_message=ncdf_varinq(nc_id,4) help,var_message var_id=ncdf_varid(nc_id, v10);根据变量名称获取相应变量的索引号 print,var_id ;ncdf_varget获取数据 ncdf_varget,nc_id,var_id,value ;文献关闭 ncdf_close, nc_id help,valueend4)Grid格式读取:Part two:图形绘制(一)plot过程绘制1、plot过程:1)plot, xdata, ydata, /nodata 2)oplot, xdata
19、, ydata ;用于在现有窗口中添加新曲线2、线形符号设立:1)关键字psym修改数据点的符号,直方图线形psym=10, psym= - a表达除显示各数据点的符号外,还将各数据点连接起来。2)linestyle关键字设立曲线线形,0为实线、2为虚线、3为点划线。3、 坐标轴设立:xytitle设立标题;xycharsize设立字体大小;xyrange用于设立坐标轴范围,注意加上xystyle=1来强行设定坐标轴范围xyticks和xyminor分别设立主刻度和最小刻度间隔数目xytickname设立刻度的名称4、 颜色设立:color: 设立图像颜色;一般用十六进制来表达颜色;FFFFF
20、Fxl表达白色;000000xl为黑色background:设立背景颜色5、 添加标注: xyouts过程用于在图像窗口中添加标注信息。示例:xyouts, 0.18, 0.80, RMSE=, color=FFFFFFxl, charsize=1.2, /normal6、 图形保存为文献:一般方法为运用TVRD函数拷贝图形窗口的内容,在写入图像文献。img = tvrd(x, y, channel=value, true=123, /order)(二)plotg()函数绘制1、plot函数:curve=plot(x, y, /buffer, /current, dimensions=widt
21、h, height, margin=num, title= , name= , /overplot, window_title= , /nodata)*notice:/buffer指将图形保存在缓存中/current设立在当前窗口中绘制图形dimensions设立窗口的大小 title设立图形标题,name设立图像对象的名称*函数plot的返回结果为一个图像对象,具有多种对象和方法2、符号、线形设立:symbol、linestyle、thick用于改变曲线线宽3、坐标轴设立:见plot过程4、添加标注:函数text用于在图形窗口中添加标注信息,结果返回一个图形对象Eg: label=text(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 IDL 程序设计 笔记
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。