可视化的 idl 工具 interactive data language 中科院计算机网络信息中心...

65
可可可可 IDL 可可 Interactive Data Language 可可可可可可可可可可可可 可可可可可可 可可可 Email: [email protected] 2010.9

Upload: ruth-baldwin

Post on 30-Dec-2015

198 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

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

可视化的 IDL工具Interactive Data Language

中科院计算机网络信息中心 超级计算中心

谢茂金

Email: [email protected]

2010.9

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

内容提要• IDL 概况

– IDL 是什么?– IDL 的特点– IDL 能干什么?– IDL 支持的文件格式– IDL 图像处理简介

• IDL 程序导读与语法解析– 变量、数组、过程、函数、

输入输出、循环、分支、判断等语法基础。

• 可视化的 IDL

– IDL 图形系统– IDL 坐标系统– 数据可视化:绘制线

Plot ,等值线,面,体绘制

– 智能工具 iTools

• 并行 IDL 简介• 进一步学习 IDL

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

IDL 是什么• IDL(Interactive Data Language ,交互式数据语言 ) 是美国 ittvis 公司的旗舰产品,它既是对数据进行可视化表现、分析及应用开发的软件,又是面向矩阵、语法简单的第四代可视化计算机语言。是进行数据分析、可视化表达与跨平台应用开发的理想工具。

• IDL 用户涵盖 NASA、 ESA、 NOAA、 Siemens、 GE Medical、 Army Corps of Engineers、MacDonald Dettwiler 等。

• NASA 选用 IDL 进行飞越火星航空器的研究, JPL 科学家利用 IDL 对“勇气号”和“机遇号”的数据进行数据分析和处理。

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

IDL 的特点• IDL= VC  菜单的定制、消息传递• IDL= VB  可视化界面的设计、语言通俗易懂、编程入

门容易• IDL= JAVA 具有良好的跨平台能力,方便移植,面向对

象特性• IDL= FORTRAN+C 语言风格绝大部分继承自 Fortran

,少量来源于 C 。面向矩阵,执行效率高,代码量比 C和Fortran 少得多,简洁而不失灵活性。

• IDL=MATLAB 提供了大量封装和参数化了的数学函数及各种信号处理的方法,使用方法也非常类似。

• IDL=OPENGL  提供了丰富的二维、三维图形图像操作类,能高效快速地对数据进行可视化。

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

医学影像

图像处理与分析

信号处理地球科学

数据处理与分析

天文

IDL 能做什么?

其他…

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

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_".

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

图像处理• IDL 提供了具有强大的图像处理能力。• 支持多种文件格式,只要用 Read(Write)_Image 两个函数,即

可读写 IDL 支持的任何图像文件。也可以用Dialog_Read(Write)_Image 交互读取。 TV 函数即可显示图像。

• 提供了方便的傅里叶变化,小波变换, Hough 变换, Radon变换等,各种图像增强滤波操作,形态学操作,图像分割、识别等丰富的图像处理和分析函数。

• 图像也是数组,所以各种可以处理数组的函数也可以用于图像数据的处理。

SMOOTH(image, [1, 1, 21])

SMOOTH(image, [1, 21, 1]) SMOOTH(image, [1, 5, 5]) 原图

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

IDL 支持的图像格式IDL 支持的图像格式

格式 描述BMP Windows Bitmap format

DICOM Digital Imaging and Communications in Medicine

GeoTIFF TIFF file with tags containing geographic data

GIF Graphics Interchange Format

Interfile Interfile version 3.3 format

JPEG Joint Photographic Experts Group format

JPEG 2000 JPEG 2000 format

Motion JPEG2000 Motion JPEG2000 format

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

IDL 支持的图像格式IDL 支持的图像格式 ( 续表 )

Format Description

MPEG Moving Picture Experts Group format

MrSID Multi-resolution Seamless Image Database format

NRIF NCAR Raster Interchange Format

PICT Macintosh version 2 PICT files (bitmap only)

PNG Portable Network Graphics format

PPM PPM/PGM format

SRF Sun Raster File format

TIFF 8-bit or 24-bit Tagged Image File format

X11 Bitmap X11 Bitmap format used for reading bitmaps for IDL widget button labels

XWD X Windows Dump format

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

图像处理例子• 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.

SMOOTH(image, [1, 1, 21])

SMOOTH(image, [1, 21, 1]) SMOOTH(image, [1, 5, 5]) 原图

RGBRGBRGB…….RGB

RRRRRRRRRR….RRRGGGGGGGGG….GGGBBBBBBBBBB….BBB

RRRRRRRRRR….RRRGGGGGGGGG….GGGBBBBBBBBBB…...BBB……………………………

函数、过程、参数、关键字、返回值 ;函数和过程统称为例程 routines

TVScl

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

IDL 程序导读与语法解析在 shell下 :[scxiemj@v3904 ~]$ idlde即可打开 IDE

在此输入命令

显示用户变量和系统变量

控制台显示输出结果

编译和执行

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

Indgen(3,4) 生成 3列 4 行的二维数组,每个元素的值依次递增,注意是按列存储。

直接敲入 idl ,运行命令行形式的 IDL

分号后面的为注释

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

程序导读与语法解析• IDL 程序的几种运行方式

– 命令行程序:命令行下: .RUN>- 代码 >END。 .GO运行

– 批处理文件:在文本文件中输入代码,保存为 .pro 文件。 @FileName运行

– 日志文件:命令行下 : JOURNAL> 代码 >JOURNAL 。@FileName运行。

– 包含文件:包含一系列 IDL 命令的文本文件,默认扩展名为 .INC。在其他文件中用 @FileName.inc 的方式调用。

– 主程序文件:命令序列,以 END结束,保存为 .pro, <F5>, .GO, .RUN或 .RNEW 命令运行,不能在命令行直接输入文件名运行。

– 过程、函数、过程文件的编写和执行

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

IDL 程序设计基础• 大小写不敏感• 弱类型,赋值

和类型提升• 矩阵:列优先• 常用功能符号

– 注释 ;

– 续行 $

– 断句 &

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

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

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

数组函数 : 求和

过程:以保留字 Pro 开头, End结尾,其基本格式如下:Pro 过程名, [ 参数 1,…,参数 n], [关键字 1,…,关键字 n]命令序列… .End

3B 128L 16384LL 3.14159D 7U 4UL 100ULL

分支、循环

BytArr IntArr LonArr FltArr DblArr ComplexArr

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

过程文件1)过程文件用来存放多个IDL 过程和函数,其扩展名为 .pro

3)过程文件编译( CTRL+F8)后,可以按照过程和函数的调用方法任意调用过程文件中的过程和函数。

2)主文件名可以与某个过程名相同,也可以不同,若相同,则该过程必须放在过程文件的最后

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

过程文件的编译及过程调用

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

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

基本数据类型• 数据类型 【十进制后缀】(占用字节)

– 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!”

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

数据类型代码表• 代码 名称 数据类型• 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

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

常量• 字符型常量:又称为字符串,用“”或‘’界定

“ 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’ ,而空字符串 ”” 为假

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

系统变量• 系统变量:以感叹号!开头。如 !PI (π)

– 内部系统变量:由系统自动提供、自动生成和维护的一组特殊变量。

– 自定义系统变量:用户根据需要自定义,用于描述系统运行中的状态或用于某种特殊用途。

• DEFSYSV, ‘var1’, expression[,Read_Only]

• DEFSYSV, ‘var1’, EXISTS = var2

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

系统变量

!PI 3.1415927

!PATH D:\\Program File...可用 AddPath 命令增加搜索路径

!PROMPT IDL>

!DTOR 0.017453292

带锁,表示只读不写

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

内存变量• 临时存储于内存中的变量,例:IDL> a=4.0D

IDL> b=2.4L

b=2.4L

^

% Syntax error.

IDL> c=1.4

IDL> p=ptr_new(c)

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

查看变量• 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 的结构信息

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

查看变量

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

变量的存储、释放与恢复• 保存:将有价值的内存变量 [ 和编译程序及函数 ]保存到文件中,以备下次继续使用。– 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中恢复

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

数组• 按列存储,允许使用 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

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

数组• 数组创建

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() 用于创建各种类型的数组

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

数组• 数组创建

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]) 用来创建一个所有数组值均是表达式的值的一维或多维数组

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

数组• 赋值和引用

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

数组• 赋值和引用

小心:二维下标数组的方式可能会让你感到失望!二维下标数组会被 IDL 拆解成一维下标数组

用二维的下标数组可以吗

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

数组操作常用的函数

–求和 total(myArray[*:10, 10*4])

–求最大 /最小值 Max(myArray, MIN=myMin)

–元素个数 N_Elements(myArray)

– 数组尺寸 Size; 维数、列数、行数、类型、元素个数– Mean 平均值、 Variance 方差、 StdDev 标准偏差– Monent 计算数组的平均值、方差、倾斜度、峰值、平均绝对偏差、标准偏差

– Where返回满足指定条件的数组元素下标所组成的一维数组

– Reform 在不改变数组元素的前提下重新生成新的维数的数组

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

常用运算符• 数值运算: ()圆括号 +加 ++ 自加 –减 -- 自减

MOD模 *乘 /除 ^乘方 [ ] 数组或下标 <求最小 >求最大 # 矩阵列乘 ## 矩阵行乘

• 关系运算符: EQ 等于 LT 小于 GT 大于 NE 不等于 LE 小于等于 GE 大于等于

• 逻辑运算: ~逻辑非 &&逻辑与 ||逻辑或 NOT按位非 AND按位与 OR按位或 XOR按位异或

• 赋运算: = ##= *= += -= /= AND= EQ= GE= GT= LE= LT= MOD= NE= OR= XOR= <= >=

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

常用控制语句• Begin – End

• If – Then – Else

• For – Do

• While – Do

• Repeat – Until

• Case X of – else – endcase

• Expr? Expr1:expr2 (条件判断语句 )

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

可视化的 IDL

• IDL 图形系统–直接图形系统和对象图形系统– 坐标系统–窗口系统

• 数据可视化

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

IDL 的图形系统 之直接图形法和对象图形法

• 直接图形法: 创建 2D 图形时常用,如: plot, mapping, contours 。简单、快速,但需反复重画,依赖于当前图形设备;

• 对象图形法: 加速 3D 系统显示,灵活,交互性强,充分控制对象,对象驻留内存,不需反复重画。– 对象管理:生成 Obj_New ,销毁 Obj_Destroy ,有效

性查询 Obj_Valid

– 对象属性:获取 GetProperty ,设置 SetProperty

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

对象图形系统的类和对象• 显示: *Window (* 代表前缀 IDLgr)

• 容器: *Scene, *View, *ViewGroup 。• 模型: *Model ,是容器对象的子对象

,起承上启下作用• 图元: *Image, *Surface, *Axis ,

*Countoure , *Polyline, *Ploygon, *Light, *Volume

• 属性: *Clipboard, *Font, 等无法直接显示的属性

• 利用容器和模型对象的 add 方法构造右图所示的结构,利用 *Window 对象的 draw 方法绘制容器对象的内容。

Graphics Atom

View

Scene

Graphics Atom

Model Model

View

对象图形系统组成结构和调用

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

图形系统之坐标系统

• 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]

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

窗口系统• 建立: 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 的大小和位置、投影方式、裁剪平面和裁剪方式、进行几何变换

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

数据可视化• 绘制线 Plot ,多线 oPlot, 无坐标轴多线 Plots

• 绘制等值轮廓线 Countour

• 绘制网格面 Surface ,阴影曲面 Shade_Surf

• 绘制投影曲线 Plot_3DBox

• 体绘制 IDLgrVolume, xVolume

• 绘制坐标轴 Axis

• 绘制文本 XYOUTS

• 绘制条形图 Bar_Plot

• 交互文本标注 Annotate

• 交互控制 trackball

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

线的绘制• 绘制线 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

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

线的绘制• Plot 有几十个关键字用于控制绘制的属性

,包括线的虚实粗细,图形符号,颜色,位置,裁剪;标题文字及相应字体;坐标轴及其刻度的粗细长短宽窄朝向;所用的坐标系统及其缩放等每一个细节。

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

线的绘制• 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长虚线

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

pSym=-2

pSym=5

• IDL> r=findgen(100)*0.01 IDL> t=4.0*!Pi*rIDL> Plot, r, t, /polar

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

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

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

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

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

Contour 绘制等值轮廓线• Contour 用于绘制坐标系中任意的等值轮廓线。

• Contour 的用法跟 Plot 的用法基本相同,也提供了许多关键字用于设置线、标注、坐标轴等元素的每一个细节。关键字 /OverPlot 的效果与Plot中 /NO_ERASE 具有相同的效果。

• 关键字 Levels=vector 用于设置每层对应的数值。

TVScl, DIST(100)

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

Surface Shade_Surf 绘制网格面• Surface 用于在坐标系中绘制任意的三维网

格。与 Plot 的用法基本相同。 AX|AZ = degree关键字用于设置网格面绕 X|Z轴旋转的角度。 /Lower_ONLY|Upper_ONLY设置只绘制底 |顶面。 Shade=array指定一个二维数组作为表面纹理。

• Shade_Surf与 Surface 用法基本相同,但能绘出带阴影的三维曲面。

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

Surface, Dist(16), $SKIRT=4, LineStyle=4, thick=2

Surface, Dist(16), $ /LEGO

Surface, Dist(16), $ /HORIZONTALSurface, Dist(16)

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

A=dist(300) & shade_surf, A

A=dist(300) & shade_surf, A, $ Shades = BytScl(sin(A))

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

Plot_3DBox 绘制投影曲线• Plot_3DBox适用于绘制三维数据 (z=f(x,y)) 的投影曲线。

– /XY|XZ|YZ_PLANE ,绘制三个投影面。

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

体绘制• 体绘制是指以体素作为基本单元,使用指定的模型和

算法,由体数据直接生成三维虚拟实体影像的过程。• 体绘制可以表现实体的外部形状和内部细节,可以结合面绘制技术,在绘制质量、速度、交互性和信息表现互为补充。

• 体绘制的几种办法– IDLgrVolume 对象– xVolume 过程– iVolume 智能工具

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

体绘制• 通过创建或初始化体绘制类 IDLgrVolume 对象。注意这里输入的数据将被转化成 Byte 类型。– Obj = OBJ_NEW('IDLgrVolume' [, vol0 [, vol1 [, vol2 [, vol3]]]]

[, PROPERTY=value] [, /NO_COPY])

– Result = Obj->[IDLgrVolume::]Init([vol0 [, vol1 [, vol2 [, vol3]]]] [, PROPERTY=value] [, /NO_COPY])

• IDLgrVolume 有多达 36 个属性,如Data0~4, RGB_table0~1, Opacity_table0~1, shader, clip_planes, ambient, X~ZRange, X~ZCoord_conv, ZBuffer 等。

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

体绘制• xVolume :该过程用于交互查看和操作体数据和等值面。• XVOLUME, Vol, [, /BLOCK] [, GROUP=widget_id]

[, /INTERPOLATE] [, /MODAL] [, RENDERER={0 | 1}] [, /REPLACE] [, SCALE=value] [, /TEST] [, XSIZE=pixels] [, YSIZE=pixels]

– Replace: 使用存在的 xVolume替换 vol

– Render: 设置渲染环境,0为 OpenGL(默认), 1为 IDL 本身

– xSize, ySize: 设置绘制窗口的大小– Interpolate: 设置差值方式– Scale: 设置体绘制的比例因子

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

iTool 工具简介• iTool(Intelligent Tools) 是拥有一些列交互功能的

图形化智能工具包。• 将数据分析、可视化任务和高品质图形表现结合

在一起,集成一系列交互功能。• 预建了 iPlot, iSurface, iContour, iVolume, iMap,

iImage, iVector 等创建例程及 IConvertCoord, IRotate, iSave, iZoom 等各种程序例程。

• iTool由 IDL 写成,既可作为独立程序交互使用,也可被其他程序调用或进行二次开发。

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

iVolume 例子• file = FILEPATH('head.dat', SUBDIRECTORY = ['examples', 'data'])

data0 = READ_BINARY(file, DATA_DIMS = [80, 100, 57])

• data1 = BYTARR(80, 100, 57, /NOZERO) + 1Bdata1[0:39, *, 28:56] = 0B

• rgbTable1 = [[BYTARR(256)], [BYTARR(256)], [BYTARR(256)]]rgbTable1[1, *] = [255, 255, 255]opacityTable1 = BYTARR(256)opacityTable1[1] = 255

• IVOLUME, data0, data1, $RGB_TABLE1 = rgbTable1, $OPACITY_TABLE1 = opacityTable1, $/AUTO_RENDER ;在 iVolume中 ,data0和 data1做 alpha混合从而实现切割效果

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

并行的 IDL——FastDL 简介• FastDL是 Tech-X Corporation 公司基于 IDL 开发的一款

软件,它弥补了 IDL 在集群并行运算上面的不足,将 IDL的计算能力发挥到最大。

• 针对并行的特点, FastDL 提供了两个功能:– TaskDL :用于处理各节点间互相独立的任务。– mpiDL :用于处理节点间需要传递消息的任务,与标准MPI 的使

用方法相同,以“ MPIDL_”为函数前缀,比如MPIDL_Send , MPIDL_Receive , MPIDL_AllReduce, MPIDL_Gather, MPIDL_Barrier,MPIDL_Bcast 等。

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

一个简单的 TaskDL

• PRO

• oFarm = OBJ_NEW(‘taskdl’)

• oFarm->open_session

• oFarm->spawn_worker

• oFarm->add_task, ‘print, “Mysimple TaskFarm”’

• oFarm->close_session

• Obj_destroy, oFarm

• END

基本步骤:• 1 、创建 TaskDL 对象• 2 、打开一个会话 session

• 3 、生成 worker

• 4 、添加任务• 5 、结束会话 session

• 6 、退出 TaskDL

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

IDL 使用中的小技巧

• 尽量使用库函数而不是自己写函数:– 丰富的库函数加快开发进度。– 库函数通过严格测试,更健壮。– 库函数内部做了优化,特别是对于矩阵运算,效率提高更明显。– 可以用一个函数完成则不用两个函数,如需同时求Max和Min ,给Max加上min 参数, eg, a=max(Matrix, min=b) ,可同时求出 max和min 。

如用 max,min 等。代替类似 myMax = a gt b?a:b 的代码。

• 多使用指针,指针的运算效率高,但用完后记得及时释放。

编辑 > 内容辅助 或 ALT+/

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

特别提醒• < 和 > :不是逻辑判断,而是取最小和最大,如 a=a<1

• <= 和 >= :不是逻辑判断,而是取最小和最大赋给左边

• EQ=、 LT= , MOD= , NE= , OR=…….

• 三目运算符 ? : 与 C 语言之比较:– int c=4; c = (c<5? c:5); & printf(“%d\n”, c);4

– c=4 & c = (c<5 ? c : 5) & print, c 5IDL中, c<5 的意思是 c与 5当中取最小的,故结果为 4 ,而 IDL中,偶数当 bool 值,为假,故最终结果为 5 。 正确方法: c = (c gt 5 ? c : 5)

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

进一步学习 IDL• 经常用帮助。只需敲个” ? ” 即调出帮助 ,外加一个空格和你想查的关键词,如“ ? Plot” 即到你想查阅的主题 Plot

• 参考书– IDL Programming Technique. David Fanning 大师的经典巨著。从

基础到应用,数据读取到可视化,从直接图形法到对象图形法,从代码格式到编程习惯,对 IDL 作了全方位阐述。http://dfanning.com/(最近上不去 )

– Application Development with IDL. Ronn Kling著 . 适合有一定 IDL基础的使用。 http://www.rlkling.com/

– Power Graphics with IDL. Ronn Kling著 . 着重介绍 2D, 3D 可视化方面的编程

– IDL官方培训教程系列1) Introduction to IDL (初级)2) Intermediate Programming and Analysis in IDL (中级)3) Advanced Topics in IDL (高级)

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

天文学中的 IDL

• 天文学中的 IDL–    The IDL Astronomy User's Library 

   http://idlastro.gsfc.nasa.gov/homepage.html 

–    The SolarSoftWare (SSW) system    http://www.lmsal.com/solarsoft/ 

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

谢谢!