1 / 59

基础语法与数据处理

IDL 程序 1. 基础语法与数据处理. 授课人:李景刚 手机: 13810912337 Email:sharp@ires.cn. 北京师范大学资源学院 2004 年 9 月 20 日. 提纲. 参考资料 什么是 IDL IDL 主要功能 IDL 集成开发环境 IDL 应用程序基础 IDL 程序开发过程 IDL 的图形图像处理. 一、参考资料. 在线帮助 http://www.rsi.com http://www.supresoft.com.cn http://www.idlworld.com 参考书

kenyon
Download Presentation

基础语法与数据处理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IDL程序1 基础语法与数据处理 授课人:李景刚 手机:13810912337 Email:sharp@ires.cn 北京师范大学资源学院 2004年9月20日

  2. 提纲 • 参考资料 • 什么是IDL • IDL主要功能 • IDL集成开发环境 • IDL应用程序基础 • IDL程序开发过程 • IDL的图形图像处理

  3. 一、参考资料 • 在线帮助 • http://www.rsi.com • http://www.supresoft.com.cn • http://www.idlworld.com • 参考书 • 闫殿武,IDL可视化工具入门与提高,机械工业出版社,2003。定价:42.00元 • 刘光,地理信息系统二次开发教程-语言篇,清华大学出版社,2003。定价:35.00元

  4. 二、什么是IDL? Interactive Data Language ——交互式数据语言 主要特征:高级图像处理能力、交互式二维和三维图形技术、面向对象的编程方式、OpenGL图形加速、量化可视化表现、集成数学与统计学算法、灵活的数据输入输出方式、跨平台图形用户界面工具包、连接ODBC兼容数据库及多种程序连接工具等。

  5. 三、IDL主要功能 • IDL是完全面向矩阵的,因此具有快速分析超大规模数据的能力。 • 具有高级图像处理能力、交互式二维和三维图形技术。 • 集成了数学分析和统计软件包,提供强大的科学计算模型。 • 具有完善的信号处理和图像处理软件包。 • IDL GUIBuilder能快速进行界面开发。 • 最优化输出。 • IDL新增加了小波变化工具包,信息损失比FFT小的多。

  6. IDL应用领域 • 地球科学 • 医学影像 • 图像处理 • 软件开发 • 大学教学 • 实验室 测试技术 天文 信号处理 防御工程 数学分析 统计

  7. 基于IDL的系列产品 IDL - Interactive Data Language ION - IDL On the Net VIP - Visual IDL Programming ENVI - Environment for Visualizing images RiverTools - Analysis for digital terrain and river network modeling NOESYS - Organize, visualize & share HDF data

  8. IDL内带的例子 • IDL>demo回车

  9. 四、IDL集成开发环境 菜单栏和 工具栏 工程窗口 多文档面板 输出日志窗口 变量查看窗口 状态栏 命令行

  10. 五、IDL应用程序基础 • 宽松的语法检测机制 • 分隔符为“,”,而非空格 • 不分大小写 • 变量无需事先说明 换行符:$ 注释符:;

  11. 2.变量 • 变量无需事先声明; • 变量的名必须以字母开头,可以包括其它字母、数字、下划线、美元符号。最长可达255个字符,但变量大小取决于计算机配置和操作系统; • 大小写没有区别,名称中不能有空格; • IDL中的保留词不能作为变量的名称。

  12. 3.基本数据类型 在数据类型的转换中,如果输出变量类型的字节数少于输入变量类型的字节数,将会发生截断现象。

  13. 4.数组 • IDL是面向矩阵的语言,几乎所有运算都可以在数组上使用。 • 数组元素的存储是按列进行的,与其它的语言有区别。 • 数组下标是从零开始的,如果某些下标超出了范围,则该下标将被转换为在允许范围内的最小或最大的下标值。 • 被整数除时需要谨慎:当一个整形变量被另一个整形变量除时,IDL程序经常会出错,有可能会出现一个零数组

  14. 零数组和索引数组的创建函数

  15. 矩阵操作 • A=bytarr(512,512) 列 行 b=tan(a)+10 子区处理: A(*,1)表示第2行的所有列 A(*,1:10)表示第2-11行的所以列

  16. 决定数组性质的函数

  17. 矩阵操作 A#B 表示 A的列乘以B的行 A##B表示 A的行乘以B的列 Transpose 矩阵转置 a[i,j] = a[j,i] ……

  18. WHERE 函数 Indices=where(data gt 0.4 and data lt 0.5) Data[indices]=1.0

  19. 5、IDL程序 批处理:由一系列IDL命令组成,以IDL->@batchfile方式运行。批处理文件运行时并不编译,因此使用控制结构时必须大量使用续行符($),给书写、理解造成困难。 主程序:与批处理相似,但以end结束,以IDL->.run profile方式运行。主程序运行时先编译,因此可以正常使用控制结构。 过程:与主程序相似,但以pro proname开始,以end结束。以IDL->proname方式运行(也可以先运行IDL->.compile proname,编译但不运行)。 函数:与过程相似,但以function fnname开始,以end结束,并以return语句返回一个IDL变量。以IDL->ret=fnname(para_list)方式运行。 在IDL系统中,一个过程或函数即为一个新的IDL命令。 变量作用范围:批处理和主程序方式的变量为全局变量,可以在IDL开发环境中使用。过程和函数的变量为局部变量,只在过程和函数运行过程中有效。

  20. 关系运算符 • Eq equal to • Ne not equal to • Le less than or equal to • Lt less than • Ge greater than or equal to • Gt greater than

  21. 常用控制语句 • Begin – End • If – Then – Else • Case X of – else – endcase • For – Do • While – Do • Repeat – Until • Expr? Expr1:expr2 (条件判断语句)

  22. If语句 If 条件 then 语句 If 条件 then begin 语句 Endif If 条件 then 语句 else 语句 If 条件 then begin 语句 Endif else begin 语句 endesle 当特定的条 件为真时, If语句执行 单个语句或 一个语句模 块。

  23. Case语句 根据一个标量表达式来选取 某个语句或语句块运行。当 表达式和一系列情况中的第 一个匹配成立时,相应的语 句或语句块被执行(只有一 种匹配的情况被识别)。当 语句执行完毕,case语句结 束。如果没有发现匹配的, 那将执行else下的语句或语 句块。如果没有else语句, 此时将发生错误,并且中断 运行。建议都加上“else”。 Case 表达式 of 情况1: 情况2: 语句 情况3: begin 语句 end else: 语句 endcase

  24. For语句 • For I = v1, v2 do 语句 • For I = v1, v2 inc do 语句 • For I = v1, v2 inc do begin 语句 endfor For语句循环执行一个语句或一个语句块,该循环安特定的 步长从初始值上升或下降至结尾值。前面两种形式,每次 循环只执行一个语句;而第三种情况执行一个语句块。在 每一次循环中,I的值以步长inc增加或减少,这依赖于inc 的值是正还是负。没有指定inc,循环则以步长1递增。

  25. While语句 • While 条件 do 语句 • While 条件 do begin 语句 Endwhile 当特定的条件为真时,while语句执行单个语句和一个语句块。

  26. Repeat语句 • Repeat 语句 until 条件 • Repeat begin 语句 Endrep until 条件 Repeat语句执行单个语句和一个语句块,直到某个特定条件为真。

  27. Return语句 • Return, 结果 • Return Return语句在当前程序单元中产生一个即时出口,并返回控制。在的一种形式中返回一个变量“结果”。这种格式在函数中具有强制性,因为函数必须返回一个变量值。第二种形式在过程中使用。

  28. Switch语句 • Switch 表达式 情况1: 情况2:语句 情况3:begin 语句 end else: 语句 endswitch Switch语句执行转到一系列情况中的第一种匹配情况,然后执行某个语句或语句块。

  29. Case和switch语句的区别 • Case语句一旦找到第一种匹配的情况,就不会考虑其他的情况,而switch语句将继续转到下一种情况;没有找到匹配相就要执行else语句,如果没有else语句,case语句会出现错误信息,整个运行停止,switch语句则只停止其自身的执行,而其他语句进行执行。

  30. x=2 SWITCH x OF 1: PRINT, 'one' 2: PRINT,'two' 3: PRINT, 'three' 4: PRINT, 'four' ENDSWITCH IDL prints: two three four x=2 case x OF 1: PRINT, 'one' 2: PRINT,'two' 3: PRINT, 'three' 4: PRINT, 'four' ENDcase IDL prints: two Switch语句中如果不想向下执行的话,可以加入break语句

  31. Goto语句 • 使用goto语句可以跳动当前程序单元的指定位置。其形式: Goto, 标号 • 指向的位置由“标号”标记,该标记号插入到需要指向的位置。Goto语句的标号表示为: label: • 象其他语言一样,程序中要尽量的避免使用goto语句,最多不超过1次。

  32. Break语句 • Break语句执行从for、while、repeat等循环语句或case、switch语句中的下一情况。 • 语法如下: break

  33. Continue语句 • Continue语句使for、while或repeat循环得以继续执行。 • 语法为: continue • Continue语句用于当需要结束当前循环而进入下一个循环时。

  34. Expr? Expr1:expr2 Expr? Expr1:expr2 index=(num ge 10)? 2:4

  35. 6、文件的读入输出 处理文件的过程和函数

  36. 文件读写 • 读取有格式(ASCII)文件 Readf从有格式文件中读取数据 Printf将数据写入到有格式文件中 例如:读取有格式文件 IDL>openr,lun, ‘input.dat’,/get_lun IDL>data=lonarr(10,100) IDL>readf,lun,data,format=‘(10i6)’ IDL>free_lun,lun

  37. 例如:写入一个有格式文件 IDL>data=lindgen(10,100) IDL>openw,lun, ‘output.dat’,/get_lun IDL>printf,lun,data,format=‘(10i6)’ IDL>free_lun,lun

  38. 读取无格式(二进制)文件 • Readu读取无格式文件(单一数据类型) IDL>file=filepath(‘ctscan.dat’,subdir=‘examples/data’) IDL>openr,lun,file,/get_lun IDL>Data=bytarr(256,256) IDL>Readu,lun,data IDL>free_lun,lun IDL>tvscl,data

  39. 将二进制数据写入无格式文件 • Writeu将二进制数据写入一个打开的无格式文件 IDL>data=dist(256) IDL>openw,lun, ‘dist.dat’,/get_lun IDL>writeu,lun,data IDL>free_lun,lun • 写入文件时一般要加入一个文件头,该文件头记录了文件中包含的数据的大小和类型等信息。使用size函数可以实现这一操作。

  40. 常用格式(1) • ASCII_TEMPLATE Presents a GUI that generates a template defining an ASCII file format • ASSOC Associates an array structure with a file • BINARY_TEMPLATE Presents a GUI for interactively generating a template structure for use with READ_BINARY • CDF Routines Common Data Format routines • EOS Routines HDF-EOS (Hierarchical Data Format-Earth Observing System) routines • HDF_BROWSER Opens GUI to view contents of HDF, HDF-EOS, or NetCDF file • HDF_READ Extracts HDF, HDF-EOS, and NetCDF data and metadata into an output structure • IDLffDICOM Contains the data for one or more images embedded in a DICOM part 10 file • IDLffDXF Object that contains geometry, connectivity, and attributes for graphics primitives • IDLffShape Contains geometry, connectivity and attributes for primitives accessed from ESRI Shape files • MPEG_OPEN Opens an MPEG sequence • MPEG_SAVE Saves an MPEG sequence to a file • NCDF Routines Network Common Data Format routines • PRINT/PRINTF Writes formatted output to screen or file • READ/READF Reads formatted input from keyboard or file • READ_ASCII Reads data from an ASCII file • READ_BINARY Reads the contents of a binary file using a passed template or basic command line keywords • READ_BMP Reads Microsoft Windows bitmap file (.BMP) • READ_DICOM Reads an image from a DICOM file • READ_IMAGE Reads the image contents of a file and returns the image in an IDL variable • READ_INTERFILE Reads Interfile (v3.3) file • READ_JPEG Reads JPEG file • READ_PICT Reads Macintosh PICT (version 2) bitmap file • READ_PNG Reads Portable Network Graphics (PNG) file • READ_PPM Reads PGM (gray scale) or PPM (portable pixmap for color) file • READ_SRF Reads Sun Raster Format file

  41. 常用格式(2) • READ_SYLK Reads Symbolic Link format spreadsheet file • READ_TIFF Reads TIFF format file • READ_WAV Reads the audio stream from the named .WAV file • READ_WAVE Reads Wavefront Advanced Visualizer file • READ_X11_BITMAP Reads X11 bitmap file • READ_XWD Reads X Windows Dump file • READS Reads formatted input from a string variable • READU Reads unformatted binary data from a file • SOCKET Opens a client-side TCP/IP Internet socket as an IDL file unit • TAPRD Reads the next record on a tape • TAPWRT Writes data to a tape • WRITE_BMP Writes Microsoft Windows Version 3 device independent bitmap file (.BMP) • WRITE_IMAGE Writes an image and its color table vectors, if any, to a file of a specified type • WRITE_JPEG Writes JPEG file • WRITE_NRIF Writes NCAR Raster Interchange Format raster file • WRITE_PICT Writes Macintosh PICT (version 2) bitmap file • WRITE_PNG Writes Portable Network Graphics (PNG) file • WRITE_PPM Writes PPM (TrueColor) or PGM (gray scale) file • WRITE_SRF Writes Sun Raster File (SRF) • WRITE_SYLK Writes SYLK (Symbolic Link) spreadsheet file • WRITE_TIFF Writes TIFF file with 1 to 3 channels • WRITE_WAV Writes the audio stream to the named .WAV file • WRITE_WAVE Writes Wavefront Advanced Visualizer (.WAV) file • WRITEU Writes unformatted binary data to a file

  42. ENVI环境的直接调用 • envi, /restore_base_save_files • envi_init, /batch_mode • 主要函数: envi_open_file envi_file_query envi_get_map_info envi_get_data envi_write_envi_file

  43. ENVI环境的直接调用 • 数据文件的读入: filters = ['*.*'] city92file = DIALOG_PICKFILE(/READ, FILTER = filters) envi_open_file, city92file,r_fid=fid ;Geting the ID of the file. if (fid eq -1) then begin envi_batch_exit ;There was an erro, when opening the file. return endif envi_file_query, fid, ns=ns, nl=nl, nb=nb Dims=[-1, 0, ns-1, 0, nl-1] map_info = envi_get_map_info(fid=fid) city92_data=envi_get_data(fid=fid,dims=dims,pos=0) envi_file_mng, id=fid, /remove • 数据文件的输出: simu96_f= DIALOG_PICKFILE(/WRITE, FILTER = filters) envi_write_envi_file, simu96,out_name=simu96_f,map_info=map_info

  44. 六、IDL图形图像处理 读写数据 • 导入文本数据 • 用到ASCIITEMP()和READASCII()函数

  45. 选取系统所带的例子:plot.txt文件

  46. 2、导入二进制图像 • 用到BINARY_TEMPLATE()和READ_BINARY()函数

  47. 选取系统所带的例子:surface.dat文件

  48. 3、保存模板 • 如果需要读入许多具有同样格式的文本文件或二进制文件,则可以将模板保存起来再利用。 • 然后调用如下语句恢复模板:

  49. 4、读取图像文件 • IDL提供了许多读写图像文件的函数,例如read_bmp、read_gif、read_jpeg、read_tiff、read_png、 write_bmp、 write_gif、 write_jpeg、 write_tiff、 write_png等函数。

More Related