1、目录Part one:文件读写操作 .11、格式化输入与输出(readprint) .12、ASCII 文件读写 .23、二进制文件读写 .54、图像格式文件读写 .75、科学数据格式读写* .8Part two:图形绘制 .11(一)plot 过程绘制 .11(二)plotg()函数绘制 .12(三)散点图 .12(四)柱状图、条形图 .15(五)绘制颜色条 colorbar .18Part three: ENVI 二次开发 .201、自定义波段运算函数 .202、IDL 中常见波段运算 .213、ENVI classic 创建自定义菜单 .224、ENVI classic+IDL 二次开发
2、 .23Part one:文件读写操作1、格式化输入与输出(readprint)1) Read:该函数用于从键盘键入数据,默认数据类型为浮点型,若要输入其他类型数据,需要先定义数据类型。Eg:2) Print:该函数用于将数据输出打印到控制台,这里主要讲格式化控制输出format 关键字。表 01 常用格式化控制符格式代码 输出效果aN 字符或者字符串按照 N 个字符宽度输出fn.m 浮点型数组按照 N 个字符宽度输出,小数点保留 M 位dn.m double 型数组按照 N 个字符宽度输出,小数点保留 M 位en.m 按照 N 个字符宽度的科学计数法输出,小数点后精确到 M 位Nx 输出 N
3、 个空格字符串/H 直接引用字符串输出或者用 H 直接输出字符串c( ) 用于输出日期数据Eg:2、ASCII 文件读写 常见 ASCII 文件: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)
4、函数用于查询文本文件的行数。3) 打开文件:在 IDL 中读写 ASCII 码或者二进制文件,首先需要将文件与一个逻辑设备号关联起来。语法:openr/openw/openu, lun, fname, /get_lun, width=10,/append4) 读写操作:IDL 中利用 readf 函数读取文本文件、利用 printf 函数写入 ASCII 文件 Readf, lun, var01, var02. printf, lun, var01, var02.5) 文件关闭:在对文件操作完成之后,需要关闭文件的逻辑设备号,eg: freee_lun,lunEG:*如何获取某个文件你的列数:
5、先读取一行数据,然后利用空格进行字符串拆分;最后利用n_elements()计算元素个数即为 ns对于某些遥感数据的头文件前面几行是说明文件,后一部分才是数据的,读取有两种方式:1) 定义一个临时变量 temp,将说明文字用该变量存储2) 直接跳行:skip_lun, lun, 3, /lines ;跳过文件的前三行3、二进制文件读写多数遥感数据的数据文件都是二进制文件。1) 函数 readu, lun, var01, var02.用于读取二进制文件*:对于某些数据文件开头是说明信息,读取时可以用 point_lun, lun, position直接按字节跳过。Eg:读取 IDL 文件下的 e
6、nvi.img 数据2) 函数 writeu, lun, var01, var02用于写入二进制文件。Eg01:将上面读取的 envi.img 计算其 NDVI 并保存为二进制文件Eg02:Eg03:;读取cha06 下的风云02 卫星数据pro read_AWXfile = E:zengskIDLCha06dataFY2C_TBB_IR1_OTG_20061130_AOAD.AWXopenr, lun, file, /get_lun;跳过前20个字节point_lun,lun,20Headline = indgen(3);定义三个整型数据,分别读取记录长度、头文件记录数、数据记录数readu
7、, lun, Headlineprint,headline0, headline1,headline2;定位到第58个字节,读取数据日期point_lun, lun, 58Begindate = indgen(5);记录开始日期readu, lun, BegindateEnddate = indgen(5);记录结束日期readu, lun, Enddatelat_long = indgen(4);记录网格左上和右上角的经纬度readu, lun, lat_longprint,Begindateprint,Enddateprint,lat_long;基于Headline信息数组,定义字节数组,
8、其行列数分别为记录长度和数据记录数data = bytarr(Headline2,Headline0);定位到数据部分,其头文件结束的字节位置为“ 头文件记录数* 记录长度”point_lun, lun, Headline0 * Headline1print,Headline0 * Headline1;读取数据部分readu, lun, datahelp,data;显示数据window, 0, xsize = 500, ysize = 500tv, congrid(data, 500, 500)end4、图像格式文件读写IDL 自带了丰富的多种图像读写函数,如 BMP,JPG,PNG, JPE
9、G2000, DICOM,TIFF 等相关函数:文件查询:query_image(fname, dimensions = dimensions, channels = nb ) ;channels 返回波段数、dimensions 返回图像的行列数读取图像:read_image ( fname ); 结果返回图像数组写入图像:write_image, fname(可带路径), jpg/bmp/tiff ,data, /order ; order 关键字用于设置图像的纵坐标从上往下算起,默认为从下往上。*注: I、以上三个函数对于 IDL 支持的图像格式都适用。II、显示图像时: tv 用法:t
10、v, data, true = 1/2/3 ;其中关键字 true = 1 表示数据格式为(3, m, n) 、true = 2 表示数组格式为(m, 3, n) 、true = 3 表示格式为(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
11、_jpeg写 write_jpegEg01:Eg02:2) BMP 格式:(不采用任何压缩),数据存储量一般很大读:read_imge(fname) or read_bmp(fname, /rgb)写:write_bmp, fname, data, /rgb3) TIFF 格式:TIFF 可以存储多波段图像,还可以包含投影信息,如 landsat-7 就是直接用.tiff 存储的。Eg01:5、科学数据格式读写*IDL 中支持的科学数据格式包括 CDF、HDF、 HDF5、HDF-EOS、NetCDF等等。1) HDF4 文件:目前国内外的多种卫星传感器都是将 HDF 作为标准数据格式,包括E
12、OS/MODIS、EOS/OMI、HJ-01/HSI 、FY-3/MERSI。EG01:;读取E:ENVIIDL下的MODIS数据的经纬度以及其1KM的反射率数据集pro test_hdffname=dialog_pickfile(title =选择数据文件:,get_path=cur_dir)cd, cur_dirhdf_id=hdf_sd_start(fname);打开hdf文件,返回一个文件idhdf_sd_fileinfo,hdf_id,sd_nums,attribute;用于获取HDF文件的数据集数目和属性数目print,sd_nums,attribute;读取经度lat_index
13、=hdf_sd_nametoindex(hdf_id,Latitude);根据数据集名称来获取数据集的索引号lat_id=hdf_sd_select(hdf_id,lat_index);利用索引号选择数据集,返回一个数据集的idhdf_sd_getinfo,lat_id,name=name,unit=unit;查询已打开的数据集的基本信息print,name,“ “, unithdf_sd_getdata,lat_id,lat;读取数据,参数lat用于返回读取的数据hdf_sd_endaccess,lat_id;关闭已经打开的数据集help,lat;读取纬度lon_index=hdf_sd_n
14、ametoindex(hdf_id,Longitude)lon_id=hdf_sd_select(hdf_id,lon_index)hdf_sd_getinfo,lon_id,name=name,unit=unitprint,name,“ “, unithdf_sd_getdata,lon_id,lonhdf_sd_endaccess,lon_idhelp,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
15、_id,name=name,unit=unitprint,name,“ “, unithdf_sd_getdata,ref_id,ref_valuehdf_sd_endaccess,ref_idhelp,ref_valuehdf_sd_end, hdf_id;关闭打开的文件end运行效果2)*.h5、*.hdf5、*.he5 格式的读取:;下面介绍一个读取环境卫星*.h5数据格式的例子pro read_hdf5fname=dialog_pickfile(title =选择数据文件:,get_path=cur_dir)cd, cur_dir;打开一个图形用户界面查看h5文件result=h5_browser(fname);h5_message=h5_parse(fname);查询文件的基本信息,返回一个结构体变量;print,h5_messageh5_id=h5f_open(fname);打开一个h5文件,返回一个文件的id
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。