IDL-程序设计笔记

上传人:gbs****77 文档编号:9289359 上传时间:2020-04-04 格式:DOCX 页数:23 大小:1.15MB
返回 下载 相关 举报
IDL-程序设计笔记_第1页
第1页 / 共23页
IDL-程序设计笔记_第2页
第2页 / 共23页
IDL-程序设计笔记_第3页
第3页 / 共23页
点击查看更多>>
资源描述
目录 Part one 文件读写操作 1 1 格式化输入与输出 read print 1 2 ASCII 文件读写 2 3 二进制文件读写 5 4 图像格式文件读写 7 5 科学数据格式读写 8 Part two 图形绘制 11 一 plot 过程绘制 11 二 plotg 函数绘制 12 三 散点图 12 四 柱状图 条形图 15 五 绘制颜色条 colorbar 18 Part three ENVI 二次开发 20 1 自定义波段运算函数 20 2 IDL 中常见波段运算 21 3 ENVI classic 创建自定义菜单 22 4 ENVI classic IDL 二次开发 23 Part one 文件读写操作 1 格式化输入与输出 read print 1 Read 该函数用于从键盘键入数据 默认数据类型为浮点型 若要输入其他类 型数据 需要先定义数据类型 Eg 2 Print 该函数用于将数据输出打印到控制台 这里主要讲格式化控制输出 format 关键字 表 01 常用格式化控制符 格式代码 输出效果 aN 字符或者字符串按照 N 个字符宽度输出 fn m 浮点型数组按照 N 个字符宽度输出 小数点保留 M 位 dn m double 型数组按照 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 append 4 读写操作 IDL 中利用 readf 函数读取文本文件 利用 printf 函数写入 ASCII 文件 Readf lun var01 var02 printf lun var01 var02 5 文件关闭 在对文件操作完成之后 需要关闭文件的逻辑设备号 eg freee lun lun EG 如何获取某个文件你的列数 先读取一行数据 然后利用空格进行字符串拆分 最后利用 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 卫星数据 pro read AWX file E zengsk IDL Cha06 data FY2C TBB IR1 OTG 20061130 AOAD AWX openr lun file get lun 跳过前20个字节 point lun lun 20 Headline indgen 3 定义三个整型数据 分别读取记录长度 头文件记录数 数据 记录数 readu lun Headline print headline 0 headline 1 headline 2 定位到第58个字节 读取数据日期 point lun lun 58 Begindate 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 Headline 2 Headline 0 定位到数据部分 其头文件结束的字节位置为 头文件记录数 记录长度 point lun lun Headline 0 Headline 1 print Headline 0 Headline 1 读取数据部分 readu lun data help data 显示数据 window 0 xsize 500 ysize 500 tv congrid data 500 500 end 4 图像格式文件读写 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 jpeg Eg01 Eg02 2 BMP 格式 不采用任何压缩 数据存储量一般很大 读 read imge fname or read bmp fname rgb 写 write bmp fname data rgb 3 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的反射率数据集 pro test hdf fname dialog pickfile 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 利用索引号选择数据集 返回一个数据 集的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 unit 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 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 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 ENVI IDL HJ 1 tif Bandata BIP end 2 netCDF 文件读取 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 变量查询 后一个参数为变量索引号或者名称 这里我读取的是它的第四个变量 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 value end 4 Grid 格式读取 Part two 图形绘制 一 plot 过程绘制 1 plot 过程 1 plot xdata ydata nodata 2 oplot xdata ydata 用于在现有窗口中添加新曲线 2 线形符号设置 1 关键字 psym 修改数据点的符号 直方图线形 psym 10 psym a 表示除显示各数据点的符号外 还将各数据点连接起来 2 linestyle 关键字设置曲线线形 0 为实线 2 为虚线 3 为点 划线 3 坐标轴设置 x ytitle 设置标题 x ycharsize 设置字体大小 x yrange 用于设置坐标轴范围 注意加上 x ystyle 1 来强行设 定 坐标轴范围 x yticks 和 x yminor 分别设置主刻度和最小刻度间隔数目 x ytickname 设置刻度的名称 4 颜色设置 color 设置图像颜色 一般用十六进制来表示颜色 FFFFFF xl 表示白色 000000 xl 为黑色 background 设置背景颜色 5 添加标注 xyouts 过程用于在图像窗口中添加标注信息 示例 xyouts 0 18 0 80 RMSE color FFFFFF xl charsize 1 2 normal 6 图形保存为文件 一般方法为利用 TVRD 函数拷贝图形窗口的内容 在写 入图像文件 img tvrd x y channel value true 1 2 3 order 二 plotg 函数绘制 1 plot 函数 curve plot x y buffer current dimensions width 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 x y 标注内容 target curve color red font size 1 2 5 添加图例 函数 legend 用于在图形窗口中添加标注信息 该函数只适用于图形 对象 三 散点图 Eg01 读取文本文件中的数据并利用plot过程绘制相应的散点图 利用过程plot绘制散点图 pro plot scatter 读取数据 fname dialog pickfile title 选择数据 get path work dir cd work dir nl file lines fname print nl temp var data fltarr 2 nl 1 openr lun fname get lun result fstat lun help result readf lun temp var readf lun data free lun lun print temp var print data 绘制散点图 x data 0 观测数据 y data 1 估算数据 plot x y psym 2 xrange 5 15 yrange 5 15 xtitle Observed value ytitle Estimated value background FFFFFF xl color oooooo xl xstyle 1 ystyle 1 charsize 1 3 nodata oplot x y psym 5 color 000000 xl 绘制基准线 x2 5 15 计算MAE与RMSE并在散点图中添加标注 MAE mean abs x y MAE平均绝对误差 RMSE sqrt mean x y 2 均方根误差 MAE label MAE string MAE format f5 2 RMSE label RMSE string RMSE format f5 2 添加标注 xyouts 6 13 0 MAE label color 000000 xl charsize 1 2 data xyouts 6 12 3 RMSE label color 000000 xl charsize 1 2 data 保存散点图为图像文件 格式为 png img tvrd true 1 法一 o fn dialog pickfile title 文件保存为 键入的文件名要包含后缀名 write png o fn img 法二 write png E ENVI scatter png img end Eg02 读取文本文件中的数据并利用plot函数绘制相应的散点图 plot函数绘制散点图 pro plot scatter02 读取数据 file dialog pickfile title 选择数据 get path work dir cd work dir var nl file lines file data fltarr 2 nl 1 openr lun file get lun readf lun var readf lun data free lun lun print data 绘图 ob data 0 Es data 1 graphic01 plot ob Es xrang 7 15 yrang 7 15 xminor 5 yminor 5 先数据 title scatter xtitle Observed Value ytitle Estimated Value 再坐标轴 symbol X sym size 1 2 linestyle none color black 然后 线形 margin 0 1 x2 7 15 计算平均绝对误差和均方根误差并添加标注 MAE mean abs Es ob RMSE sqrt mean Es ob 2 MAE label MAE string MAE format f5 2 RMSE label RMSE string RMSE format f5 2 t01 text 0 15 0 8 MAE label target graphic01 font size 12 fonts size用于设置标注的字体大小 t01 text 0 15 0 75 RMSE label target graphic01 font size 12 保存文件 o fn dialog pickfile title 图形保存为 graphic01 save o fn graphic02 save o fn end 四 柱状图 条形图 Eg01 利用 bar plot 函数绘制柱状图 不建议用直接图形法来绘制 利用 error plot 添加误差线 barplot功能函数绘制柱状图 pro test histogram02 读取文本文件数据 file dialog pickfile title 选择文本文件 get path work dir cd work dir nl file lines file var strarr 1 nl openr lun file get lun readf lun var free lun lun print var 拆分 area strarr nl number intarr nl for i 0 nl 1 do begin area i strmid var i 0 8 number i fix strmid var i 11 3 endfor help area print area help number print number 3 画柱状图 baselines replicate 65 nl His barplot number bottom values baselines xticklen 0 xrange 0 5 5 5 xtickname area yrange 65 100 title Histogram ytitle Impact Facter width 0 5 dimensions 900 500 bottom color EEEEEE xl fill color AOAOFF xl margin 0 2 绘制误差线 error 1 7 2 7 2 5 2 4 1 2 1 0 error lines errorplot number error linestyle 6 errorbar capsize 0 2 errorbar color blue overplot 文件保存为jpg o fn dialog pickfile title 图片保存为 jpg 注意后面加一个后缀名字 符串更加方便 His save o fn error lines save o fn end 运行结果 Eg02 在利用 bar plot 函数绘制图像时 添加 horizontal 关键字用于将图像横 过来 即绘制条形图 bar plot函数绘制条形图chart pro test chart 读取文本文件数据 file dialog pickfile title 选择文本文件 get path work dir cd work dir nl file lines file var strarr 1 nl openr lun file get lun readf lun var free lun lun print var 拆分 area strarr nl number intarr nl for i 0 nl 1 do begin area i strmid var i 0 8 number i fix strmid var i 11 3 endfor help area print area help number print number 3 画柱状图 baselines replicate 65 nl His barplot number bottom values baselines yticklen 0 yrange 0 5 5 5 ytickname area xrange 65 100 title Histogram xtitle Impact Facter width 0 5 dimensions 700 500 bottom color EEEEEE xl fill color AOAOFF xl margin 0 2 horizontal 文件保存为jpg o fn dialog pickfile title 图片保存为 jpg 注意后面加一个后缀名字 符串更加方便 His save o fn End 运行结果 五 绘制颜色条 colorbar Eg 1 创建一个快速可视化窗口 IDL w window dimensions 600 400 2 创建一个 Colorbar 有自定义颜色表 不设置标注位置 IDL cb colorbar POSITION 0 05 0 85 0 7 0 9 RGB TABLE 72 3 创建一个 Colorbar 具有自定义颜色表 设置标标注在顶部 texpos 1 IDL cb colorbar POSITION 0 05 0 85 0 7 0 9 RGB TABLE 72 TEXTPOS 1 4 创建 Colorbar 具有自定义颜色表 设置自定义范围自定义范围 range IDL cb colorbar POSITION 0 05 0 75 0 7 0 8 RGB TABLE 72 RANGE 0 1 5 Colorbar 具有自定义范围和自定义标签 tickname A array IDL cb COLORBAR POSITION 0 05 0 55 0 7 0 6 RGB TABLE 72 RANGE 500 1000 TICKVALUES 550 650 750 850 950 TICKNAME A B C D E 6 创建一个 colorbar 设置垂直色条 orientation 1 范围 0 100 range 锥 形端 tapar 1 左图 IDL cb COLORBAR POSITION 0 8 0 2 0 85 0 9 TAPER 1 RGB TABLE 72 RANGE 0 100 ORIENTATION 1 离散色彩条垂直方向 标注在右边 textpos 1 添加轮廓线 BORDER 1 见右 图 IDL cb COLORBAR POSITION 0 9 0 15 0 95 0 95 RGB TABLE rgb IDL TICKNAME tickname BORDER 1 TAPER 1 ORIENTATION 1 TEXTPOS 1 7 加载颜色表的一个子集 注意 这不是一个 离散 的色条因为每个颜色没有刻度标签 IDL LOADCT 72 RGB TABLE rgb IDL rgb rgb 25 25 INDGEN 10 IDL cb COLORBAR POSITION 0 05 0 45 0 7 0 5 RGB TABLE rgb 8 创建一个离散颜色条 颜色条的颜色数量与标注的数量匹配 标注集中在颜色之下 并且 添加轮廓线 BORDER 1 IDL tickname STRING 10 INDGEN 10 FORMAT I0 IDL cb COLORBAR POSITION 0 05 0 35 0 7 0 4 RGB TABLE rgb TICKNAME tickname BORDER 1 9 离散色条与一个额外的标签相比 颜色数量与这些标签在线下方 与填充轮廓图中使用的 类似 IDL tickname STRING 10 INDGEN 11 FORMAT I0 IDL cb COLORBAR POSITION 0 05 0 25 0 7 0 3 RGB TABLE rgb TICKNAME tickname BORDER 1 10 带渐缩端的离散颜色条 与填充轮廓图中使用的类似 IDL cb COLORBAR POSITION 0 05 0 15 0 7 0 2 RGB TABLE rgb TICKNAME tickname BORDER 1 TAPER 1 11 创建一个离散的颜色条 并且在左端 最小值处 渐缩 taper 2 IDL cb COLORBAR POSITION 0 05 0 05 0 45 0 1 RGB TABLE rgb TICKNAME tickname BORDER 1 TAPER 2 创建一个离散的颜色条 并且在右端端 最大值处 渐缩 taper 3 Part three ENVI 二次开发 1 自定义波段运算函数 编写波段运算函数跟在 envi 中直接输入数学表达式相比 在操作上更灵活 函数中可以添加更多的控制 如运算中的错误检测等 波段运算函数的编写非 常简单 接受输入波段 处理数据 并返回结果 以下面的方式定义 Function bm func b1 b2 bn parameters and keywords processing steps return result end 编写好 function 之后 点击编译 在控制台输入 IDL save filename E ENVI cal ndvi sav routine 然后把 sav 文件拷贝到 envi 的安装目录之下 波谱运算 波谱运算的操作步骤跟波段运算基本一致 不同之处有 1 变量命名以 S 或 s 开头 2 执行时 ENVI 主菜单下 选择 Basic Tools Spectral Math 2 IDL 中常见波段运算 注 在 IDL 中 NaN 值如何得到 3 ENVI classic 创建自定 义菜单 自动创建ENVI菜单过程 ENVI DEFINE MENU BUTTON ButtonInfo DISPLAY EVENT PRO string MENU UVALUE string POSITION long integer or string REF INDEX long integer REF UVALUE variable REF VALUE string SEPARATOR 0 1 1 SIBLING VALUE string 关键字 Display 是创建在主菜单还是显示菜单 VALUE 菜单的显示信息 必须的 UVALUE 必须的 EVENT PRO 程序事件名称 Menu 是否为菜单 允许再添加子菜单 REF INDEX 如REF VALUE不唯一则可用此来设置 REF VALUE 参考的菜单名称 SIBLING 是否创建同级菜单 POSITION 菜单位置 设置 before after first last 最后将编写好的程序保存为 sav 文件添加到 classic save add 文件夹下
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


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

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


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