目录Partone:文件读写操作..............................................................................................11、格式化输入与输出(read\print)..................................................................12、ASCII文件读写..............................................................................................33、二进制文件读写..............................................................................................54、图像格式文件读写..........................................................................................75、科学数据格式读写***....................................................................................9Parttwo:图形绘制....................................................................................................11(一)plot过程绘制..........................................................................................11(二)plotg()函数绘制.......................................................................................12(三)散点图......................................................................................................12(四)柱状图、条形图......................................................................................15(五)绘制颜色条colorbar...............................................................................18Partthree:ENVI二次开发.........................................................................................201、自定义波段运算函数....................................................................................202、IDL中常见波段运算....................................................................................213、ENVIclassic创建自定义菜单....................................................................224、ENVIclassic+IDL二次开发..........................................错误!未定义书签。Partone:文件读写操作1、格式化输入与输出(read\print)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文件: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/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:*如何获取某个文件你的列数:先读取一行数据,然后利用空格进行字符串拆分;最后利用n_elements()计算元素个数即为ns对于某些遥感数据的头文件前面几行是说明文件,后一部分才是数据的,读取有两种方式:1)定义一个临时变量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:;读取cha06下的风云02卫星数据proread_AWXfile='E:\zengsk\IDL\Cha06\data\FY2C_TBB_IR1_OTG_20061130_AOAD.AWX'openr,lun,file,/get_lun;跳过前20个字节point_lun,lun,20Headline=indgen(3);定义三个整型数据,分别读取记录长度、头文件记录数、数据记录数readu,lun,Headlineprint,headline[0],headline[1],headline[2];定位到第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信息数组,定义字节数组,其行列数分别为记录长度和数据记录数data=bytarr(Headline[2],Headline[0]);定位到数据部分,其头文件结束的字节位置为“头文件记录数*记录长度”point_lun,lun,Headline[0]*Headline[1]print,Headline[0]*Headline[1];读取数据部分readu,lun,datahelp,data;显示数据window,0,xsize=500,ysize=500tv,congrid(data,500,500)end4、图像格式文件读写IDL自带了丰富的多种图像读写函数,如BMP,JPG,PNG,JPEG2000,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用法:tv,data,true=1/2/3;其中关键字true=1表示数据格式为(3,m,n)、true=2表示数组格式为(m,3,n)、true=3表示格式为(m,n,3)III、tvrd:屏幕拷贝函数,返回当前直接图形窗口或设备的指定矩形部分的内容。IV、对遥感图像而言,其数据存放方式有BSQ\BIP\BIL,以一个三维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)orread_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作为标准数据格式,包括EOS/MODIS、EOS/OMI、HJ-01/HSI、FY-3/MERSI。EG01:;;;读取E:\ENVI\IDL下的MODIS数据的经纬度以及其1KM的反射率数据集protest_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=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,