1 / 65

可视化的 IDL 工具 Interactive Data Language 中科院计算机网络信息中心 超级计算中心 谢茂金 Email: xiemaojin@sccas

可视化的 IDL 工具 Interactive Data Language 中科院计算机网络信息中心 超级计算中心 谢茂金 Email: xiemaojin@sccas.cn 2010.9. IDL 概况 IDL 是什么? IDL 的特点 IDL 能干什么? IDL 支持的文件格式 IDL 图像处理简介 IDL 程序导读与语法解析 变量、数组、过程、函数、输入输出、循环、分支、判断等语法基础。. 可视化的 IDL IDL 图形系统 IDL 坐标系统 数据可视化:绘制线 Plot ,等值线,面,体绘制 智能工具 iTools 并行 IDL 简介

Download Presentation

可视化的 IDL 工具 Interactive Data Language 中科院计算机网络信息中心 超级计算中心 谢茂金 Email: xiemaojin@sccas

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工具 Interactive Data Language 中科院计算机网络信息中心 超级计算中心 谢茂金 Email: xiemaojin@sccas.cn 2010.9

  2. IDL概况 IDL是什么? IDL的特点 IDL能干什么? IDL支持的文件格式 IDL图像处理简介 IDL程序导读与语法解析 变量、数组、过程、函数、输入输出、循环、分支、判断等语法基础。 可视化的IDL IDL图形系统 IDL坐标系统 数据可视化:绘制线Plot,等值线,面,体绘制 智能工具iTools 并行IDL简介 进一步学习IDL 内容提要

  3. IDL是什么 • IDL(Interactive Data Language,交互式数据语言)是美国ittvis公司的旗舰产品,它既是对数据进行可视化表现、分析及应用开发的软件,又是面向矩阵、语法简单的第四代可视化计算机语言。是进行数据分析、可视化表达与跨平台应用开发的理想工具。 • IDL用户涵盖NASA、ESA、NOAA、Siemens、GE Medical、Army Corps of Engineers、MacDonald Dettwiler 等。 • NASA选用IDL进行飞越火星航空器的研究,JPL科学家利用IDL对“勇气号”和“机遇号”的数据进行数据分析和处理。

  4. IDL的特点 • IDL=VC 菜单的定制、消息传递 • IDL=VB 可视化界面的设计、语言通俗易懂、编程入门容易 • IDL=JAVA具有良好的跨平台能力,方便移植,面向对象特性 • IDL=FORTRAN+C语言风格绝大部分继承自Fortran,少量来源于C。面向矩阵,执行效率高,代码量比C和Fortran少得多,简洁而不失灵活性。 • IDL=MATLAB提供了大量封装和参数化了的数学函数及各种信号处理的方法,使用方法也非常类似。 • IDL=OPENGL 提供了丰富的二维、三维图形图像操作类,能高效快速地对数据进行可视化。

  5. 其他…

  6. IDL支持的文件格式 • 文本格式:Readf, Read_ascii, Printf • 二进制格式:Readu, Read_binary, Writeu • 科学数据格式: • CDF:begin with the prefix "CDF_" • HDF4: begin with the prefix "HDF_" • HDF5:begin with the prefix "H5_" or "H5*_" • HDF-EOS:begin with the prefix "EOS_" • NetCDF:begin with the prefix "NCDF_".

  7. 原图 SMOOTH(image, [1, 1, 21]) SMOOTH(image, [1, 21, 1]) SMOOTH(image, [1, 5, 5]) 图像处理 • IDL提供了具有强大的图像处理能力。 • 支持多种文件格式,只要用Read(Write)_Image两个函数,即可读写IDL支持的任何图像文件。也可以用Dialog_Read(Write)_Image交互读取。TV函数即可显示图像。 • 提供了方便的傅里叶变化,小波变换,Hough变换,Radon变换等,各种图像增强滤波操作,形态学操作,图像分割、识别等丰富的图像处理和分析函数。 • 图像也是数组,所以各种可以处理数组的函数也可以用于图像数据的处理。

  8. IDL支持的图像格式

  9. IDL支持的图像格式

  10. 原图 SMOOTH(image, [1, 1, 21]) SMOOTH(image, [1, 21, 1]) SMOOTH(image, [1, 5, 5]) 图像处理例子 • file = FILEPATH('rose.jpg', SUBDIRECTORY = ['examples', 'data']) • image = READ_IMAGE(file) • imageSize = SIZE(image, /DIMENSIONS) • DEVICE, DECOMPOSED = 1 ;Decomposed={0|1}伪彩色/真彩彩色 • WINDOW, 0, XSIZE = imageSize[1], YSIZE = imageSize[2], $ TITLE = ‘Original Rose Image’ • TV, image, TRUE = 1 ;True={1|2|3} 对应 (3,m,n),(m,3,n), (m,n,3) • WINDOW, 1, XSIZE = 3*imageSize[1], YSIZE = imageSize[2], $ TITLE = 'Vertically Smoothed (left), Horizontally ' + $ 'Smoothed (middle), and Both (right)‘ • smoothed = SMOOTH(image, [1, 1, 21]) • TV, smoothed, 0, TRUE = 1 • smoothed = SMOOTH(image, [1, 21, 1]) • TV, smoothed, 1, TRUE = 1 • smoothed = SMOOTH(image, [1, 5, 5]) • TV, smoothed, 2, TRUE = 1 ; Display the results. RGBRGBRGB…….RGB RRRRRRRRRR….RRR GGGGGGGGG….GGG BBBBBBBBBB…...BBB …………………………… RRRRRRRRRR….RRR GGGGGGGGG….GGG BBBBBBBBBB….BBB TVScl 函数、过程、参数、关键字、返回值; 函数和过程统称为例程 routines

  11. IDL程序导读与语法解析 编译和 执行 在shell下: [scxiemj@v3904 ~]$ idlde 即可打开IDE 控制台显示输出结果 显示用户变量和系统变量 在此输入命令

  12. 直接敲入idl,运行命令行形式的IDL 分号后面的为注释 Indgen(3,4)生成3列4行的二维数组,每个元素的值依次递增,注意是按列存储。

  13. 程序导读与语法解析 • IDL程序的几种运行方式 • 命令行程序:命令行下:.RUN>-代码>END。.GO运行 • 批处理文件:在文本文件中输入代码,保存为.pro文件。@FileName运行 • 日志文件:命令行下: JOURNAL>代码>JOURNAL。@FileName运行。 • 包含文件:包含一系列IDL命令的文本文件,默认扩展名为.INC。在其他文件中用@FileName.inc的方式调用。 • 主程序文件:命令序列,以END结束,保存为.pro,<F5>, .GO, .RUN或.RNEW命令运行,不能在命令行直接输入文件名运行。 • 过程、函数、过程文件的编写和执行

  14. 大小写不敏感 弱类型,赋值和类型提升 矩阵:列优先 常用功能符号 注释 ; 续行 $ 断句 & IDL程序设计基础

  15. 一个简单程序 • 该程序读入一小一大两个整形数给变量a和b,将a和b之间的奇数存储到一个数组中,并统计数组元素的总和

  16. 过程:以保留字Pro开头,End结尾,其基本格式如下:过程:以保留字Pro开头,End结尾,其基本格式如下: Pro过程名,[参数1,…,参数n],[关键字1,…,关键字n] 命令序列…. End 3B 128L 16384LL 3.14159D 7U 4UL 100ULL BytArr IntArr LonArr FltArr DblArr ComplexArr 分支、循环 数组函数:求和

  17. 过程文件 1)过程文件用来存放多个IDL过程和函数,其扩展名为.pro 2)主文件名可以与某个过程名相同,也可以不同,若相同,则该过程必须放在过程文件的最后 3)过程文件编译(CTRL+F8)后,可以按照过程和函数的调用方法任意调用过程文件中的过程和函数。

  18. 过程文件的编译(CTRL+F8)和调用 过程文件的编译及过程调用

  19. 基本数据类型 • 数据类型 【十进制后缀】(占用字节) • Byte【nB】(1字节) 4B, 12B; • Int【n或nS】 及 无符号整形【nU或nUS】(2字节) -6, 8S; • Long Int【nL】及无符号长整型nUL(4字节)。 -128L,4UL • 64位长整型nLL及64位无符号长整型nULL。(8字节) 94LL, 12ULL。 • Float【n.或.nF或n.n或nE或nEsx】(4字节)3.14, 0., 3.14E12 • Double 【n.或nd或n.n或nE或nDsx】(8字节)3.14D, 3.14D • Complex 【无】(单精度8字节,双精度16字节)complex(1.7,1.44),complex(1.44D, 4.7D) • String 【无】’hello IDL’ “I’m a string!”

  20. 数据类型代码表 • 代码 名称 数据类型 • 0 Underfined Undefined • 1 Byte Byte • 2 Int Integer • 3 Long Longword integer • 4 Float Floating point • 5 Double Double_precision floating • 6 Complex Complex floating • 7 String string • 8 Struct Structure • 9 DComplex Double_precision complex • 10 Pointer Pointer • 11 ObjRef Object reference • 12 UInt Unsigned integer • 13 ULong Unsigned Longword integer • 14 Long64 Longword 64-bit integer • 15 ULong64 Unsigned 64-bit integer

  21. 常量 • 字符型常量:又称为字符串,用“”或‘’界定“IDL7.1”, “12-47”, “I’m OK”, ‘2010/09/13’ • 数值型常量: 1.414,3.14159265D, 0L,COMPLEX(1.4, 2.03) • 逻辑型常量:真和假,判断为真的情况如下: • 字节型、整形和长整型的奇数;如43B, 5, 1L 为真。44B, 0, 4L等为假 • 非零的浮点型、双精度、和复数类型;如5.4f,complex(4.1, 0) • 非空的字符串。如‘abc’,而空字符串 ”” 为假

  22. 系统变量 • 系统变量:以感叹号!开头。如!PI (π) • 内部系统变量:由系统自动提供、自动生成和维护的一组特殊变量。 • 自定义系统变量:用户根据需要自定义,用于描述系统运行中的状态或用于某种特殊用途。 • DEFSYSV, ‘var1’, expression[,Read_Only] • DEFSYSV, ‘var1’, EXISTS = var2

  23. 系统变量 带锁,表示只读不写 !DTOR 0.017453292 !PATH D:\\Program File... 可用AddPath命令增加搜索路径 !PI 3.1415927 !PROMPT IDL>

  24. 内存变量 • 临时存储于内 存中的变量,例: IDL> a=4.0D IDL> b=2.4L b=2.4L ^ % Syntax error. IDL> c=1.4 IDL> p=ptr_new(c)

  25. 查看变量 • print[,exp1,exp2,…,expn][,FORMAT=format] • a=3.0D & b=4L • print,a, a+b, a/2, FORMAT=(‘I4, I4, I4’) • help, exp1, exp2, …, expn[,NAMES=“通配符”] [,OUTPUT=var] [,/SYSTEM_VARIABLES][,/STRUCTURES] • help, a, output = myVar ;把变量a的信息存入myVar中 • help, NAME = ‘a*’ ;显示所有以a开头的变量信息 • help, !D, /STRUCTURES ;显示系统变量!D的结构信息

  26. 查看变量

  27. 变量的存储、释放与恢复 • 保存:将有价值的内存变量[和编译程序及函数]保存到文件中,以备下次继续使用。 • SAVE[,var1,…,varn] [,/ALL] [,/COMM,/VARIBLES] [,COMPRESS][,FILENAME=‘文件名’] [,/ROUTINES] [,/SYSTEM_VARIBLES] • 释放:关闭所有文件,释放所有用户定义的变量、指针、对象等,初始化IDL环境 • .RESET_SESSION • .FULL_RESET_SESSION ;+卸载所有动态库 • 恢复:将之前保存在文件中的内存变量[和编译程序及函数]恢复到内存中继续使用。 • RESTORE[[,”文件名”] | [,FILENAME=“文件名”]] 【注】若不写文件名的话,save时将保存到idlsave.dat中,restore时将从idlsave.dat中恢复

  28. 数组 • 按列存储,允许使用1~8维数组 • 数组创建 1)直接创建(能创建1~3维)数组名=[表达式表] • myArray = [21, 10, 6, 6, 4, 9] • myArray = [[21, 10, 6], [6, 4, 9]] ;2行3列 • myArray = [ [[1, 2, 3], [4, 5, 6]] , [[7, 8, 9], [10, 11, 12]]] ; 3列2行2层,下标顺序为 [列,行,层] myArray[0,0,0]=1 myArray[1,0,0]=2 myArray[2,0,0]=3 myArray[0,1,0]=4 myArray[1,1,0]=5 myArray[2,1,0]=6 myArray[0,0,1]=7 myArray[1,0,1]=8 myArray[2,0,1]=9 myArray[0,1,1]=10 myArray[1,1,1]=11 myArray[2,1,1]=12

  29. 数组 • 数组创建 2)用函数创建(1~8维)数组初值为0的函数 • myArray = fltArr(d1[,…,d8][,/NOZERO]) • myArray = fltArr(3,4) ;创建一个3列4行的浮点数组 • /NOZERO创建数组的初值为不确定值 【注:】像fltArr这样的函数还有BytArr(), IntArr(), uIntArr(), LonArr(), uLonArr(), Lon64Arr(), uLon64Arr(), DblArr(), ComplexArr(), DComplexArr(), StrArr()用于创建各种类型的数组

  30. 数组 • 数组创建 3)用函数创建(1~8维)数组初值为索引号的函数 • IndGen(d1[,…,d8][,/*]|[TYPE=value]) ;*代表某个数据类型,可以是Byte,complex,dcomplex, double, float, L64, Long, String, Uint, UL64, Ulong.这种方法通过关键字来确定数组类型,value取[0,15]表示16种类型 • 像FIndGen的方法还有BIndGen,UIndGen, LIndGen, ULIndGen, L64IndGen, DIndGen, CIndGen, DCIndGen, SIndGen 4)Replicate(exp, d1[,…,d8])用来创建一个所有数组值均是表达式的值的一维或多维数组

  31. 数组 • 赋值和引用

  32. 小心:二维下标数组的方式可能会让你感到失望!二维下标数组会被IDL拆解成一维下标数组小心:二维下标数组的方式可能会让你感到失望!二维下标数组会被IDL拆解成一维下标数组 ? 用二维的下标数组可以吗 数组 • 赋值和引用

  33. 数组操作 常用的函数 • 求和total(myArray[*:10, 10*4]) • 求最大/最小值 Max(myArray, MIN=myMin) • 元素个数N_Elements(myArray) • 数组尺寸Size;维数、列数、行数、类型、元素个数 • Mean平均值、Variance方差、StdDev标准偏差 • Monent计算数组的平均值、方差、倾斜度、峰值、平均绝对偏差、标准偏差 • Where返回满足指定条件的数组元素下标所组成的一维数组 • Reform在不改变数组元素的前提下重新生成新的维数的数组

  34. 常用运算符 • 数值运算:()圆括号 +加 ++自加 –减 --自减 MOD模 *乘 /除 ^乘方 [ ]数组或下标 <求最小 >求最大 #矩阵列乘 ##矩阵行乘 • 关系运算符:EQ等于 LT小于 GT大于 NE不等于 LE小于等于 GE大于等于 • 逻辑运算: ~逻辑非 &&逻辑与 ||逻辑或 NOT按位非 AND按位与 OR按位或 XOR按位异或 • 赋运算: = ##= *= += -= /= AND= EQ= GE= GT= LE= LT= MOD= NE= OR= XOR= <= >=

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

  36. 可视化的IDL • IDL图形系统 • 直接图形系统和对象图形系统 • 坐标系统 • 窗口系统 • 数据可视化

  37. IDL的图形系统 之直接图形法和对象图形法 • 直接图形法: 创建2D图形时常用,如:plot, mapping, contours。简单、快速,但需反复重画,依赖于当前图形设备; • 对象图形法: 加速3D系统显示,灵活,交互性强,充分控制对象,对象驻留内存,不需反复重画。 • 对象管理:生成Obj_New,销毁Obj_Destroy,有效性查询Obj_Valid • 对象属性:获取GetProperty,设置SetProperty

  38. Graphics Atom Graphics Atom Model Model View View Scene 对象图形系统的类和对象 • 显示:*Window (*代表前缀IDLgr) • 容器:*Scene, *View, *ViewGroup。 • 模型:*Model,是容器对象的子对象,起承上启下作用 • 图元:*Image, *Surface, *Axis, *Countoure,*Polyline, *Ploygon, *Light, *Volume • 属性:*Clipboard,*Font,等无法直接显示的属性 • 利用容器和模型对象的add方法构造右图所示的结构,利用 *Window对象的draw方法绘制容器对象的内容。 对象图形系统 组成结构和调用

  39. 图形系统之坐标系统 • IDL提供了三种独立的坐标系统: • 数据坐标系统:通常与数据范围相同,可以是线性、对数或半对数的,系统默认的坐标系统 • 设备坐标系统:选定设备的实际坐标系统 • 归一化坐标系统:将数据坐标系统或设备坐标系统中行列数据范围归一化到[0,1]范围。 • 坐标系统之间的互相转换 • 数据坐标系统、设备坐标系统、归一化坐标系统间:CONVERT_Coord(x[,y [,Z]], [,/Data|,/Device, /Normal], [,/Double][,/To_Data| ,/To_Device,|/ To_Normal]) • 笛卡尔坐标、极坐标、柱面坐标和球坐标系统间:CV_Coord([,/Degrees][,Double][,From_Cylin=cyl_coords| ,From_Polar=pol_coords| ,From_Rect=rect_coords| , From_Sphere=sph_coords] [,/To_Cylin|,/To_Polar|,/To_Rect, /To_Sphere]

  40. 窗口系统 • 建立:myWin = OBJ_NEW(‘IDLgrWindow’,[关键字=属性] …) • 绘制:*Draw[,IDLgrView | IDLgrViewGroup | IDLgrScene对象] (*代表myWin->[IDLgrWindow::]) • 清除:*Erase [,color= index | [R,G,B]] • 显示/隐藏:*Show, 0 | 1 • 最小化/还原:*Iconify, 1 | 0 • 删除:*Clean,OBJ_Destroy • 窗口对象的下一级对象是IDLgrView,可以设置IDLgrView对象的属性来修改view的大小和位置、投影方式、裁剪平面和裁剪方式、进行几何变换

  41. 数据可视化 • 绘制线Plot,多线oPlot, 无坐标轴多线Plots • 绘制等值轮廓线Countour • 绘制网格面Surface,阴影曲面Shade_Surf • 绘制投影曲线Plot_3DBox • 体绘制IDLgrVolume,xVolume • 绘制坐标轴Axis • 绘制文本XYOUTS • 绘制条形图Bar_Plot • 交互文本标注Annotate • 交互控制trackball

  42. 线的绘制 • 绘制线Plot • Plot,[X]Y[,关键字] • X | Y: 绘制线的 X | Y 轴坐标组成的数组。在绘图时X和Y被转换成Double数组 IDL> x=Findgen(101)*(0.01*2.0*!PI) IDL> y = Sin(x) Plot, x, y Plot, y Plot, x, y Plot, y

  43. 线的绘制 • Plot有几十个关键字用于控制绘制的属性,包括线的虚实粗细,图形符号,颜色,位置,裁剪;标题文字及相应字体;坐标轴及其刻度的粗细长短宽窄朝向;所用的坐标系统及其缩放等每一个细节。

  44. 线的绘制 • Plot部分关键字和使用方法 • /ISOTROPIC:强制把X轴和Y轴转换成等比例 • /Polar:绘制极坐标下的线。这时格式为 Plot, r, theta, /Polar • /THICK=value:设定绘制线的粗细,默认为1 • /XLog,/YLog:用于创建对数X|Y数轴 • Max|Min_Value=value:绘制数据的最大|最小值 • nSum=value:每个value个值绘制一个点 • Background | Color=value:设定背景|前景色 • PSYM=integer{-10~10}:按指定图形符号绘制数据点 • LineStyle=integer{0~5}:0实线,1点,2虚线,3点虚线,4点点虚线,5长虚线

  45. IDL> r=findgen(100)*0.01 IDL> t=4.0*!Pi*rIDL> Plot, r, t, /polar pSym=-2 pSym=5

  46. OPlot绘制多线 • OPlot使用方法与Plot的用法基本相同,区别在于连续使用OPlot时,可以在同一个坐标系中绘制多条直线或者曲线,而不擦除原有内容。相当于Plot加了/NoErase关键字。 • x=findgen(101)*(0.01*2.0*!PI) • Plot, x, sin(x) • OPlot, x, cos(x), pSym=-2 • OPlot, x, sin(x)*cos(x), $ • linestyle=5, Thick=4

  47. Plots绘制无坐标多线 • Plots使用方法与Plot的用法基本相同,区别在于连续使用Plots时,可以在多个坐标系中绘制任意多条没有坐标轴的直线或者曲线,而不擦除原有内容。 • 除了与Plot相同的关键字外,Plots还有一个关键字/Continue,在最后一次的绘制点处继续连续绘制 x=[0, 10, 20, 30, 40] & y=[0, 0.8, 1, 0.6, 0] u=[50, 60, 70, 80] & v=[-0.3, -0.5, -0.3, 0] plots, x/2, y/2+0.5, pSym=-2 plots, u/2, v/2+0.5, pSym=-2, /continue plots, x/2, y/2+0.3, pSym=-6 plots, u/2, v/2+0.3, pSym=-6

  48. Contour绘制等值轮廓线 TVScl, DIST(100) • Contour用于绘制坐标系中任意的等值轮廓线。 • Contour的用法跟Plot的用法基本相同,也提供了许多关键字用于设置线、标注、坐标轴等元素的每一个细节。关键字/OverPlot的效果与Plot中/NO_ERASE具有相同的效果。 • 关键字Levels=vector用于设置每层对应的数值。

  49. Surface Shade_Surf绘制网格面 • Surface用于在坐标系中绘制任意的三维网格。与Plot的用法基本相同。AX|AZ = degree关键字用于设置网格面绕X|Z轴旋转的角度。/Lower_ONLY|Upper_ONLY设置只绘制底|顶面。 Shade=array指定一个二维数组作为表面纹理。 • Shade_Surf与Surface用法基本相同,但能绘出带阴影的三维曲面。

More Related