61阅读

山西省2011年初中教师远程全员培训-2011年全国主要省市初中教材版本使用情况

发布时间:2018-05-10 所属栏目:初中语文研修日志

一 : 2011年全国主要省市初中教材版本使用情况

2011年全国主要省市初中教材各版本使用情况

1、深圳初中教材版本使用情况:

初中课本 2011年全国主要省市初中教材版本使用情况

2、全国初中语数外教材各版本的使用情况

初中课本 2011年全国主要省市初中教材版本使用情况

初中课本 2011年全国主要省市初中教材版本使用情况

初中课本 2011年全国主要省市初中教材版本使用情况

初中课本 2011年全国主要省市初中教材版本使用情况

初中课本 2011年全国主要省市初中教材版本使用情况

3、全国初中教材使用的版本

二 : 70ENVI_IDL 培训教程2011

IDL培训教程

Esri中国(北京)有限公司

2011年

1 前言 ........................................................................................................................... 1

1.1 为什么要编程.................................................................................................. 1

1.2 为什么要学IDL .............................................................................................. 1

1.3 IDL的优势 ...................................................................................................... 1

1.4 可利用资源 ..................................................................................................... 2

1.5 说明 ................................................................................................................ 2

2 IDL的使用 ................................................................................................................ 3

2.1 IDL的安装 ...................................................................................................... 3

2.1.1 运行安装 ............................................................................................... 3

2.1.2 安装确认 ............................................................................................... 3

2.1.3 扩展功能选择 ....................................................................................... 4

2.1.4 开始安装 ............................................................................................... 4

2.1.5 安装许可 ............................................................................................... 5

2.2 目录说明 ......................................................................................................... 7

2.3 工作台入门 ..................................................................................................... 7

2.3.1 启动工作台 ........................................................................................... 8

2.3.2 工作空间 ............................................................................................... 9

2.3.3 工程(project) ..................................................................................... 9

2.3.4 文件(file) ........................................................................................ 11

2.3.5 查看器(View) ................................................................................. 15

2.3.6 控制台组件 ......................................................................................... 15

2.3.7 断点及调试 ......................................................................................... 15

2.3.8 IDL的路径管理 ................................................................................... 16

2.4 获取帮助 ....................................................................................................... 17

2.4.1 函数帮助 ............................................................................................. 17

2.4.2 帮助启动 ............................................................................................. 17

2.5 编写IDL程序 ............................................................................................... 21

2.5.1 命令行模式 ......................................................................................... 21

2.5.2 批处理模式 ......................................................................................... 21

2.5.3 编译模式 ............................................................................................. 22

2.5.4 IDL程序 .............................................................................................. 22

2.5.5 过程和函数的区别 .............................................................................. 22

3 IDL语法基础 ........................................................................................................... 24

3.1 变量 .............................................................................................................. 24

3.1.1 局部变量 ............................................................................................. 24

3.1.2 系统变量 ............................................................................................. 27

3.2 数组 .............................................................................................................. 30

3.2.1 概述 .................................................................................................... 30

3.2.2 创建数组 ............................................................................................. 30

3.2.3 数组的存储 ......................................................................................... 31

3.2.4 使用数组 ............................................................................................. 32

3.2.5 运算 .................................................................................................... 33

3.3 字符及字符串................................................................................................ 44

3.3.1 创建字符串和字符串数组 ................................................................... 44

3.3.2 特殊字符 ............................................................................................. 44

3.3.3 部分字符操作函数 .............................................................................. 45

3.4 结构体 .......................................................................................................... 46

3.4.1 概述 .................................................................................................... 46

3.4.2 创建结构体 ......................................................................................... 47

3.4.3 访问结构体 ......................................................................................... 47

3.4.4 结构体操作相关函数........................................................................... 47

3.5 指针 .............................................................................................................. 48

3.5.1 概述 .................................................................................................... 48

3.5.2 创建和访问指针 .................................................................................. 48

3.5.3 空指针 ................................................................................................ 48

3.5.4 指针的内存控制 .................................................................................. 49

3.5.5 指针操作函数 ..................................................................................... 49

3.6 对象 .............................................................................................................. 50

3.6.1 概述 .................................................................................................... 50

3.6.2 对象创建 ............................................................................................. 50

3.6.3 对象使用 ............................................................................................. 50

3.6.4 对象销毁 ............................................................................................. 51

3.6.5 相关函数 ............................................................................................. 51

3.7 链表 .............................................................................................................. 52

3.7.1 概述 .................................................................................................... 52

3.7.2 链表创建 ............................................................................................. 52

3.7.3 链表访问 ............................................................................................. 52

3.7.4 链表销毁 ............................................................................................. 53

3.8 哈希表 .......................................................................................................... 53

3.8.1 概述 .................................................................................................... 53

3.8.2 哈希表创建 ......................................................................................... 53

3.8.3 哈希表访问 ......................................................................................... 53

3.8.4 哈希表添加 ......................................................................................... 54

3.8.5 哈希表销毁 ......................................................................................... 54

3.9 运算符 .......................................................................................................... 54

3.9.1 数学运算符 ......................................................................................... 54

3.9.2 逻辑运算符 ......................................................................................... 55

3.9.3 位运算符 ............................................................................................. 56

3.9.4 关系运算符 ......................................................................................... 56

3.9.5 数组运算符 ......................................................................................... 58

3.9.6 其他运算符 ......................................................................................... 58

3.9.7 运算符的优先级 .................................................................................. 59

3.10 其他符号 ..................................................................................................... 60

3.10.1 $续行符 .............................................................................................. 60

3.10.2 &同行符 ............................................................................................. 60

3.10.3 ;注释符............................................................................................... 60

4 IDL编程基础 ........................................................................................................... 61

4.1 程序控制 ....................................................................................................... 61

4.1.1 循环语句 ............................................................................................. 61

4.1.2 条件语句 ............................................................................................. 62

4.1.3 跳转语句 ............................................................................................. 64

4.2 位置参数及关键字参数 ................................................................................. 64

4.2.1 位置参数 ............................................................................................. 64

4.2.2 关键字参数 ......................................................................................... 65

4.2.3 参数继承 ............................................................................................. 65

4.2.4 参数传递机理 ..................................................................................... 65

4.2.5 相关函数 ............................................................................................. 67

4.3 错误处理 ....................................................................................................... 67

4.3.1 错误处理程序 ..................................................................................... 67

4.3.2 数学错误 ............................................................................................. 68

4.4 调用执行方式................................................................................................ 69

4.4.1 EXECUTE()函数 .................................................................................. 69

4.4.2 CALL_FUNCTION函数 ...................................................................... 69

4.4.3 CALL_PROCEDURE ........................................................................... 69

4.5 编译规则 ....................................................................................................... 69

4.6 IDL高效编程 ................................................................................................. 69

4.6.1 释放内存 ............................................................................................. 70

4.6.2 优化运行时间 ..................................................................................... 70

5 输入与输出 .............................................................................................................. 72

5.1 标准输入输出................................................................................................ 72

5.1.1 输入输出函数 ..................................................................................... 72

5.1.2 格式化输出 ......................................................................................... 72

5.2 文件读写 ....................................................................................................... 73

5.2.1 打开文件 ............................................................................................. 73

5.2.2 读写ASCII码文件 .............................................................................. 74

5.2.3 读写二进制文件 .................................................................................. 76

5.2.4 读写格式文件 ..................................................................................... 80

5.2.5 图像文件信息查询 .............................................................................. 80

5.2.6 JPEG文件操作 .................................................................................... 81

5.2.7 科学数据集 ......................................................................................... 82

6 IDL界面创建与事件处理 ........................................................................................ 86

6.1 iTools界面 ..................................................................................................... 86

6.2 界面创建 ....................................................................................................... 86

6.2.1 单元组件界面 ..................................................................................... 86

6.2.2 复合界面 ............................................................................................. 91

6.2.3 对话框界面 ......................................................................................... 92

6.2.4 功能界面 ............................................................................................. 93

6.3 界面的控制 ................................................................................................... 94

6.3.1 Widget_Control ..................................................................................... 94

6.3.2 Widget_Info .......................................................................................... 94

6.4 事件的处理 ................................................................................................... 94

6.4.1 事件的结构 ......................................................................................... 95

6.4.2 事件的“管家” ...................................................................................... 95

6.4.3 事件的处理 ......................................................................................... 95

7 直接图形法 .............................................................................................................. 96

7.1 概述 .............................................................................................................. 96

7.2 图形显示设备................................................................................................ 96

7.3 显示模式 ....................................................................................................... 96

7.3.1 8位显示模式 ....................................................................................... 96

7.3.2 24位显示模式 ..................................................................................... 98

7.4 系统的字体 .................................................................................................100

7.4.1 矢量字体 ...........................................................................................100

7.4.2 设备字体 ...........................................................................................100

7.4.3 TrueType字体 ....................................................................................101

7.5 坐标系统 .....................................................................................................102

7.6 图形图像显示..............................................................................................102

7.6.1 显示窗口 ...........................................................................................102

7.6.2 绘制曲线 ...........................................................................................103

7.6.3 显示图像 ........................................................................................... 112

7.6.4 绘制曲面 ........................................................................................... 113

7.6.5 相关函数参考 ................................................................................... 114

7.6.6 体数据显示 ....................................................................................... 114

7.7 地图投影 ..................................................................................................... 115

7.7.1 功能描述 ........................................................................................... 115

7.7.2 举例 .................................................................................................. 115 8 IDL图像处理 ......................................................................................................... 116

8.1 图像文件的输入输出 ................................................................................... 116

8.2 图像裁剪 ..................................................................................................... 116

8.3 图像的尺寸修改 .......................................................................................... 116

8.4 图像的位置变换 .......................................................................................... 117

8.5 图形的域变换.............................................................................................. 118

8.6 图像的增强和滤波 ...................................................................................... 118

8.6.1 图像增强 ........................................................................................... 118

8.6.2 滤波 .................................................................................................. 119

8.7 图像平滑 ..................................................................................................... 119

8.7.1 均值平滑 ........................................................................................... 119

8.7.2 中值平滑 ........................................................................................... 119

8.8 图像边界检测.............................................................................................. 119

8.9 图像形态学处理 .......................................................................................... 119

8.9.1 腐蚀和膨胀 .......................................................................................120

8.9.2 开运算 ..............................................................................................120

8.9.3 闭运算 ..............................................................................................120

70ENVI_IDL 培训教程2011_IDL

8.9.4 峰值检测 ...........................................................................................120

8.9.5 分水岭边界检测 ................................................................................120

8.9.6 图像识别 ...........................................................................................120

8.9.7 图像的梯度边界检测.........................................................................120

8.9.8 图像细化 ...........................................................................................121

8.9.9 图像分割 ...........................................................................................121

9 IDL对象图形法 .....................................................................................................122

9.1 对象层次结构..............................................................................................122

9.2 对象基本操作..............................................................................................122

9.2.1 创建对象 ...........................................................................................122

9.2.2 方法调用 ...........................................................................................122

9.2.3 销毁对象 ...........................................................................................122

9.3 IDL图形基本对象 .......................................................................................123

9.3.1 IDLgrWindow对象 .............................................................................123

9.3.2 IDLgrView对象 .................................................................................123

9.3.3 IDLgrModel对象 ...............................................................................125

9.3.4 原子对象 ...........................................................................................125

9.4 二维图形显示..............................................................................................126

9.4.1 线对象 ..............................................................................................126

9.4.2 多边形 ..............................................................................................128

9.4.3 文本 ..................................................................................................128

9.4.4 坐标轴 ..............................................................................................132

9.4.5 曲线 ..................................................................................................132

9.5 三维图形显示..............................................................................................133

9.6 坐标统一 .....................................................................................................133

9.7 对象的交互操作 ..........................................................................................133

9.8 编写类 ........................................................................................................133

9.8.1 编写新对象类 ...................................................................................133

9.8.2 编写继承类 .......................................................................................134

9.9 地图投影 .....................................................................................................135 10 快速可视化 ............................................................................................................136

10.1 概述 ..........................................................................................................136 10.2 可视化函数 ...............................................................................................136

10.2.1 可视化函数 .....................................................................................136

10.3 应用举例 ...................................................................................................137

10.3.1 曲线绘制 .........................................................................................137

10.3.2 地图显示 .........................................................................................137

10.3.3 曲面显示 .........................................................................................138

10.4 控制与参数 ...............................................................................................138 11 智能化工具iTools ..................................................................................................139

11.1 iTools概述 .................................................................................................139 11.2 iTools的使用 ..............................................................................................139

11.2.1 数据导入和导出 ..............................................................................139

11.2.2 数据和对象属性的查看 ...................................................................144

11.2.3 显示操作 .........................................................................................145

11.2.4 添加标注 .........................................................................................146

11.2.5 公共操作 .........................................................................................147

11.2.6 iPlot使用..........................................................................................147

11.2.7 iContour使用 ...................................................................................148

11.2.8 iImage使用 ......................................................................................149

11.2.9 iMap使用 .........................................................................................155

11.2.10 iSurface使用 ..................................................................................159

11.2.11 iVolume使用 ..................................................................................164

11.2.12 iVector使用 ....................................................................................165

11.3 开发 ..........................................................................................................167 12 IDL程序的部署与发布 ..........................................................................................168

12.1 IDL的部署 .................................................................................................168

12.1.1 Runtime许可发布 ............................................................................168

12.1.2 虚拟机免费发布 ..............................................................................168

12.2 IDL的发布 .................................................................................................168

12.2.1 Sav文件 ...........................................................................................168

12.2.2 可执行文件(Windows下的exe) ..................................................169

12.2.3 COM和JAVA ..................................................................................172

13 混合调用 ................................................................................................................173

13.1 IDL功能扩展 .............................................................................................173

13.1.1 直接调用SPAWN ............................................................................173

13.1.2 IDL调用ActiveX .............................................................................173

13.1.3 IDL调用DLL ..................................................................................178

13.1.4 IDL使用DLM .................................................................................180

13.2 其他语言与IDL ........................................................................................185

13.2.1 对象输出助手 ..................................................................................185

13.2.2 IDLDrawWidget组件........................................................................193

13.2.3 COM_IDL_CONNECT .....................................................................195

13.2.4 Callable IDL .....................................................................................198

14 ENVI功能扩展 ......................................................................................................200

14.1 ENVI波段运算和波谱运算 ........................................................................200

14.1.1 波段运算 .........................................................................................200

14.1.2 波谱运算 .........................................................................................203

14.1.3 几个例子 .........................................................................................203

14.2 用户函数 ...................................................................................................204

14.2.1 用户函数介绍 ..................................................................................204

14.2.2 ENVI菜单介绍 ................................................................................204

14.2.3 ENVI组件介绍 ................................................................................205

14.2.4 编写实例 .........................................................................................209

14.3 ENVI的二次开发 .......................................................................................212

14.3.1 二次开发模式 ..................................................................................212

14.3.2

14.3.3

14.3.4

14.3.5

14.3.6

14.3.7

14.3.8

常用关键字及函数 ..........................................................................212 文件管理函数 ..................................................................................213 打开文件函数 ..................................................................................213 获取数据函数 ..................................................................................214 感兴趣区函数 ..................................................................................214 数据保存函数 ..................................................................................214 实例编写 .........................................................................................216

1 前言

1.1 为什么要编程

这是比较古老的话题,一句话概括:让计算机实现自己的想法。因为人总有自己的想法,有些常规的想法前人已经想过,那么现成的软件或程序可用;但如有自己独特的想法,如何在计算机中实现呢?这样就必须得学会编程。

1.2 为什么要学IDL

计算机技术发展到今天,可以说计算机的语言非常多。

但对一些科学家、技术工程师的非专业编程人士来说,并不一定所要实现的所有功能都要从底层写起。他们的编程需要一般就两点:

? 编写各种满足工作需要的小程序,目的是让工作更加自动化、方便化和快捷化,由

于工作的原因一般很少编写大的应用程序。

? 从学习到使用越快越好,不想学了好几个月才刚刚弄明白C++中的类、对象的使用,

需要尽快的从学习语言转到在实践中应用。

对专业编程人士来说,通过IDL与其他语言的混合编程,借用IDL高效、快速的可视化与分析功能,他们可以快速进行应用程序及编写跨平台软件。

1.3 IDL的优势

IDL(Interactive Data Language)交互式数据语言是进行数据分析、可视化表达和应用开发的第四代可视化,它最初的原型为美国航空航天局(NASA)的1个可视化项目,由于其灵活和强大的数据分析和可视化性能,受到NASA的科学家和工程师的喜爱,进而发展成为一门独立的可视化语言。

它的优势主要有以下几个方面:

? 数据访问 —— 灵活的数据输入、输出方式

在科学研究中,将会使用大量不同格式的数据。IDL基本上支持各种数据格式,并提供了大量的数据读写工具,免除数据读写的烦恼,可以将大量的精力放在数据分析上。

? 数据分析 —— 强大的图像处理、信号处理和数据统计分析能力

IDL集成了完善的数据分析、数据统计、图像处理和信号处理软件包。项目应用IDL可以节省大量时间。使用传统的C或者FORTRAN语言需要数天或数周的项目,使用IDL可以在数小时之内完成。

? 数据可视化 —— 先进的图形技术和OpenGL图形加速技术的二维和三维数据交互可视化能力

从简单的二维绘图、多维绘图、体积可视化、图像显示、动画,到利用OpenGL硬件加速功能进行交互式的三维图形浏览,以及支持多处理器快速进行体数据渲染,使用IDL您可以轻松获得丰富的可视化效果。

? 软件开发 —— 强大的多平台支持、跨平台的本地化的用户界面、全新的开发环境、提供了有效的数据管理手段

? 可以运行在Windows、Macintosh和UNIX等多种操作上,从而可以很方

便地进行跨平台开发应用程序。

? IDL提供一套完整的、跨平台的本地化用户界面,可以很方便地进行跨平

台开发,构建符合本地平台风格的用户界面。

? IDL工作台提供了Eclipse的强大支持、全中文界面显示、强大的代码管理

开发和调试工具。快速构建原型应用程序:IDL的是1种解释语言,可以在个别问题上看到立竿见影的结果,同时IDL的降低了设计、编译、测试的周期。

? 集成 —— 灵活的外部语言接口 IDL是1个灵活的、可扩展的用于可视化、分析和开发的工具,能够轻松的与其他的软件工具集成。IDL能够将其他编程语言的代码和函数导入,也可以将IDL实现的功能集成到其他语言编写的应用程序中去。

? 程序共享 —— 灵活多样的程序发布方式和轻松的成果共享

? 你能够很容易快捷的共享IDL应用程序。IDL虚拟机(Virtual Machine),

为IDL用户和软件开发人员提供了IDL应用程序发布的便捷工具。IDL VM适用于所有IDL支持的平台,可以将IDL程序进行跨平台的发布。

1.4 可利用资源

技术支持邮箱:ENVI-IDL@esrichina-bj.cn

技术支持热线:010-65542881-7

ENVI/IDL资料库:ftp://124.205.245.98,匿名登录

ENVI/IDL技术殿堂:

ENVI/IDL论坛社区:

ENVI/IDL视频:http://u.youku.com/ENVIIDL中国

ENVI/IDL微博:

ENVI/IDL腾讯微博:http://t.qq.com/ENVI-IDL

ITT VIS :http://www.ittvis.com/

ESRI中国社区:http://bbs.esrichina-bj.cn/ESRI/index.php]

IDL大师David个人网站:http://www.dfanning.com/

Ronn Kling个人网站:http://www.kilvarock.com/

1.5 说明

教程中各章节的例子程序在源码工作空间[Code]的Chapter[章节号]目录下。

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

2 IDL的使用

2.1 IDL的安装

下面是WindowsXP-32位下的IDL8.0安装及许可配置过程。

2.1.1 运行安装

如光盘未自动运行请双击光盘内的autorun_win.exe,在弹出界面中选择Install 32-bit IDL(如果是网站下载,双击运行idl80win32_setup.exe)

2.1.2 安装确认

图2-1 确认安装

图2-2 接受安装协议

选择安装路径,默认路径是C:\Program Files\ITT

IDL培训教材

图2-3 选择安装路径

2.1.3 扩展功能选择

可选的扩展功能有数据库连接工具包DataMiner、医学影像格式网络访问DICOM Network Services根据具体配置情况和需要选择。一般情况下,默认就可以。

图2-4 扩展功能选择

2.1.4 开始安装

选择所要安装的模块和功能后,开始安装程序。

IDL培训教材

图2-5 安装进度

2.1.5 安装许可

图2-6 许可安装选择

选择“是”,直接导入许可,若选择“否”,可以通过“开始→ENVI4.8→License Wizard”配置许可。

(1)选择“是”,进入许可安装界面

图2-7 许可安装

在弹出程序界面中选择第三项,Install a license you have received,导入从Esri中国(北京)有限公司收到的许可文件。

IDL培训教材

图2-8 许可导入界面

导入许可后点击Finish完成安装。

图2-9 许可安装完成

图2-10 安装完成

IDL培训教材

(2)通过开始>IDL 8.0-Tools-license wizard配置许可

若在配置许可的时候,选择了“否”,则可进入“开始> IDL 8.0>license wizard”配置许可。配置方式与方法(1)一致,点击“Install license you have received”导入许可文件。

2.2 目录说明

IDL8.0如果默认安装,那么安装目录为C:\Program Files\ITT\IDL\IDL80

Bin:IDL的虚拟机及部分功能配置文件;

Example:包括Demo演示程序集官方提供的例子,很多,功能很强;

External:包括IDL功能扩展方面的几个例子;

Help:IDL帮助;

Lib:强大的函数文件库,大部分是源码,可参考学习;

Products:如存在则是对应的ENVI的安装后目录;

Resource:运行及启动的资源库。

2.3 工作台入门

相比以前的IDL版本,IDL8.0在所有的支持的平台下采用了全新的Eclipse框架作为工作台。更新的主要原因是之前的版本在UNIX、LINUX和Macintosh下采用的是X/Motif程序,很多的功能受到限制使得用户很难熟练使用。

图 2-11 IDL6.4的版本界面

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

图2-12 IDL8.0的工作台

2.3.1 启动工作台

点击开始→程序→ENVI 4.X(IDL8.X)→idl,首次运行IDL的时候,会要求用户选择工作空间位置,此次我们需要将工作空间设置在1个默认目录,如“d:\code”。

图2-13 创建工作空间

点击OK后进入工作台环境,见图2-14。

图2-14 IDL工作台

先设置下当前工作台的参数,在工作台的菜单[窗口]→[首选项]下,设置常规→工作空间→文本文件编码,选择GB2312或GBK,以避免汉字出现乱码。

2.3.2 工作空间

IDL下的工作空间是包含1个或多个project的目录,project可以包含IDL的源代码pro文件和相关的资源文件。初次使用IDL的工作台时会提示你创建1个新的工作空间在默认目录(Windows平台是“Documents and Settings”,Macintosh、Solaris和Linux系统平台下是$HOME系统变量里面的路径)。

可以创建多个的工作空间,但是当前IDL编译环境下只能有1个是活动的。每次IDL的工作台启动时它都会显示让你选择哪个工作空间,如禁止这个工作空间选择,在选择界面上勾选“设置为默认工作空间”。如需要切换工作空间,可以在系统菜单下选择“文件”-“切换工作空间”来进行工作空间的切换。

本次培训选择独立建立1个工作空间Trainning,建立1个工程项目然后把相关的代码导入到当前项目中就可以。

2.3.3 工程(project)

IDL的工程项目是使用project来组织和管理IDL源代码及工程资源文件的。每个工程是当前工作空间的路径或工作空间的子路径,源代码放在工程路径下面对工程使用中的文件搜索、书签创建等都会带来很大的方便。

工程是pro和function的集合,通过相互的调用来实现复杂的功能。

2.3.3.1 导入工程

导入已有的工程可以在项目资源管理器中点击右键,菜单中选择“导入”,在导入界面中选择“常规”下的“现有项目到工作空间中”(图2-15)。

图2-15工程导入选项

选择“浏览”按钮可选择导入工程所在文件夹,IDL工作台会自动将目录下所有项目列出来(图2-16)。

图2-16导入工程选项设置

选择导入还可以勾选“将项目复制到工作空间中”,如勾选了该选项则自动将项目内的文件复制到当前工作空间中,不选则使用项目所在文件夹内的文件。

点击完成就可以完成已有的工程项目导入操作(图2-17)。

图2-17导入完成

2.3.3.2 建立新工程

建立1个新的工程是要在菜单中选择“文件”-“新建”-“IDL工程”,在弹出界面(见图2-18)中输入工程的名称,选择工程的位置在当前工作台目录还是其他目录,为了调试等操作方便一般建议新建工程在默认的工作台下。

图2-18新建IDL工程

点击完成,创建的工程在工作空间的项目资源管理器中列出,见图2-19。

图2-19IDL的项目资源管理器

2.3.3.3 工程添加文件

?

菜单选择“文件”-“新建”-“IDL源文件”或在工具栏上选择2.3.3.4 编译工程

? 选择菜单项目→构建项目;

? 在项目资源管理器中该工程目录上点击右键,选择构建项目; ? 快捷键Ctrl+B; 2.3.3.5 运行工程

? ? ? ?

选择菜单运行→运行工程;

在项目资源管理器中该工程目录上点击右键,选择运行工程; 快捷键Ctrl+Shift+F8; 点击工具栏图标

2.3.4 文件(file)

2.3.4.1 打开文件

载入1个文件有2种方式:

? 在菜单中选中文件-打开文件; ? 工具栏按钮中点击。 2.3.4.2 创建文件

? ? ? ?

创建1个新文件有3种方式:

菜单中选择文件-新建-IDL源文件; 或选择文件-新建-其他-IDL源文件; 工具栏按钮中点击。

2.3.4.3 保存文件

? 菜单中选择文件-保存; ? 菜单中选择文件-另存为; ? 菜单中选择文件-全部保存; ? 工具栏按钮中点击。

IDL培训教材

2.3.4.4 编辑工具

? 语法的高亮显示

图2-20

? 自定义显示格式

首选项→IDL→格式器设置

图2-21

? 自定义显示颜色

图2-22

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

? 鼠标悬停帮助

对程序中的函数需要帮助时可以把鼠标指针移到函数位置,系统会弹出该函数的帮助,见图2-23。

图2-23 IDL编辑器中的悬停帮助

? 代码辅助

图2-24

? 模板工具

图2-25

? 运行选择代码

图2-26

? 常用快捷键

图2-27

Ctrl+S 保存文件 Ctrl+N 新建

Ctrl+F8 编译文件 Ctrl+B 构建工程 Alt+/ 开启内容辅助

Ctrl+Shift+F 格式化IDL源代码文件 Ctrl+Shift+U 更改为大写 Ctrl+U 更改为小写

Ctrl+Shift+I 添加程序辅助 2.3.4.5 编译和运行

编译运行有2种方式:

在菜单中选择运行-编译filename.pro然后选择运行filename; 在命令行中输入.Compile filename,然后输入filename就可以;

2.3.5 查看器(View)

可在菜单[窗口]→[显示视图]下进行显示或关闭设置。查看器是idl工作台上面的可以移动的窗口,能够对显示数据、分析和跟命令行进行交互操作,如控制台工具显示了命令行及编译程序时的所有输出信息。见图

2-28

各个查看器可以进行最大、

最小及显示、隐藏设置。

图2-28 IDL工作台的查看器

2.3.6 控制台组件

控制台组件是工作台的信息显示和命令行操作区域(图2-29),因IDL在使用中使用命令行或查看信息输出非常频繁,故该组件经常用到。

图2-29 命令行及命令历史查看器窗口

2.3.7 断点及调试

2.3.7.1 断点

设置断点首先将你把光标放置在你想设置断点的那行,按下Ctr+Shitf+B或双击该行的最左边。

图2-30 断点添加

2.3.7.2 变量查看

当运行1个存在断点的程序时,会在断点处停止。此时为了程序的调试需要,一般要看变量的值是否符合程序的编写要求,可以通过命令行、鼠标悬停显示或变量查看器3种方式来实现。

图2-31程序调试中的变量查看器

2.3.7.3 代码步进和步过

添加断点后,当程序运行到断点位置时会暂停运行,工具栏中[运行]等按钮自动切换为[恢复] 等按钮(图2-32),此时可以点击[停止调试]、[逐语句]、[逐过程]等按钮控制程序运行。

图2-32调试状态时的工具按钮

[停止调试]:点击该按钮可中值调试运行中的程序。

[逐语句]:点击该按钮可逐行语句进行调试,如遇到自定义函数,则进入该函数定义部分逐行语句调试运行。

[逐过程]:点击该按钮可逐过程进行调试,如遇到自定义函数不进入函数,直接1步得到程序结果。

2.3.7.4 获得程序运行时间

2.3.8 IDL的路径管理

IDL的路径管理是非常重要的,IDL中的!Path变量中存在着一系列的路径列表来供系统来寻找pro和sav文件,如果系统解释器遇到了没有编译过的过程名,那么它会在!Path列表的路径中寻找同名的过程或sav,找到后会自动编译该过程并继续运行。如在命令行中运行:

IDL> map_set,/continents

% Compiled module: MAP_SET. % Compiled module: CROSSP.

% Compiled module: MAP_CONTINENTS. % Compiled module: FILEPATH. % Compiled module: PATH_SEP. % Compiled module: REVERSE.

路径自动更新设置见图2-33,在当前工程的属性菜单中。

图2-33

IDL

路径更新

系统的路径管理选项,在菜单的窗口-首选项-IDL-路径中,可分别对IDL路径、DLM路径和帮助路径进行设置,见图2-34。

图2-34 IDL路径管理

2.4 获取帮助

2.4.1 函数帮助

在命令行中输入?+A(A是你所要了解的过程函数或对象)

2.4.2 帮助启动

点击主菜单[帮助]下的[选中项目帮助]和[帮助内容]功能菜单; 工作台编辑代码时按F1或选择1个函数后按F1,则启动帮助;

70ENVI_IDL 培训教程2011_IDL

命令行中输入?回车后启动帮助。

1) 帮助使用

帮助文档分搜索、内容列表和索引三部分内容(图2-35)。

图2.35 帮助文档的搜索

如需要搜索size函数的说明,可以在搜索框中输入size,点击Search按钮,在搜索结果中点击SIZE,右侧可显示出详细信息,并对搜索的词size高亮显示(图2-36)。

图2.36 帮助文档中size搜索结果

点击工具栏中Remove search higghlighting按钮,则图中高亮部分可消除(图2-37)。

图2.37搜索结果的高亮消除

2) 帮助说明

在SIZE函数的帮助说明中,文档上部各部分每项内容均为超链接,可以点击查看详细说明(图2-38)。

图2.38 帮助中函数size具体说明

帮助示例中size函数帮助各部分的含义如下:

? Syntax:调用格式;

? Return Value:返回值;

? Arguments:位置参数;

? Keywords:关键字参数;

? Examples:示例代码;

? Version History:版本历史;

? See Also:其他相关函数。

以SIZE函数为例,帮助中给出的Syntax格式如下:

Result = SIZE( Expression [, /L64] [, /DIMENSIONS | , /FILE_LUN | , /FILE_OFFSET | , /N_DIMENSIONS | , /N_ELEMENTS | , /SNAME, | , /STRUCTURE | , /TNAME | , /TYPE] )

其中:

result为返回值;

size()为函数名;

Expression是位置参数(必选);

其他由[]中都为关键字参数(可选),竖线“|”分隔表示关键字不能同时使用,每个参数的

图2.39 帮助文档的索引显示

点击“Table of Contents”可显示帮助文档主要内容(图2-40)。

图2.40 帮助文档的内容显示

IDL培训教材 2.5 编写IDL程序

2.5.1 命令行模式

命令行方式是IDL的1大特色,为程序编写和调试过程中的功能测试提供了极大地便利。

IDL7.1的Windows版本新增加了命令行,如下图所示。

DotCommand

该系列命令就可以在命令行中进行源代码(pro文件)的编辑、编译、调试及运行等工作,且仅能在命令行下执行。 命 令

.COMPILE .CONTINUE .EDIT .FULL_RESET_SESSION .GO

.OUT

.RESET_SESSION

.RETURN

.RENEW

.RUN

.SKIP

.STEP

.STEPOVER

.TRACE 编译代码 继续执行代码 在编辑器中打开代码以便编辑 编译器完全重置,比.RESET_SESSION要彻底; 运行上次编译过的程序 继续执行代码直到返回; 编译器环境重置; 程序返回;

新建1个pro 编译内存中的代码并立即执行; 跳过1个或多个模块; 调试程序中的移动到下1个模块; 程序运行到另1个节点处; 程序报错时继续执行; 功 能

2.5.2 批处理模式

最简单的程序是1个IDL批处理文件。1个批处理文件由一系列命令组成,这与在IDL命令行敲入的命令完全一样。大多数人用批处理文件是为了自动执行自己在IDL命令行一次又一次敲入的命令。

例如,在创建线画图中我们为了要创建数据,并画出图形,那么可以在命令行中键入如下命令:

IDL培训教材

文本文件中,这文件就是所谓的批处理文件。批处理文件同样只有存储在搜索目录下,IDL才能调用。注意,批处理文件中只需键入命令行中内容即可了,无需PRO、END之类。plotline.pro中的内容是:

curve=Indgen(101)

curve=curve^2

time=FIndGen(101)*(6.0/100)

Plot,time,curve,XTitle='Time Axis',$

YTitle=' Displacement ', Title='Experiment

要执行该文件中的命令,可如下所示:

IDL> @plotline.pro

IDL会严格执行批处理文件中的命令,就像在命令行上键入一样。这意味着有必要用行续行符($)和其他命令行语言来让IDL确认键入的命令。如果在文件中的命令输入错误,那么出现的错误结果和在命令行键入命令出现的错误结果是一样的。

2.5.3 编译模式

跟其他语言的运行模式一致,先编写程序文件,然后进行编译运行。

参考2.2.3

工程,2.2.4文件章节。

2.5.4 IDL程序

IDL程序和批处理文件在很多方面很相似,但也存在着很大的区别。像批处理文件一样,1个主程序也包含一系列命令。但与之不同的是,这些命令必须以END语句结束。

批处理文件和IDL主程序最大的区别就是主程序的命令语句先由IDL编译器编译成程序模块,然后才执行代码。这就是为什么在主程序中可以有多行控制语句的原因。

编写主程序的最大优点是在程序中定义的变量可以在IDL开发环境(IDLDE)中使用,IDL的命令都是在那里键入并被解释的。换句话说,在主程序中定义的变量的作用范围是IDL整个开发环境,因而它可以被IDL其他命令使用。

新建1个pro文件,编写内容如下:

但是更为通常的是,往往希望限定变量的作用范围,以使它们不致于占用大量的内存。在编程过程中,使用大量的全局变量会使内存的使用效率大大降低。为此,大部分应用程序都用过程和函数来编写。

2.5.5 过程和函数的区别

IDL命令要么是过程,要么是函数首先,在函数命令中,位置参数和关键字参数放在一

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

对圆括号中的。在过程命令中,参数和关键字仅排列在1个命令行上。但是,最重要的区别是IDL函数会返回1个值,等号左边的1个变量用于返回该值。这是IDL中函数命令和过程命令根本的区别。

函数命令总是返回1个值,这个数值必须赋给1个变量。函数返回值可能是任1种IDL变量,包括数值、数组或结构。

3 IDL语法基础

3.1 变量

IDL中的变量分为局部变量和系统变量。在IDL程序中,二者的区别在于生命周期不一样,局部变量仅仅在所在的函数或过程中有效,而系统变量则在始终有效或某个程序的周期中有效。

3.1.1 局部变量

3.1.1.1 命名规则

变量名称的最大长度不超过255

个字符,变量的首位只能是字母和下划线,中后部只能是字母、数字、下划线“_”和连接符“$”。如下正确:

abc_3$d ok_24_bit IDL_type variable _day_month_year 如下错误:

abc.cha one%file 4_lists $file 变量相关函数IDL_VALIDNAME

该函数用来检测字符串是否可以作为IDL下的变量,并能够将无效字符转换为“_”并返

3.1.1.2 基本数据类型

跟其他语言比如C不一样,IDL下的变量无需事先申明,也就是可以通过赋值语句来进行变量、数组定义的。

IDL中有十四种基本数据类型。在表3-1中列出了基本数据类型的每个类型的变量的字节大小、创建方式、范围和类型转换函数等。除了数据类型外,1个变量有1个组织结构。有效的组织结构有标量(例如单个数值)、矢量(真正的一维数组)、数组(最高可达八维)和IDL结构(能包含各种数据类型的变量和组织结构,结构中独立的组成部分称为字段)。

IDL培训教材

3.1.1.3 类型转换

IDL下的类型转换函数见表3-2

表3-2 变量类型转换操作及结果

类型转换 字节型 整型 无符号整型 长整型 无符号长整型 64位长整型 无符号64位长整型 浮点型 双精度类型 复数类型 双精度复数类型

X

函数名称 BYTE FIX UINT LONG ULONG LONG64 ULONG64 FLOAT DOUBLE COMPLEX DCOMPLE

示例 操作 BYTE(1.2) FIX(2.5) UINT([5.5,-3]) LONG(65538.5) ULONG([5.5,-3]) LONG64([5.5,-3]) ULONG64([5.5,-3]) FLOAT([5.5,-3]) DOUBLE([5.5,-3]) COMPLEX(1, 2) DCOMPLEX(1, 2)

结果 1B 2 5 65533 65538 5 4294967293 5 -3

5 18446744073709551613 5.50000 -3.00000 5.5000000 -3.0000000 (1.00000, 2.00000) (1.0000000,

2.0000000)

在进行数据的转换中需要注意转换后的数据的界限问题。如下面操作:

3.1.1.4 变量的特点

1) 动态性

IDL在运行过程中能随时修改变量的数据类型和组织结构,这个特性给IDL的变量使用变量num初始化为1个整数,经过数学运算重新赋值,它被动态地改变成浮点数值。这是因为IDL在数学计算中为了保证高精度,将低精度的数据类型提升为高精度的数据类型。当num被再赋值(在等号的左边),它被提升为1个浮点数去保持等号右边计算的精度。

IDL培训教材

2) 整型变量精度

如果不注意,整型变量运算过程中会出现丢失精度的现象,看下面的例子: 也许这个表达式的期望结果是1.6,但结果却是1。这种情况的发生是因为运算式右边的2个数字为整数。当然,找到这个问题的原因并不难,但有时由整型数据导致的问题会更微小,以致于难以发现。

例如:假如想知道IDL图形窗口的比率。窗口的大小(像素点或整数值)被储存在2个系统变量中。会写出如下的IDL代码:

可能需要花掉很长的时间来找为什么比率为零的错误。正确的方法是在进行除法运算时这样处理会后的比率就是1个所期望的浮点数了。

3.1.2 系统变量

IDL系统中系统变量可以分为2种,1类是预定义系统变量,另1种是自定义的系统变量,下面分别进行介绍。

3.1.2.1 预定义系统变量

在这里介绍几组常用的系统变量,在直接图形法(图形只可输出,不能进行交互操作)输出中会常用到。

1) !d 系统变量

提供当前显示设备的信息。

表3-3当前显示设备信息

系统变量名 !d.name !d.n_colors !d.table_size !d.x_size !d.y_size !d.window

变量描述

当前图形设备的名称 当前图形设备使用的颜色数 当前分配的颜色表索引数 当前图形窗口的宽(象素) 当前图形窗口的高(象素)

当前图形窗口的索引号(没创建和打开图形窗口,值为﹣1)

2) !p系统变量

更改默认的画图设置,此类系统变量包含如下系统变量:

系统变量名

变量描述

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

!p.color !p.charsize !p.linestyle !p.multi !p.position !p.psym !p.subtitle !p.title

画图的颜色索引 标签的字符大小 画线时的线性

指定在1个页面上画图的个数 指定在1个页面上画图的位置 在画图时所用的符号样式 副标题(显示在x轴下) 画图的标题

3) !x,!y,!z系统变量

更改在画图上坐标轴的默认属性,此类系统变量包含如下系统变量(如前述系统变量,在前面加!x,!y,!z):

系统变量名 minor range tickbane ticks title

变量描述

在坐标轴上要显示的刻度数 设置坐标轴上显示数值的范围

为每个主刻度设置1个注记数组(一般是字符串)

坐标轴上显示的刻度段数

坐标轴的标题

IDL培训教材

3.1.2.2 自定义系统变量

自定义的系统变量的名字需要!+变量名,是可以修改的系统变量,生命周期为初始化至程序的关闭。在使用中应尽量使之成只读变量而且要避免过多的使用,创建格式为:

3.2 数组

3.2.1 概述

程序设计中,

为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。IDL是面向矩阵的第四代语言,对数组的维数为0~8维,在数组的处理时非常的灵活、高效。在后面详细的讲述中我们会了解到这些。而且注意,IDL中数组下标的顺序先是列标,后是行标。这正好与已习惯的线性代数中的矩阵或行列式相反

3.2.2 创建数组

3.2.2.1 赋值创建

3.2.2.2 函数创建 1.1.1.1.1

创建全零和索引数组

1) 通用函数

可以用IDL的通用函数进行全零数组或索引数组的创建,表2-1是常用的数据类型数组的创建方式。

表3-4不同类型的数组创建方式

数据类型 字节型 16位有符号整型 32位有符号长整型 64位有符号整型 16位无符号整型 32位无符号长整型 64位无符号整型

浮点型 双精度浮点型

复数 双精度复数 字符串 指针

对象

创建全0数组 bytArr() intarr() lonarr() lon64arr() uintarr() ulongarr() ulon64arr() fltarr() dblarr() complexarr()

dcomplexarr() strarr() ptrarr() objarr()

创建索引数组 bindgen() indgen() lindgen() l64indgen() uindgen() ulindgen() ul64indgen() findgen() dindgen() cindgen() dcindgen() sindgen()

MAKE_ARRAY()函数:是在程序运行过程中创建特定的数组。

调用格式为Result = MAKE_ARRAY ( [D1 [, ..., D8]] [, /INDEX] [, DIMENSION = vector] [, /NOZERO] [, SIZE=vector] [, TYPE=type_code] [, VALUE=value] )

1) RANDOMU()函数

RANDOMU函数返回1个或多个均匀分布的浮点型数组,值在[0,1]之间。

Result = RANDOMU( Seed [, D1 [, ..., D8]] [ [, BINOMIAL=[trials, probability]] [, /DOUBLE] [, GA美眉A=integer{>0}] [, /NORMAL] [, POISSON=value]

[, /UNIFORM] | [, /LONG] ] )

通过关键字的控制可以随机生成满足条件的随机数。

2) RANDOMN()函数

RANDOMN函数返回1个或多个正态分布的浮点型数组,这些数的平均为零,标准偏差为1 。

Result = RANDOMN( Seed [, D1 [, ..., D8]] [ [, BINOMIAL=[trials, probability]] [, /DOUBLE] [, GA美眉A=integer{>0}] [, /NORMAL] [, POISSON=value] [, /UNIFORM] | [, /LONG] ] )

通过关键字的控制可以随机生成满足条件的随机数。

3.2.3 数组的存储

IDL中的矢量和数组均是以先行后列顺序存储的(IDL最初是设计用来处理行扫描的卫星数据),下标值的起始值是0。

3.2.3.1 一维数组的存储 数组arr[m]的存储方式:

arr[0] → arr[1] →… → arr[m-1] 3.2.3.2 二维数组的存储

m*n的数组arr[m,n]的存储方式:

arr[0,0] → arr[1,0] → arr[2,0]…arr[m-1,0] → arr[0,1] → arr[1,1] → arr[2,1]…arr[m-1,1] → …

3.2.3.3 三维数组存储

m*n*t的数组arr[m,n,t]的存储方式为 arr[0,0,0] → arr[1,0,0] → … → arr[n-1,0,0] arr[0,1,0] → arr[1,1,0] → … → arr[n-1,1,0]→ … … …

arr[0,m-1,0]→ arr[1,m-1,0]→ … → arr[n-1,m-1,0]

arr[0,0,1] → arr[1,0,1] → … → arr[n-1,0,1] arr[0,1,1] → arr[1,1,1] → … → arr[n-1,1,1] … … …

arr[0,m-1,1]→ arr[1,m-1,1] → … → arr[n-1,m-1,1] … … … … … …

arr[0,0,t-1] → arr[1,0,t-1] → … → arr[n-1,0,t-1] arr[0,1,t-1] → arr[1,1,t-1] → … → arr[n-1,1,t-1] … … …

3.2.4 使用数组

3.2.4.1 下标方式

可以使用下标来存取该数组中的每1个元素。要知道数组元素是以行顺序存储的,所以要获得数组中的第4个元素,可以:

70ENVI_IDL 培训教程2011_IDL

3.2.4.2 向量方式

倘若要存取数组中的第一,二,四和第6个元素,可键入:

3.2.4.3 子数组的提取

要取出1个第10行的矢量,键入:

要提取出1个数据为数组中最后5行的数组,键入:

可以看出子数组是1个5行20列的数组。

3.2.5 运算

3.2.5.1 数组运算

1.1.1.1.3 数组求大(<)、求小(>)和求余

数组与数的运算遵循的基本规律是,数组中的每1个元素与数发生运算关系。例如: 第33页

3.2.5.2 相关函数

1.1.1.1.6 数组信息Size()

Size()函数能够返回数组的结构信息。

调用格式为Result = SIZE(数组, [/KeyWords])。

如果不设置任何的关键字返回信息结构体,设置了关键字则返回对应的值,/N_DIMENSIONS , /N_ELEMENTS ,/DIMENSIONS , /TNAME, /TYPE:依次返回数组的维数、第34页

WHERE()函数返回满足指定条件(即数组表达式)数组元素的下标所组成的一维数组。 调用格式为Result =WHERE(数组表达式 [, count] [, COMPLEMENT=变量1] [, /L64] [, NCOMPLEMENT=变量2])。

关键字:count返回的是符合指定条件的个数;

变量1是不满足条件的数组的下表信息;

1.1.1.1.8 大小调整

1) Reform()函数

Reform()函数可以使数组在元素个数不修改的前提下,改变数组的维数,方便了数组的动态使用。

Rebin()函数可以修改数组的维数大小,将维数调整为D1 [, ..., D8]指定的维数,且大小必须原数据的大小的整数倍,默认抽样算法是双线性内插。

调用格式为Result = REBIN(数组, D1 [, ..., D8] [, /SAMPLE] )

第35页

3) Congrid()函数

Congrid()函数可以调整数组为同维任意大小的数组,默认在处理一维或二维数组时默认是最近邻重采样方式,处理三维数组时默认是双线性内插值。在数据缩小操作时,Rebin做了插值处理,而Congrid仅仅是重新采样。

调用格式为Result =Congrid(数组, X,Y,Z [,关键字] )

INTERP:抽样采用线性内插法;

4) EXPAND

EXPAND用来对二维数组进行大小修改,采用双线性内插算法。

格式为EXPAND, A, Nx, Ny, Result [, FILLVAL=value] [, MAXVAL=value]

第36页

其中A为源数组,Nx、Ny为修改后的维数,Result为修改后的数组,FILLVAL是填充数据,默认为-1;MAXVAL是数据的最大值,大于该值的赋为FILLVAL。

如:

INTERPOLATE ()函数可以调整数组为同维任意大小的数组,并能够任意定位插值点。 调用格式为INTERPOLATE(数组, X [, Y [, Z]] [, 关键字] )

GRID关键字:可以使数组的插值点按网格生成,否则按线性方式生成;

Reverse ()函数可以对数组进行反转。

第37页

70ENVI_IDL 培训教程2011_IDL

调用格式:result =Reverse (数组, index[, 关键字] )

1.1.1.1.10 数组转置Transpose()

Transpose ()函数可以对数组进行反转。 调用格式:result = Transpose (数组, [P] )

1.1.1.1.11 数组旋转

1) Rotate()函数

Rotate()函数可以以90°整倍数的角度对数组进行旋转操作。 调用格式:result = Rotate (数组,direction )

Direction:该关键字为整数,范围0-7,分别代表的图像旋转方式见下表。

Direction

0 1 2 3 4 5 6 7

是否转置 否 否 否 否 是 是 是 是

顺时针旋转角度

0 90° 180° 270° 0 90° 180° 270°

旋转后坐标X1

X0 -Y0 -X0 Y0 Y0 -X0 -Y0 X0

旋转后坐标Y1

Y0 X0 -Y0 -X0

X0 Y0 -X0 -Y0

第38页

Rot ()函数可以以任意的角度对数组进行旋转操作并能进行放大、缩小操作。 调用格式:result = Rot (数组, Angle, [Mag, X0, Y0],[关键字] ) Angle:该关键字数组旋转地角度,单位为度(°)。 Mag:为放大的倍数;

X0:为旋转中心的X坐标,默认为列中心; Y0:为旋转中心的Y坐标,默认为行中心;

PIVOT:该关键字控制旋转后(X0,Y0)点是否仍然在原图像中的位置,不设置则(X0,Y0)Shift()函数是按指定的平移量S1、…、Sn,分别对数组的第1、…、n维进行平移后生成新数组。其中Si为正表示向前平移;Si为负表示向后平移。

例:对数组a [4,3],输出分别按列和行平移2和1后的数组。

第39页

1.1.1.1.13 数组排序Sort()

Sort()函数返回排序后的数组索引。

Uniq ()函数返回数组中唯一元素的索引,该函数只能发现相邻的相同的值,所以使用前须对数组进行排序。

Array_Equal()函数进行数组相同的判断。

调用格式为Result = Array_Equal (数组,/关键字) result:返回0或1。

1.1.1.1.16 个数计算N_Elements()

N_Elements ()函数返回数组元素的个数。 调用格式为Result =N_Elements( 数组)

第40页

IDL培训教材

Max()函数返回满足数组元素的最大值。

调用格式为Result =Max(数组 [,关键字],min =变量1)。 result:返回的是数组的最大值;

1.1.1.1.18 最小值计算Min()

Min()跟Max()函数极其类似,返回满足数组元素的最大值。 调用格式为Result =Min(数组 [,关键字],max =变量1)。 result:返回的是数组的最大值; 变量1:返回的是数组的最小值;

Total()函数返回满足数组元素和,并可以通过关键字进行求和选项的控制。 调用格式为Result =Total(数组 ,Dimension,[,关键字])。 result:返回的是数组的元素求和结果; dimension:数组求和元素的行列控制;

CUMULATIVE:设置该关键字后,返回结果与原数组一致,第i个元素的值为0-i值的和;

double:返回双精度类型结果; integer:返回整型数据结果;

PRESERVE_TYPE:返回结果类型与原数组类型一致,设置该关键字的时候/double等关键字无效。

第41页

IDL培训教材

1.1.1.1.20 乘积计算Product()

Product()函数计算满足数组元素乘积,并可以通过关键字进行求乘积选项的控制。 调用格式为Result =Product(数组 ,Dimension,[,关键字])。

1.1.1.1.21 阶乘计算Factorial()

Factorial ()函数计算满足数组元素阶乘。

调用格式为Result =Factorial (数组, [,关键字])。

关键字-STIRLING:返回结果为斯特令近似,公式参考

第42页

70ENVI_IDL 培训教程2011_IDL

1.1.1.1.22 平均值计算Mean()

Mean ()函数计算数组元素的平均值。

调用格式为Result =Mean (数组, [,关键字])。

1.1.1.1.23 方差计算Variance()

Variance ()函数计算数组元素的方差。

调用格式为Result =Variance (数组, [,关键字])。

1.1.1.1.24 标准差计算Stddev()

Stddev ()函数计算数组元素的方差。

调用格式为Result =Variance (数组, [,

关键字])。

1.1.1.1.25 平均值、方差、倾斜度及频率曲线峰态Moment ()

Moment ()函数计算数组元素的平均值、方差、倾斜度及频率曲线峰态。 调用格式为Result = Moment (数组, [,关键字])。

3.2.5.3 矩阵运算

矩阵是线性代数中的1个概念,其实矩阵也是数组,只是矩阵的元素只能是数,而数组的元素可以是字符等其他类型,所以可以称矩阵为数组的子集。 1.1.1.1.26 矩阵间的运算

遵循以下2个法则:

A#B 表示 A的列乘以B的行: AM?N # BL?M

第43页

AM?N ## BN?L

1.1.1.1.27 矩阵相关函数

1) 矩阵求逆INVERT() 2) 行列数求值DETERM()

3) 矩阵乘积MATRIX_POWER() 4) …

3.3 字符及字符串

3.3.1 创建字符串和字符串数组

3.3.2 特殊字符

ASCII字符中有一些不能打印的字符,这些字符的Byte值是小于32或大于126的。

第44页

3.3.3 部分字符操作函数

字符操作在数据读取、命令行输入,以及各种输入窗口中非常重要。在IDL中对字符的操作主要是通过字符操作函数来进行的。

表3-6字符串操作函数

函数名

STRCMP(str1,str2,N,/FOLD_CASE)

函数描述

对2个字符串进行比较,如果N存在只对前N个进行比较, /FOLD_CASE表示模糊比较

STRCOMPRESS(str1) STREGEX() STRJOIN() STRLEN() STRLOWCASE() STRMATCH(Str1,str2)

STRMID(Str1,po1,Len,REVERSE_OFFSET)

删除字符串str1中的空格 正则表达式 字符串相连接; 返回字符串的长度

将所有的大写字母改写成小写字母

字符串Str1中是否存在Str2,可以使用通配符;

从字符串po1开始取出Len个字符。字符串的第1个字符的位置为0

STRPOS(Exp_Str1,Sea_Str2,Pos,REVERSE

从1个字符串中查找与另外1个字符串完全匹配的起始点所在

第45页

IDL培训教材

_OFFSET,/REVERSE_SEARCH] )

的位置Pos查找点的起始位置,默认值为0,1(如果指定/REVERSE_SEARCH] )指定时,则表示从开始的Pos起,或者从末尾开始的Pos其(如果指定REVERSE_OFFSET )

STRPUT,Des_Var_str,Sou_str,Pos

将Sou_str 字符串插入到变量Des_Var _str之中POS插入点的默认值为0Sou_str不为字符串,则按默认格式自动转化从POS处开始插入Des_Var _str,如果插入值的位置超过了Des_Var的最大长度,则自然截断

STRSPLIT(Str1) STRTRIM(str,Flag)

根据特定的要求拆分字符串str1;

移去字符串中的空格Flag:0(移去右边空格),1(移去左边空格),2(移去两边的空格)

STRUPCASE()

将所有的小写字母改写成大写字母

? 使用举例:

数据Modis的数据AMOD0320040707140331.hdf,A表示上午星TERRA,MOD表示传感器为MODIS,03表示GEOLOCATION数据,20040707表示数据采集日期为2004年7月7日,140331表示该轨数据是在国际标准时间14时03分31秒入境的。

3.4 结构体

3.4.1 概述

结构是标量、数组或结构的集合,也就是1种复合变量,IDL下面的程序很多都是靠结构体进行参数的传递的。结构体可以分为2类:命名结构体和匿名结构体,结构体可以继承。

第46页

IDL培训教材

3.4.2 创建结构体

3.4.2.1 创建命名结构体

等价于

3.4.2.2 创建匿名结构体

3.4.3 访问结构体

创建了结构体后(有名的或是匿名的),其域的类型和大小就将不能再改变了,但可以进行类型转换。

3.4.4 结构体操作相关函数

表3-7结构体操作函数

第47页

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

3.5 指针

3.5.1 概述

从IDL5.0版本开始,IDL下有了指针数据类型。创建指针时,其数据存储于1个堆变量中。堆变量在程序运行期间是全局变量,而且只有通过指针名才能访问。IDL指针是高层次的语言结构,与其他程序语言如C,C++

和FORTRAN的指针等有很大不同,它指向的堆变量是可以动态的分配内存的全局变量,不像C中的指针指向真正的内存地址。

3.5.2 创建和访问指针

指针的创建是由指针创建函数Ptr_New()来创建的,指针的访问则是由* 加指针变量名来

3.5.3 空指针

IDL中的无效指针是不能被反引用的,因为它们不指向任何堆变量,因此也不含任何数据。若需创建起初不含任何数据但后来又需要包含数据的指针,这就要创建1个分配堆变量的指针,方法是在PTR_NEW中使用ALLOCATE_HEAP关键字。

IDL培训教材

效指针。因此pempty可以反引用堆变量的值,而且可以通过pempty为该堆变量赋值。

3.5.4 指针的内存控制

3.5.4.1 内存分配

默认状况下,指针创建函数PTR_NEW将其参数复制到堆变量中,在局部内存中留一份拷贝。若为PTR_NEW设置NO_COPY关键字,则不会在局部内存中保留拷贝。

3.5.4.2 内存释放

指针清除-内存释放只能通过Ptr_Free的方法,Ptr_Free可以释放指针占用的内存。指针无法被引用的堆变量。

3.5.5 指针操作函数

IDL培训教材

3.6 对象

3.6.1 概述

对象是对现实世界实体的模拟,由现实实体的过程或信息牲来定义。1个对象可被认为是1个把数据(属性)和程序 (方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应。这些对象操作称为方法

3.6.2 对象创建

对象创建可以用Obj_New或ObjArr函数来实现。

Obj_New函数用来创建某一特定类的对象,调用格式:

Result = OBJ_NEW( [ObjectClassName [, Arg1...Argn]] )

其中Result为返回的对象实体,ObjClassName为类名,Arg1..Argn为参数。

ObjArr用来创建对象数组。

下面为直接创建对象和使用关键字创建对象代码,根据输出结果体验其不同。

3.6.3 对象使用

对象的使用即使用对象中包含的方法,对象方法包括2类:过程(Procedure)方法和函数(Function)方法,二者的使用格式是不同的。

3.6.3.1 过程方法

调用格式为:Obj.Procedure_Name,Argument,[Optional_Argument]或

IDL培训教材

行绘图显示。

3.6.3.2 函数方法

Result = Obj.Function_Name(Argument,[Optional_Argument])

Result = Obj->Function_Name(Argument,[Optional_Argument])

通过Read()方法可以获得oWindow绘制的内容,即返回1个IDLgrImage对象。

3.6.4 对象销毁

对象销毁用Obj_Destroy,调用格式为:

3.6.5 相关函数

对象操作除了创建、调用方法和销毁外,还有其他几个相关的处理函数。

3.6.5.1 OBJ_CLASS

3.6.5.2 OBJ_HASMETHOD

IDL培训教材

3.6.5.3 OBJ_ISA

3.6.5.4 OBJ_VALID

3.7 链表

3.7.1 概述

链表(list)类型是1个复合的数据类型,可以包含变量、数组、结构体、指针、对象、链表或哈希表等数据类型。链表中的元素是有次序的,可以通过索引进行编辑。

3.7.2 链表创建

链表创建是由链表创建函数list()来创建的。

链表的创建函数调用格式:

Result = LIST( [Value1, Value2, ... Valuen] [, /EXTRACT] [, LENGTH=value]

3.7.3 链表访问

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

3.7.4 链表销毁

3.8 哈希表

3.8.1 概述

哈希表(Hash)类型是1个高效的复合数据类型,可以包含变量、数组、结构体、指针、对象、链表或哈希表等数据类型。哈希表的特点是关键字(Keys)和值对应,并可以通过关键字快速访问,通过哈希表函数进行处理。

3.8.2 哈希表创建

哈希表创建是由哈希表创建函数hash()来创建的。

链表的创建格式:

Result = HASH( [Key1, Value1, Key2, Value2, ... Keyn, Valuen] [, /NO_COPY] )

Result = HASH( Keys, Values )

Result = HASH( Keys )

Result = HASH( Structure )

其中Keys为关键字,Value1

为对应的值。

3.8.3 哈希表访问

哈希表的访问是根据关键字(key)进行的,即result = Hash[Keys]。

IDL培训教材

3.8.4 哈希表添加

3.8.5 哈希表销毁

3.9 运算符

3.9.1 数学运算符

IDL中的数学运算符有加(+)、增运算(++)、减(-

)、减运算(--)、乘(*)、除(/)、幂(^)、取余(mod)、取小(<)和取大(>)。

3.9.1.1 增运算和减运算(++、- -)

3.9.1.2 幂运算(^)

3.9.1.3 取余运算(mod)

IDL培训教材

3.9.1.4 取大和取小运算(> 、<)

3.9.2

逻辑运算符

IDL中逻辑运算有几个:&&, ||, 和 ~。

3.9.2.1 &&

3.9.2.2 ||

3.9.2.3 ~

逻辑的非运算

IDL培训教材

3.9.3 位运算符

IDL中有4个位运算符:AND, NOT, OR, and XOR.。

3.9.3.1 位加运算符(

AND)

0110 ← 6

————————

0100 ← 4

3.9.3.2 位取反运算符(NOT)

3.9.3.3 位或运算符(OR)

1010 ← 10

————————

1111 ← 15

3.9.3.4 位与或运算符(XOR)

0110 ← 5

————————

0110 ← 6

3.9.4 关系运算符

IDL中的关系运算符包括EQ、NE、GE、GT、LE、

LT几个,关系运算符返回的是真“True”或假“False”。

3.9.4.1 EQ(Equal to)

等运算符,如果运算符两边相同则返回真,否则返回假;

3.9.4.2 NE(Not Equal to)

不等运算符,如果运算符两边不等则返回真,否则返回假;

IDL培训教材

3.9.4.3 GE(Greater than or equal to)

3.9.4.4 GT(Greater than)

3.9.4.5 LE(Less than or equal to)

3.9.4.6 LT(Less than)

3.9.4.7 数组关系运算

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

3.9.5 数组运算符

3.9.5.1 #数组乘(列乘行)

3.9.5.2 ##矩阵乘(行乘列)

3.9.6 其他运算符

3.9.6.1 小括号()

3.9.6.2 中括号[]

IDL培训教材

3.9.6.3 条件表达式?:.

该运算符的用法是:value = expr1 ? expr2 : expr3

3.9.6.4 对象方法调用符->

3.9.6.5 指针引用符*

3.9.7 运算符的优先级

3.10 其他符号

3.10.1

$续行符

3.10.2 &同行符

使用了同行符相当于两行代码写在一行之中。

3.10.3 ;注释符

IDL中的注释符为“;”,此符号之后的该行所有代码都将看做是注释,不参与编译运行。

4 IDL编程基础

4.1 程序控制

结构化程序设计是E.W.Dijikstra在1965年提出的。它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用3种基本控制结构构造程序,任何程序都可由顺序、选择、重复3种基本控制结构构造。编写IDL程序也需要对IDL中的相关控制语句进行简单介绍。

4.1.1 循环语句

4.1.1.1 For语句

for 语句每次循环执行1个语句或语句块 for i=v1,v2 do 语句

for i=v1,v2,

inc do 语句 for i=v1,v2,inc do begin 语句 endfor

4.1.1.2 ForEach

自8.0版本开始,IDL下可以直接用FOREACH循环,循环操作更方便。 ForEach的调用格式如下:

FOREACH Element, Variable [, Key] DO 语句 FOREACH Element, Variable [, Key] DO BEGIN

4.1.1.3 While语句 While…Do

当特定的条件为真,while

语句执行单个语句或语句块 while 条件 do 语句 while 条件 do begin 语句

4.1.1.4 Repeat语句 Repeat…Until

REPEAT 语句 UNTIL 条件 或者

REPEAT BEGIN 语句

4.1.2 条件语句

4.1.2.1 IF语句

if 条件 then begin 语句 endif

if

条件 then 语句 else 语句 if 条件 then begin 语句

endif else begin 语句

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

4.1.2.2 CASE语句

case语句根据1个标量的表达式来选择某个语句或语句块运行。 case 表达式 of 情况1: 情况2:语句 情况3:begin 语句 end else: 语句 endcase

当表达式和其中的某个情况匹配,相应的语句被执行, case语句结束,如果没有匹配的情况,那么执行else下的语句,如果没有else语句,将会发生错误,建议在case 语句中都加上else。

4.1.2.3 SWITCH语句

4.1.3 跳转语句

4.1.3.1 Break

break提供了1个从循环中(FOR,WHILE,REPEAT)或CASE

、SWITCH等状态中快

4.1.3.2 Continue

continue提供了1个从循环中(FOR, WHILE,和REPEAT)中进入下1步循环的方法。

4.1.3.3

Goto

4.2 位置参数及关键字参数

IDL中的过程和函数接受2种参数:位置参数和关键字参数。

4.2.1 位置参数

在调用的时候用test_parameters, ‘par’,’par2’,对1个特定的过程或函数而言它的位置参数有一定的顺序,位置参数也不一定是必须的,有一些是可选的。位置参数的个数可以用函数N_Params()来检验。

IDL> test_parameters

PARAM1 UNDEFINED = <Undefined> PARAM2 UNDEFINED = <Undefined> 0

IDL> test_parameters,'asdf',3

PARAM1 STRING = 'asdf' PARAM2 INT = 3

2

4.2.2 关键字参数

关键字参数是IDL中1个可选的变量或表达式。关键字参数传入的可以是1个默认是其他地方定义好的参数或1个Bool的标志,输出关键字参数用来返回所需要的值。关键字参数没有顺序,它可以放在过程或函数的任意位置。

检测关键字参数keyword_set()用于检测布尔关键字,如果自变量定义则返回真。见下面例子:

在命令行中输入

IDL> test_keywords,'3',keyword1 =1,/swap INPUT STRING = '3'

KEYWORD1

INT = 1 KEYWORD2

UNDEFINED = <Undefined> 1 Swap

4.2.3 参数继承

4.2.4 参数传递机理

参数传递包括2种,值传递和地址传递,理解参数传递的机理很重要,先看1个例子:

15 ------------ 33 ------------

0 3 6 9 12 ------------

0 1 2 3 4 ------------

这里的调用出现不同结果的原因是分别进行了地址传递和值传递,具体应用见表。

表 4-1地址传递和值传递列表

地址传递 变量 数组 结构体

_EXTRA

值传递 常数 数组的索引 结构体成员 系统变量 表达式 _REF_EXTRA

IDL培训教材

4.2.5 相关函数

表 4-2参数相关函数列表

函数 N_PARAMS() N_ELEMENTS() KEYWORD_SET() ARG_PRESENTS()

作用

返回参数个数(不包括关键字参数) 返回变量元素个数 是否关键字存在 是否存在传递的引用参数

程序运行结果如下:

N_PARAMS(): 1 N_ELEMENTS(): 10 KEYWORD_SET(): 0 ARG_PRESENT 0 N_PARAMS(): 2 N_ELEMENTS(): 10 KEYWORD_SET(): 1 ARG_PRESENT 0 N_PARAMS(): 2 N_ELEMENTS(): 10 KEYWORD_SET(): 1 ARG_PRESENT 0

4.3 错误处理

IDL把错误分成3种类别:输入/输出错误、数学错误和其他错误。

4.3.1 错误处理程序

CATCH、ON_ERROE和ON_IOERROR。CATCH它会告诉IDL捕获发生在过程或函数

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

中的错误并允许程序员对其作出处理。过程或函数中出错时,IDL首先在过程或函数中查找错误的发生位置,这就是1个“CATCH”。若未发现任何“CATCH”

,IDL就会返回至调用过程或函数中查找“CATCH”。IDL会依调用顺序向上查找直到主程序级别,这是IDL会停止查找并打印出调用序列。错误处理流程见图4-1。

图4-1 IDL中的错误处理流程

4.3.2 数学错误

IDL检测出的数学错误,如除数为零,溢出,试图对负数取对数等运算是依赖于硬件和操作系统,故有些系统比其它的系统有更多的错误。操作系统上执行的IEEE浮点标准, 当IDL编译器检测到系统的浮点数错误时它会用NaN和Infinity来取代。所有平台上都对会整数除以零进行检测。

IDL> PRINT, !VALUES.F_NAN

NaN

使用FINITE函数检测数据是否有效,如: IDL> print,FINITE(!VALUES.F_NAN) 0

IDL> print,FINITE(1) 1

用IDL现有的函数进行处理的时候,如有可能出现NaN的错误,在使用时可添加NaN关键字,见浮点错误例子程序。

IDL培训教材

4.4 调用执行方式

4.4.1 EXECUTE()函数

EXECUTE()函数的功能是通过调用字符串中的命令来实现命令执行的功能,可以看下

4.4.2 CALL_FUNCTION函数

4.4.3 CALL_PROCEDURE

4.5 编译规则

COMPILE_OPT允许你对idl编译器的默认编译规则进行稍微修改,详细可参考IDL的帮助文档。常添加的关键字有DEFINT32、STRICTARR 等。

COMPILE_OPT DEFINT32 –把默认IDL的整型数据16位修改为32位;

COMPILE_OPT STRICTARR-默认数组元素的选取用中括号,不用小括号,避免与函数调用的混淆。

常用COMPILE_OPT IDL2,该语句的功能则相当于同时使用COMPILE_OPT DEFINT32

4.6 IDL高效编程

IDL程序中有下面几个方法来使得程序高效,也就是程序运行时花费的时间短、占用的

IDL培训教材

内存少。

4.6.1 释放内存

运算过程中变量占用内存的处理可以用函数DELVAR及Temporary()。DELVAR可以直接删除数组并释放内存,但只能在主程序中使用。Temporary()函数可以应用在变量、数组、对第一行创建浮点型数组,数组a占用了500*500*4=1Million的

Bytes,第二行代码运行时系统需要开辟出另1Million Bytes的字节来做加运算,也就是说这两行代码执行完后系统分配了2MillionBytes的字节。

所以在程序中,a = a+1.0最好用a = temporary(a) + 1.0的方式。

4.6.2 优化运行时间

在IDL语言下,应该避免循环的使用,下面的time_test例子对for循环、while循环和系统函数做了1个对比时间测试。

IDL培训教材

for time: 0.71900010 while time: 1.1099999 function time: 0.030999899

IDL培训教材

5 输入与输出

IDL中输入输出的基本原则是:“只要有数据,即可将其读进IDL”,IDL对数据的格式没有要求,任何数据格式都能自由的解析,这使得IDL成为目前功能最强、最灵活的科学可视化分析语言。

5.1 标准输入输出

5.1.1 输入输出函数

IDL中读写ASCII码文本是很重要的一部分。标准输入是键盘输入,标准输出指的是屏幕输出显示。表5-1中列出了标准输入输出的几个函数。

表 5-1标准输入输出函数

函数名称 Print Read Reads String()

作用

标准输出写出格式化数据 标准输入读入格式化数据 从字符串中读取格式化数据 格式化输出的字符串数据

5.1.2 格式化输出

数据的格式化输出是按照设计的格式进行输出。IDL支持“%”和“\”。 标准的输入输出时可以进行格式的自由控制,格式化控制的格式为:[n]FC[+][-][width],各个字段代表的含义见表5-2

表 5-2格式化控制含义

格式化字符 n FC + - width

含义

代表格式控制符的有效次数,默认为1次。 格式控制符,详细说明见表5-3。

在输出的整数前面加“+”符号,默认正数前不输出,负数前有“-”。 控制字符串和数字的输出为左对齐,默认输出是右对齐。 输出字符的宽度,对特定的宽度部分可补0或空格。

表5-3格式化控制代码含义

格式代码

A : $ I O Z F

字符

若没有有效的变量,则终止输入输出

使下1个输出数据输出到该输出数据的所在行的后面(仅用于输出) 十进制整数 八进制整数 十六进制整数 输出单精度浮点数

格式含义

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

D

E

[n]G[w.d] or [n]G[w.dEe]

T

TL

TR

/ 输出双精度浮点数 以指数形式(科学格式)输出浮点数 根据数据大小自动选择科学格式或者F、D格式输出 绝对位置输出变量的值 从当前位置向左移动输出变量的值 从当前位置向右移动输出变量的值 换行输出

如下面的例子:

5.2 文件读写

5.2.1 打开文件

IDL从磁盘上的文件读写数据,必须首先把1个逻辑设备号连接到1个特定的文件,然后进行文件操作如打开、关闭和读取等。IDL中的逻辑设备号范围是-2—128,其中1--99是可以用户任意指定的,100-128是根据get_lun和free_lun来管理的,其他是特殊函数专用的。

IDL培训教材

文件操作相关的函数见表5-4。

5.2.2 读写ASCII码文件

IDL在读写该文件分为有2种格式化文件:自由文件格式和确定的文件格式。

自由文件格式是用逗号或空白(tab键和空格键)分开文件中的每个元素的ASCII文件。确定的格式文件是用格式说明按照给定的规范进行编排的。二者相比后者比前者更正规一些。

5.2.2.1 读写自由文件格式

IDL下用ReadF从文件中读入自由格式数据,Printf写入自由格式数据到文件中。IDL中读写自由格式文件遵循下面的几个规则:

1) 如果读入到字符串变量中,那么,在当前行剩下的所有字符都将读入该变量中。

2) 输入数据必须用逗号或空白分隔(空格键或tab键)。

3) 输入通过数字变量完成。数组和结构都可作为数字变量的集合。

4) 如果当前读入行是空的,并且还有变量要求输入,则读取另一行。

5) 如果当前读入行不是空的,但是没有变量要求输入,则忽略此行剩下的数。

6) 尽量将数据转换为变量所希望的数据类型。

7) 复数数据必须有实数和虚数两部分,用逗号分隔,并用括号括起来。

5.2.2.2 读写确定的文件格式

读写确定文件格式可同样用ReadF和PrintF命令,它们刚才已用于自由格式文件,但现在文件格式已由Format关键字明确声明。(在读写标准输入和输出时,也可将Format关键字用于Read 和Print命令)。

1.1.1.1.28 通用的格式说明符

通用格式说明符Format关键字的语法在5.1.1章节中有详细的描述,这里的用法跟该章节一致。

1.1.1.1.29 逗号分隔的确定格式

有时数据文件必须用确定格式书写,以方便它们被其它软件读取。用逗号分隔的数据文件就是这类文件的典型代表。

Format=’(F10.3, A1, 2x, F10.3, A1, 2x, F10.3)’

1.1.1.1.30

字符串中读取格式数据

ReadS是1个有用的IDL命令,可以从字符串变量而不是从文件中为自由格式或确定格式读取数据。ReadS运用了和命令Read和ReadF相同的读取格式数据规则。也就是说,使用ReadS 就象从数据文件中读取一样,所不同的是所读的对象是1个字符串变量。

当大量信息需从文件头部读取时,此命令特别有用。例如,假设ASCII 数据文件的第一行说明了数据文件的行数和列数,此文件头可以从文件中读取,并且可创建1个大小正确的5.2.2.3 向导式读取函数

IDL中提供了ASCII_TEMPLATE,QUERY_ASCII和READ_ASCII函数。

5.2.2.4 综合应用举例

针对上面介绍的3种读取方式,对同1个数据采用了不同的读取方式进行了读取,附

代码。

5.2.3 读写二进制文件

二进制数据文件基本是以一长串的二进制字节存在文件中,这些字节的含义(也就是说,这些字节如何翻译成特定数据类型和结构的)很难描述的,除非刚开始就知道文件写入的是什么内容。二进制数据比格式化数据紧凑得多,经常用于存储大数据文件。有2种命令读写二进制数据,它们与前面用来读取格式数据文件的ReadF和 Print 命令等效。它们是ReadU和WriteU命令。

要读取非格式数据文件,简单定义变量,打开文件读取,并用ReadU命令将字节1个接1个地读入变量中。如果给定了变量的数据类型和组织结构,每个变量按其要求从文件中读出相应的字节数。

5.2.3.1 读写常规二进制文件

IDL培训教材

5.2.3.2 读写带头文件的二进制文件

当数据中含有特定的头文件时,读取的时候有时希望直接跳过,此时需要用Point_Lun函数,该函数支持对文件进行字节定位。

调用格式为POINT_LUN, Unit, Position,其中Unit是文件打开后的lun,Position一般是需要跳转的字节数。

5.2.3.3 关联变量读写二进制文件

IDL关联变量是把1个IDL数组或结构变量的组织结构映射到数据文件的内容上。文件被看作是这些重复单元的1个数组。 第1个单元的索引号是0,第二个单元的索引号1等等。关联变量不象常规变量那样将整个数据组都存储在内存里。而是当一关联变量被引用时,IDL仅对需要的部分数据执行相关的输入或输出请求,这部分数据就是要读入内存的。

有的时候大型的二进制数据文件都由一系列的重复单元组成。1个IDL关联变量通常是处理这种数据形式的最好方式(有的时候是唯一的方式)。

关联变量有下面的几个优点:

? 当该变量被用于表达式时,才产生文件的输入和输出动作。不需要单独

的读或写命令。

? 数据集的大小不受内存容量的限制,因为有时它可处理大型的数据集。

对于物理存储器来说是太大的数据,通过把此数据分成块就能很容易地处理。

? 不必提前声明用于映射该数据的数组或结构的数量。

? 关联变量是效率最高的I/O形式。

5.2.3.4 向导式读取函数

READ_BINARY和BINARY_TEMPLATE

Read_Binary是直接读取二进制文件的函数,用法可参考下面的语句:

vHeadData = READ_BINARY(FILEPATH('head.dat', $ SUBDIRECTORY=['examples', 'data']), DATA_DIMS=[80,100,57])IVOLUME, vHeadData

5.2.3.5 综合应用举例

读FY-2的9210AWX文件,FY-2C的卫星黑体亮度温度产品,下面的格式说明是参考国家卫星气候中心的《风云二号C卫星业务产品使用手册》。

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

IDL培训教材

IDL培训教材

5.2.4 读写格式文件

IDL可以读写许多常用文件格式,这些文件格式已在表5-5中列出。

表5-5 IDL支持读写的文件格式

文件格式 BMP CDF DICOM DXF GIF HDF HDF-EOS Interfile JPEG netCDF PICT PBM/PPM PNG PostScript Sun Rasterfiles

SYLK TIFF/GeoTIFF

WAVE X11-bitmap XWD GRIB1/GRIB2

Read_BMP 参考CDF库 IDLffDICOM对象 IDLffDXF对象 Read_GIF 参考HDF库 参考HDF库 Read_Interfile Read_JPEG 参考netCDF库 Read_PICT Read_PPM Read_PNG 无 Read_SRF Read_SYLK Read_TIFF Read_WAVE Read_X11_Bitmap Read_XWD 参考GRIB库

读函数

Write_BMP 参考CDF库 IDLffDICOM对象 IDLffDXF对象 Write_GIF 参考HDF库 参考HDF库 无 Write_JPEG 参考netCDF库 Write_PICT Write_PPM Write_PNG PS或打印设备 Write_SRF Write_SYLK Write_TIFF Write_WAVE 无 无

参考GRIB库

写函数

5.2.5 图像文件信息查询

IDL中提供了常用图像文件格式的查询程序。这些程序允许在没有真正读取其数据的情况下,即可查询图像文件,并可以存取随着图像数据文件一起存储在文件里的元数据(关于数据的一些信息)。

下面是新的图像查询程序列表:

? Query_BMP ? Query_DICOM ? Query_GIF ? Query_JPEG ? Query_PICT ? Query_PNG ? Query_PPM ? Query_SRF ? Query_TIFF

所有这些查询命令都是以同样的方式工作。它们都是返回0或1的函数,通过返回值确定是否成功地(返回值为1)读取了图像文件里的元数据。如果它们成功地读取了文件,将保存文件信息的IDL结构变量作为输出命令返回给用户。用户通过存取这个结构里面的字段从而获取文件的有关信息。

5.2.6 JPEG文件操作

5.2.6.1 JPEG读操作

用Read_JPEG命令即可读取并显示1个JPEG文件。

假设正在8位显示器上显示24位的图像,应该使用TV命令里的关键字True: IDL> TV, thisimage, true=1 5.2.6.2 JPEG写操作

对图形窗口进行拍照可以用TVRD函数。 IDL> image3D=TVRD(true=1)

最后,用Write_JPEG命令,将图像用输出为JPEG文件,运行命令: IDL> Write_JPEG, ‘test.jpg’, image3D, true=1, quality=75 5.2.6.3 举例

5.2.7 科学数据集

5.2.7.1 HDF格式

HDF有2种基本对象—组(Group)和数据集(Dataset),同时也有一些其他的辅助对象,如数据类型(Datatype)、数据空间(Dataspace)、属性(Attribute)。HDF组织结构有些类似于Windows 中的文件结构,组相当于1个文件夹,数据集相当于1个数据文件,文件夹里面可以包含数据文件,也可以包含其他的组对象,这样嵌套下去,就形成了1个复杂的数据对象,这点正好的对应于HDF逻辑结构的层次性。

HDF文件的操作 读取-编辑

HDF_OPEN: 这个过程首先要打开HDF文件,通过create关键字来确定是读取文件还是创建1个新的文件。

HDF_DFAN_ADDFDS: 添加文件描述;Optionally, add a file description. HDF_DFAN_ADDFID: 添加文件Optionally, add a file annotation. 对HDF 文件添加数据用到的过程:

添加8位图像,用HDF_DFR8_ADDIMAGE 或DFR8_PUTIMAGE; 添加颜色表,用HDF_DFP_ADDPAL或HDF_DFP_PUTPAL;

添加24位图像,用HDF_DF24_ADDIMAGE 或HDF_DF24_PUTIMAGE; 添加多数据时,需要用下面的命令:

HDF_SD_CREATE 或 HDF_SD_SELECT 建立1个SDS或选择1个现有的SDS; HDF_SD_DIMSET 设置维数信息;

HDF_SD_ATTRSET 设置属性信息; HDF_SD_SETINFO 添加1个数据信息; HDF_SD_ADDDATA 添加数据;

HDF_SD_SETEXTFILE移动数据到外部存储文件; HDF_SD_ENDACCESS 结束读取SDS; 添加数据表(vData)时需要用下面的命令:

HDF_VD_ATTACH 获取1个数据表的标识;to get a Vdata identifier. HDF_VD_SETINFO写入数据表的信息;

HDF_VD_FDEFINE to prepare non-trivial fields (optional). HDF_VD_WRITE 写入数据表;

将数据表(Vdata)添加到数据组合(Vgroup)中时,用下面的命令: HDF_VG_ATTACH to get a Vgroup identifier.

HDF_VG_SETINFO to set the Vgroup name and class (optional). HDF_VG_INSERT to add the Vdata to a Vgroup. HDF_VG_DETACH to close the Vgroup. HDF_CLOSE to close the file

例子读取Modis数据,Test_HDF.pro

5.2.7.2 GRIB格式

1) 格式介绍

随着气象延伸服务的扩展,用户得到的气象产品越来越多,相当部分是以GRIB码提供的。GRIB 码 ( GRIdded Binary,FM 92 GRIB)也是与计算机硬件无关的压缩二进制代码,有利于资料的存储和快速传输,气象中应用它主要用来表示数值天气分析和预报的格点资料。

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

现行的 GRIB 码有 GRIB 版本 1 和 GRIB版本 2 2种格式。

IDL自版本8.1起在Linux和OS X系统下提供了对GRIB1和GRIB2的完整支持,相关函数参考下标。

GRIB数据读写函数表

函数名称

GRIB_CLONE GRIB_COUNT GRIB_FIND_NEAREST GRIB_GET

GRIB_GET_API_VERSION GRIB_GET_ARRAY

GRIB_GET_DOUBLE_ELEMENTS GRIB_GET_MESSAGE_SIZE GRIB_GET_NATIVE_TYPE GRIB_GET_SIZE GRIB_GET_VALUES GRIB_GRIBEX_MODE GRIB_GTS_HEADER GRIB_INDEX_GET GRIB_INDEX_GET_SIZE GRIB_INDEX_NEW_FROM_FILE GRIB_INDEX_READ GRIB_INDEX_RELEASE GRIB_INDEX_SELECT GRIB_IS_MISSING GRIB_ITERATOR_DELETE GRIB_ITERATOR_NEW GRIB_ITERATOR_NEXT

GRIB_KEYS_ITERATOR_DELETE GRIB_KEYS_ITERATOR_GET_NAME GRIB_KEYS_ITERATOR_NEW GRIB_KEYS_ITERATOR_NEXT GRIB_KEYS_ITERATOR_REWIND GRIB_MULTI_NEW GRIB_MULTI_RELEASE GRIB_MULTI_SUPPORT GRIB_NEW_FROM_FILE GRIB_NEW_FROM_INDEX GRIB_NEW_FROM_SAMPLES GRIB_OPEN GRIB_RELEASE GRIB_SET_MISSING

功能描述

“克隆”现有的grib文件内容 返回文件中的信息数 查找最近的4个经纬度点 从关键字/值数据集中获取值 当前GRIB函数的版本 读取关键字对应的数组 关键字的数量 信息的字节大小

获取关键字的类型代码(1:字节;3:整型;5:双精度;7:字符串) 关键字的个数

获取值数组,等同于GRIB_GET_ARRAY加values关键字 GRIB的兼容模式 是否启动GTS的header 获取索引对应的关键字 获取索引关键字个数 文件添加索引 读取文件中的索引

关闭GRIB指针释放占用的内存 根据关键字和值提取信息 检测关键字是否存在

关闭所有iterator指针释放内存 创建新的iterator

从当前iterator获得下1个 删除iterator 获取iterator的名字 创建iterator 下1个iterator 前1个iterator 创建新的多字段集 多字段集删除并释放内存 多字段支持模式开关

文件ID中获取GRID文件指针 创建新文件指针

基于../resource/grib/share/samples下的模版创建grib 打开grib文件获取指针 销毁grid句柄并清空内存 设置无效字符串

2) GRIB读写

6 IDL界面创建与事件处理

IDL的界面分下面几种: (1) IDL命令行界面

(2) 智能化工具iTools界面 (3) 常规组件界面 (4) 定制iTools界面

6.1 iTools界面

可见10章。

6.2 界面创建

IDL下的界面创建是比较特殊的,由于IDL7的Eclipse更新,当前版本下没有了鼠标拖拽创建GUI的工具,只能依靠代码创建。

6.2.1 单元组件界面

6.2.1.1 Base组件(容器界面)

IDL下的界面有很多的base,可以理解为容器,而且很多的时候一些组件的排列如果用了base会很方便。多层的结构一般如下图

1) 格式:

Result = WIDGET_BASE( [Parent] [, /Keywords)

2)

常用关键字

(1) Floating

浮动的窗口,类似导航图,仅浮动在窗口上方;

(2) Model

是否为模式框,在该窗口关闭前无法进行其他操作;

(3) mBar

是否创建菜单栏,返回菜单栏的ID;

(4) TLB_FRAME_ATTR

创建的窗口类型,见表格,类型的值可累加,如3则表示1+2。

IDL培训教材

是否返回关闭事件,可用TAG_NAMES(event, /STRUCTURE_NAME) 是否为 'WIDGET_KILL_REQUEST'来判断。

4) 参考例子Test_widget_base

6.2.1.2 按钮组件(widget_button)

Widget_button创建具体包括:触发按钮、位图按钮(主要用于创建工具栏或者图形按钮)、单选按钮、复选按钮、标准菜单系统、按钮菜单系统和快捷菜单系统。

1) 格式:

Result = WIDGET_Button( [Parent] [, /Keywords)

2) 常用关键字

(1) TOOLTIP

显示的文字,如下图。

(2) Value

a. 字符串,显示button上的文字;

b. n x m 字节型数组,显示成黑白图片;

c. n x m x 3字节型数组,显示成24位真彩色图片;

d. Bitmap

控制是否显示图标型

button

,如果设置了

Bitmap,则value可以直

接设置为bmp文件名。

(3) Menu

创建菜单选项;

(4) SEPARATOR 创建分割线;

(5) 复选或单选

Base的EXCLUSIVE和NONEXCLUSIVE关键字。

3) 参考例子Test_widget_button

6.2.1.3 标签组件(widget_Label) widget_label用来创建标签组件。

1) 格式:

Result = WIDGET_LABEL( [Parent] [, /Keywords)

2) 常用关键字

(1) value

70ENVI_IDL 培训教程2011_IDL

其值为显示的字符串;

换行的话字符串中间用String(13b)连接下就可以。 3) 参考例子Test_widget_label

6.2.1.4 显示组件(widget_draw)

widget_draw用来创建draw组件,draw组件是IDL下的矩形的标准图像区域,该组件通过关键字控制创建直接图形法窗口还是对象图形法窗口。

1) 格式:

Result = WIDGET_DRAW( [Parent] [, /Keywords)

2) 常用关键字

(1) COLOR_MODEL

对象图形法下色彩模式控制,如设置为1则使用索引颜色,否则使用RGB颜色; (2) GRAPHICS_LEVEL

直接图形法和对象图形法的选择,如设置为2则为对象图形法,系统默认或设置为1则为直接图形法窗口。 (3) EXPOSE_EVENTS

是否有“暴露”事件,也就是如果当前窗口被其他窗口遮挡后再显示的时候是否需要产生事件,与RETAIN结合加快显示速度。 (4) Retain 0:不进行后备存储器操作(处理器(processor)暂时不需要的程序和数据)备份; 1:操作系统进行后备存储器操作; 2:IDL进行后备存储器操作; (5) WHEEL_EVENTS

产生鼠标事件关键字,如进行滚轮放大缩小操作,需要添加该关键字。 还有KEYBOARD_EVENTS等,在事件中以EVENT.TYPE来区别。

3) 参考例子Test_widget_draw

6.2.1.5 属性列表组件(WIDGET_PROPERTYSHEET)

widget_propertysheet用来创建属性信息组件,该组件通过关键字来进行信息的修改,用在对象法中。

1) 格式:

Result = WIDGET_PROPERTYSHEET ( [Parent] [, /Keywords) 2) 常用关键字

(1) Value

VALUE是单个对象或对象集,属性的创建或修改在对象的方法中实现。

6.2.1.6 列表组件(WIDGET_LIST)

widget_list

用来创建属列表选择组件,该组件通过关键字来进行列表的选取。

1) 格式:

Result = WIDGET_LIST ( [Parent] [, /Keywords)

2) 常用关键字

(1) Value

是列表中的元素值。

备注:通过INDEX来判断当前选择的是哪1个;

3) 参考例子Test_widget_list

6.2.1.7 下拉列表组件(WIDGET_DROPLIST)

跟widget_list组件类似,widget_droplist用来创建属下拉列表,该组件则是通过关键字来进行列表的选取。

1) 格式:

Result = WIDGET_DROPLIST ( [Parent] [, /Keywords) 2) 常用关键字

(1) Value

是下拉列表中的元素值。

备注:通过INDEX来判断当前选择的是哪1个;

3) 参考例子Test_widget_droplist

6.2.1.8 滑动条组件(widget_slider)

widget_slider用来创建滑动条组件,交互的获取或者设置指定范围内的1个整数值,该组件则是通过关键字来进行列表的选取。

1) 格式:

Result = WIDGET_SLIDER ( [Parent] [, /Keywords) 2) 常用关键字

(1) Value

是滑动条中的默认值。

3) 参考例子Test_widget_slider

6.2.1.9 表格组件

(widget_table)

widget_table

用来创建表格组件,交互的获取或者设置指定范围内的1个整数值,该组件则是通过关键字来进行列表的选取。

1) 格式:

Result = WIDGET_TABLE ( [Parent] [, /Keywords)

2) 常用关键字

(1) Value

是滑动条中的默认值。

3) 参考例子Test_ widget_table

6.2.1.10 Tab组件(widget_tab) Widget_Tab用来创建页面组件。

1) 格式:

Result = WIDGET_TAB ( [Parent] [, /Keywords)

2) 常用关键字

(1) Title是TAB窗口中的标题文字; (2) LOCATION是控制窗口显示的位置;

3) 参考例子Test_ widget_tab

6.2.1.11 树组件(widget_tree)

WIDGET_TREE组件是创建的树形列表的组件,如下图。

1) 格式:

Result = WIDGET_TREE ( [Parent] [, /Keywords) 2) 常用关键字

(1) Value

是TREE的节点显示的名称。 (2) Folder

当前节点是文件夹节点,可以包括叶子节点 (3) EXPANDED

如果节点是文件夹,此关键字可以进行文件的展开、折叠控制。

3) 参考例子

(1) C:\ProgramFiles\ITT\IDL71\examples\doc\widgets\ tree_widget_example.pro (2) Test_widget_tree 6.2.1.12 文

字组件

(Widget_Text)

WIDGET_TEXT组件是创建文字输入编辑组件,如下图。

1) 格式:

Result = WIDGET_TTEXT ( [Parent] [, /Keywords) 2) 常用关键字

(1) Value

是TEXT组件文字框中显示的字符。 (2) Editable

当前字符是否能编辑。 (3) XSize与YSize

这里的YSIZE及XSIZE的单位都是字符宽度,而不是像素。

6.2.2 复合界面

复合界面是IDL下的一些具备某些功能的界面程序,均以CW_开头,这类组件具备一定独立的功能,详细可参考Help的列表。

先看CW_FIELD,从该组件的运行效果来看,它就是Widget_Base、widget_label和

Widget_text组件的结合,但从关键字上看,它可以实现其他组件无法实现的效果。

1) 格式:

Result = CW_FIELD ( [Parent] [, /Keywords)

2) 常用关键字

(1) Title

是组件文字框前面显示的字符。 (2) NOEDIT

当前字符不可编辑。 (3) 数据类型

这类关键字包括

FLOATING、LONG、INTEGER、STRING等,设置了对应的关键字后则输入时只能对应类型字符,其他类型字符无法输入。这在一定程度上减轻了编程人员的工作量。

其他复合界面的介绍与使用可参考IDL帮助,见下图:

6.2.3 对话框界面

对话框组件是Modal对话框的组件,对话框是1种用户界面,它的主要功能是输出信息和接收用户的输入。如常用的文件选择对话框Dialog_PickFile和信息提示Dialog_Message。

对话框组件Dialog_PickFile

1) 格式:

Result = Dialog_PickFile ( [Parent] [, /Keywords)

2) 常用关键字

(1) Title

对话框的标题字符。

(2) Filter

文件类型过滤,如filters = ['*.jpg', '*.tif', '*.png']则指定文件输入为上面3种类型。

70ENVI_IDL 培训教程2011_IDL

6.2.4 功能界面

功能界面是IDL自带部分特殊函数,这些函数能够实现一些特殊的功能并能够被调用,大部分有源码可以参考。见下表

6.3 界面的控制

界面组件创建后,需要对组件进行属性的设置或获得组件的状态,IDL提供了Widget_Contrl和Widget_Info2个函数对组件信息进行控制。

6.3.1 Widget_Control

Widget_Control的目的有下面4种: ? 组件显示;

? 组件属性信息的设置和读取; ? 组件销毁;

调用格式如下:Widget_Control,id,[关键字] 组件常用关键字简要列表如下

6.3.2 Widget_Info

用Widget_Info是获得已经存在组件的信息。

调用格式如下:result= Widget_Info(id,[关键字]) 6.4 事件的处理

IDL的图形窗口中,每发生1个动作都会产生事件,每个都会返回1个事件结构,可以分4个部分来学习。一是事件结构的内容,二是要有1个对事件进行处理的“管家”,三是需要获得事件并进行区分,最后不同的事件中做不同的处理。

6.4.1 事件的结构

事件结构体中包含了组件的相关信息。事件结构式IDL的结构变量,事件的结构中通用的字段有ID、Top和Handler3个,这3个字段都是长整型的变量。

ID,通常是长整型,是事件过程中组件的惟一标示符。 Top是组件层次结构中最顶级的base的标识; Handle是与事件处理程序相关联的组件的标识;

6.4.2 事件的“管家”

XManager能够对产生界面的事件,可称为是IDL事件的管家。常规界面事件程序生成的步骤可分为:创建界面、显示界面和Xmanager进行事件的生成三部分。XManager产生事件的生命周期是界面存在的生命周期,直到界面销毁XManager的事件才会消失。

调用方式:Xmanager,Name,ID,[关键字] Name是程序的文件名,ID是组件的ID号。

常用关键字有EVENT_HANDLER和NO_BLOCK,其中EVENT_HANDLER可以指定事件的处理程序名,如不指定事件程序名则默认是Name_event程序。NO_BLOCK关键字是在程序运行过程中对命令行是否进行屏蔽。

参考例子[Traning\chapter6\test_xmanager.pro]

6.4.3 事件的处理

界面程序中可以先产生事件,然后在事件处理程序中,用Tag_names对产生的事件类型进行获得或根据Uname事件,tag_names的功能是获取结构体的名字。

例子程序[Traning\chapter6\test_event.pro]对draw中的各种事件进行了演示,包括了鼠标事件、键盘事件、暴露事件、关闭事件和resize事件的常用事件。

7 直接图形法

7.1 概述

直接绘图法是IDL的基本图形显示系统,也是IDL语言在图像处理和显示上跟其他语言相比的优势之一。IDL可以采用不同的方法对数据进行可视化分析和图形显示,为了方便的应用IDL进行图像显示首先要深刻的理解IDL的图像显示。

直接图形法是IDL的图像或图形直接绘制在用户指定的图形设备上,可在很短的时间内生长高质量的图形。执行内置直接图形程序,将会建立坐标系,创建轴和边界。组成直接图形系统的例行程序,如plot,contour及surface等等,可以完成大部分关于图形输出的操作。直接绘图程序一旦生成直接图形,结果就会被输出到当前设备,并且删除掉所有相关数据。若要对已生成的直接图形做出改动或是将结果输出到另外的设备,就必须要重新执行。

直接图形法对内存有默认的管理方法,占用内存少,用户不必自己释放内存,方便、简洁易用。

7.2 图形显示设备

直接图形法的显示是显示在设备上的,IDL中的设备包括(显示器、打印机等),可以通过下面的IDL命令来查看当前显示设备,表7-1中列出了IDL支持的图形设备名字。

IDL> print,!d.name WIN

表 7-1 IDL直接图形法设备名称及描述

设备名称

CGM HP METAFILE NULL PCL PRINTER PS REGIS TEK WIN X Z

计算机图元文件 惠普图形语言 (HP-GL) Windows图元文件格式 (WMF) 没有图形输出

惠普打印机控制语言(PCL) 系统打印机 PostScript

吉斯图形议定书(DEC systems only) 泰克兼容终端 微软Windows X Window系统 Z轴缓冲伪设备

描述

7.3 显示模式

直接图形法有2种显示模式:8位显示模式和24位显示模式。

7.3.1 8位显示模式

8位显示模式下,只有25六种颜色,在IDL中通过Device设置颜色模式,Decomposed=0表示8位显示模式,颜色索引从0到255。此时的显示的颜色有颜色表来控制,对输入的颜色索引进行颜色表中查找,查找最接近的匹配值并显示。颜色表的控制用XloadCT和LoadCT

函数。

IDL> Device,decomposed = 1 IDL> tvscl,dist(400)

IDL> Device,decomposed = 0 ;获得系统的颜色表 IDL> LOADCT

0- B-W LINEAR 14- STEPS 28- Hardcandy 1- BLUE/WHITE 15- STERN SPECIAL 29- Nature 2- GRN-RED-BLU-WHT 16- Haze 30- Ocean 3- RED TEMPERATURE 17- Blue - Pastel - R 31- Peppermint 4- BLUE/GREEN/RED/YE 18- Pastels 32- Plasma 5- STD GA美眉A-II 19- Hue Sat Lightness 33- Blue-Red 6- PRISM 20- Hue Sat Lightness 34- Rainbow 7- RED-PURPLE 21- Hue Sat Value 1 35- Blue Waves 8- GREEN/WHITE LINEA 22- Hue Sat Value 2 36- Volcano 9- GRN/WHT EXPONENTI 23- Purple-Red + Stri 37- Waves 10- GREEN-PINK 24- Beach 38- Rainbow18 11- BLUE-RED 25- Mac Style 39- Rainbow + white 12-

16 LEVEL 26- Eos A 40- Rainbow + black 13- RAINBOW 27- Eos B Enter table number: 1

% LOADCT: Loading table BLUE/WHITE IDL> tvscl,dist(400)

IDL> xloadct

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

IDL> tvscl,dist(200,200)

自定义颜色表需要用Tvscl进行调入。 IDL> DEVICE, DECOMPOSED = 0

IDL> ; Create a set of R, G, and B colormap vectors: IDL> R = BYTSCL(SIN(FINDGEN(256))) IDL> G = BYTSCL(COS(FINDGEN(256))) IDL> B = BINDGEN(256)

IDL> ; Load these vectors into the color table: IDL> TVLCT, R, G, B

IDL> ; Display an image to see the effect of the new color table: IDL> TVSCL, DIST(400)

7.3.2 24位显示模式

24位显示模式下有256*256*25六种颜色,如绘制一正弦曲线,可依次输入下列命令: IDL> Device,decomposed = 1 IDL> xdata = findgen(200)/10 IDL> plot,xData,sin(xData)

IDL培训教材

此时颜色的RGB值也需要转换为索引值以便使用,转换的方法为: index=long(red)+256L*long(green)+256L^2*long(blue) 如RGB[0,0,255]转换为索引值为16711680L, RGB[255,0,0]转换为索引值是255L。

IDL> plot,xData,sin(xData),color = 16711680L

IDL> plot,xData,sin(xData),color = 255

7.4 系统的字体

IDL下的字体分为3种,可以根据系统变量!P.Font的值进行判断。值为-1代表矢量字体(也可称为Hershey字体),值为0代表设备字体或系统字体和1代表TureType轮廓字体。

7.4.1 矢量字体

矢量字体是直接图形法下的缺省字体,它们有不依赖于平台的优点且极易在三维空间旋转。IDL系统中有下面这些类型的矢量字体。

在缺省值情况下,直接图形使用的是矢量字体,即AXIS, CONTOUR, PLOT, SHADE_SURF, SURFACE, XYOUTS.等功能函数中如设置关键词

font

为-1,则使用的字体为矢量字体。

字体选择可通过字符串前添加”!index”来进行,其中index为字体的索引,取值范围3~20,文字大小可通过关键字charsize进行控制。

IDL> XYOUTS,.1, .1, '!3Hershey Font ' , /NORM, CHARSIZE=4 IDL> XYOUTS,.1, .4, '!4Hershey Font ' , /NORM, CHARSIZE=4 IDL> XYOUTS,.1, .7, '!5Hershey Font ' , /NORM, CHARSIZE=4

7.4.2 设备字体

设备字体(也称为系统字体)通过设置!P.Font系统变量或 Font关键字为0来加以选择。 如在AXIS, CONTOUR, PLOT, SHADE_SURF, SURFACE, XYOUTS.等中进行系统字体的显示时,需要采用这种方式。系统字体的获得可以通过Device函数来获得,获得系统字体个数及系统字体名字的方法如下:

IDL> Device,Set_Font='*',Get_FontNum = deviceFontsNum

IDL> print,deviceFontsNum 223

IDL> Device,Set_Font='*',Get_FontNames = DeviceFonts

IDL> help,DeviceFonts

DEVICEFONTS STRING = Array[223] 如显示输出汉字的方法;

IDL> Window,1,xsize = 400,ySize =300 IDL> x=FINDGEN(100) IDL> y=x^2

IDL>;设置自定义字体模式 IDL>!p.font = 0

IDL> PLOT, x, y, TITLE='回归分析'

IDL>;设置字体

IDL> DEVICE,Set_Font ='宋体' IDL> PLOT,x,y ,title ='回归分析'

7.4.3 TrueType字体

该字体也称为轮廓字体,这个字体由一系列的外形轮廓描述的,这些轮廓通过创建一系列的多边形来填充。IDL有4种TrueType字体家族系列:Times、Helvetica、Courier和Symbol。TrueType字体渲染需要花更长的时间,因为这种字体首先必须刻绘出来,然后创建相应的填

充多边形,最后填充。TrueType字体是IDL对象图形系统的1种缺省字体。

添加自定义TrueType字体的方法,将字体ttf文件拷贝到IDL安装目录的\resource\fonts\tt下,然后修改ttfont.map文件

(ASCII码文本),在最后一行添加"beijing2008" Olympic_Beijing_Pictos.ttf 1.0 1.0,其中Fontname-“beijing2008”是使用该字体时的标示符,

7.5 坐标系统

数据的图形表现都是通过数据坐标体系作为基本支架来完成。IDL系统的坐标体系为IDL图形实现创造了很好的机制,主要包括:

? 数据坐标体系

? 设备坐标体系(显示屏幕、打印机纸张) ? 规一化坐标体系

无论采用任何的坐标系,显示数据的坐标都要统一,只有统一了坐标系才能正确的显示数据。

直接图形法下大部分的坐标系是数据坐标,就是根据像素点进行。对象图形法下的坐标系应用具体可见章节9.8坐标系统的统一。

7.6 图形图像显示

7.6.1 显示窗口

7.6.1.1 创建窗口

如果需要显示新的窗口则创建新的窗口用到Window,该过程可以创建1个新的指定大小等窗口,并将窗口的索引指定给系统变量!D.Window。

IDL> window,8,xsize = 200,ysize=200 IDL> print,!d.window 8

7.6.1.2 选择窗口

对IDL的很多函数来说,函数自身不会自动选择哪个窗口,只会在当前窗口上面进行显示,Wset可以指定当前显示的窗口。

IDL> wset,8

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

7.6.1.3 暴露指定窗口

对1个窗口来说,有2种状态,暴露和隐藏,也就是当前暴露的窗口只有1个。通过WShow可以进行窗口的暴露显示的指定。

IDL> wshow,8

7.6.1.4 删除指定窗口

对1个已经存在的窗口来说,可以用Wdelete进行窗口的删除。 IDL> wdelete,8

IDL> print,!d.window -1

7.6.2 绘制曲线

7.6.2.1 Plot过程

Plot过程用来绘制矢量数据线,除了数据本身外,并没有多少其它信息。然而,可用来定制和标注线画图,Plot可以被50多种不同的关键字修饰来创建不同的曲线。下面对Plot常规的几种曲线绘制使用进行描述。

首先准备相关的数据,有下面几个:

SOCKEYE=[463, 459, 437, 433, 431, 433, 431, 428, 430, 431, 430] COHO=[468, 461, 431, 430, 427, 425, 423, 420, 418, 421, 420] CHINOOK=[514, 509, 495, 497, 497, 494, 493, 491, 492, 493, 493] HUMPBACK=[467, 465, 449, 446, 445, 444, 443, 443, 443, 443, 445] 1.1.1.1.31 简单绘制线

简单的曲线绘制

IDL> data = FINDGEN(20) IDL> PLOT,data

IDL> PLOT, SIN(data/3), COS(data/6)

IDL> PLOT, data, data, /POLAR, TITLE = '极射'

IDL> PLOT, SIN(data/10), PSYM=4, XTITLE='X ', YTITLE='Y '

1.1.1.1.32 点对绘制线

IDL> PLOT, YEAR, SOCKEYE, TITLE='Sockeye Population', YTITLE='Fish (thousands)'

XTITLE='Year',

1.1.1.1.33 坐标轴风格

画线时坐标轴的显示风格可以用XSTYLE、YSTYLE和ZSTYLE关键字进行更改,下表列出了不同值代表的类型。

注意:这些属性值可以进行累加!

值 1 2 4 8 16

坐标轴的属性更改 精确的坐标轴范围 扩展坐标轴范围 不显示整个坐标轴 不显示外框(只画坐标轴)

屏蔽Y轴起始值为0(只有Y轴有此属性)

PLOT, YEAR, SOCKEYE, $

TITLE='Sockeye Population', XTITLE = 'Year', $ YTITLE = 'Fish (thousands)', $ /YNOZERO, $

XRANGE = [1975, 1983], /XSTYLE

1.1.1.1.34 绘制标题

对曲线绘制添加标题则是启用x[y,z]Title关键字,例: IDL> PLOT, YEAR, SOCKEYE, /YNOZERO, $

IDL> TITLE='Sockeye Population', XTITLE = 'Year', $

IDL> YTITLE = 'Fish (thousands)', XRANGE = [1975, 1983], /XSTYLE

IDL培训教材

1.1.1.1.35 绘制符号

假如想用符号代替线条表示数据,可以用关键字PSYM类解决。PSYM通过不同的以确定不同的线画图符号。表列出了符号的索引编号。

PLOT, YEAR, SOCKEYE, /YNOZERO, PSYM = i

索引号 0 1 2 3 4 5 6 7 8 9 10

绘图符号

无符号,通过线条连接点

加号+ 星号* 点. 菱形◇ 三角形△ 方形 X

自定义符号(可用UserSym来定义)

未用 直方图

1.1.1.1.36

绘制柱形图

对柱形图的绘制,可参考下面的程序。

IDL培训教材

在系统的同1个窗口中绘制多个图像的关键是不同图像的位置,IDL下可以通过系统变量!P.Multi来进行控制,该系统变量的使用使在显示窗口内创建多个图形非常的快捷、方便。!P.Multi由以下5个元素进行矢量定义。

!P.Multi[0] !P.Multi的第1个元素包括剩下的要在显示窗口或者PostScript页上绘制的图形数目。这有点不直观,下面可以看到它是如何使用的。通常设置为0,意思是,没有剩下要在显示窗口输出的图形。接下来的图形命令将删除显示的图形,并且开始绘制新的多个图形中的第1个。

!P.Multi[1]:规定了该页上图形的列数

!P.Multi[2]:规定了该页上图形的行数

!P.Multi[3]:规定了在Z方向上叠加的图形数目(仅适用已经建立了三维坐标系的情况下)

!P.Multi[4]:规定了是先按行显示图形(!P.Multi[4]=0),还是先按列显示图形(!P.Multi[4]=1)。

7.6.2.2 Contour函数 1.1.1.1.39 简单等值线绘制

等值线的绘制可以分很多种, IDL>zData = Dist(200) IDL>CONTOUR,zData

1.1.1.1.40 等值线上标注

zData = Dist(200)

CONTOUR,zData, NLevels =5,/follow

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

1.1.1.1.41 等值线多边形平滑

插值函数的MIN_CURVE_SURF可以对规律或离散的网格点进行差值平滑,进而生成最

1.1.1.1.42 等值线填充

Fill和C_FILL控制填充方式,完全填充和线填充;

IDL培训教材

Nlevels:等值线的层数;

1.1.1.1.43 不规则网格创建三角形绘制等值线

对离散点,不需要先进行插值成网格数据,可以通过triangulation关键字直接进行等值

IDL培训教材

1.1.1.1.44 数字高程数据的等值线

先读取数字高程图像,然后直接在图像上面进行等值线绘制。

1.1.1.1.45 等值线标注

关键字:

C_LABELS:是否在等值线上进行文本标注;

LEVEL-每级等值线上对应的数值;

IDL培训教材

1.1.1.1.47 等值线上绘制时间、日期

演示的是如何在等值线上绘制时间、日期。

IDL培训教材

7.6.3 显示图像

显示图像可以用TV,TVSCL函数。

7.6.3.1 功能描述

TV和TVSCL这2个命令几乎在各个方面都是一样的,包括能与之一起使用的关键字。仅仅在1个方面不同:TVScl将图像数据调整为与IDL运行时所用颜色数目相适应的字节型数值。例如:如果在使用IDL时用250种颜色,则在图像显示之前TVScl将图像数据调整为

0~249之间的字节型数值。

7.6.3.2 使用举例

1) 显示单幅及多幅灰度图形

这里的0,1是显示区域中对当前图像计算所得的索引,如对1个512*512的区域中,显示大小128*128的图像,索引依次为:

但如果这么写,TV,D,0,1,那 [0,1]代表的就是以左下角为[0,0]的像素坐标偏移量了。 2) 显示彩色图像

对彩色图像,即三维数组[m,n,k](其中1个为3)的显示,使用TV时添加True关键字,其中True的值可参考下表。 TRUE 值 图像的维数

1

2

3 (3, c, l) (c, 3, l) (c, l, 3)

参考下面例子源码

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

3) 拉伸显示

Tvscl的应用跟tv一样,只是tvscl做了1个拉伸处理,通过下面命令的对比即可看出

7.6.4 绘制曲面

在IDL程序中,二维的数组都可以用Surface命令生成1个曲面图。

7.6.4.1 曲面显示surface

使用格式:surface,Z[,X,Y][关键字],跟plot的使用方法基本类似,连续使用surface时原来的内容将被擦除。

显示1个曲面图的边缘。使用Skirt关键字来指定边缘该画到何处。试试下面命令:

2) 曲面的旋转

在观察曲面图时希望能将曲面图旋转1个角度以便达到更好的视觉效果,曲面图可以用Ax关键字使其绕X轴或用Az关键字使其绕X轴旋转。当从轴上的正值向原点观察时,曲面图以逆时针方向,按某个角度值旋转。当Az和Ax关键字被忽略时其缺省值是30度。例如,使曲面图绕Z轴旋转60度,绕X轴旋转35度,则可键入:

IDL培训教材

7.6.4.2 阴影曲面显示shade_surf

7.6.5 相关函数参考

IDL自带了非常丰富的功能函数,下面几个是收集的跟上面讲述的曲线、等值线相关的函数,大家可以根据帮助中的内容参考学习下。

IMAGE_CONT

FLOW3

PLOT_FIELD

VEL

VELOVECT

SHOW3

POLAR_CONTOUR

POLYSHADE

7.6.6 体数据显示

体数据的显示和操作可以通过交互式体绘制工具XVOLUME及iTools下的iVolumne来进行,XVOLUME的用法如下

XVOLUME,voldata, [,关键字]

体数据是1个真实三维数据,可以对其作切片处理,IDL提供了切片处理的函数EXTRACT_SLICE和交互式切片提取SLICER3。

函数EXTRACT_SLICE的调用格式为

Result = EXTRACT_SLICE(Voldata,Xsize,Ysize,Xcenter,Ycenter,Zcenter,Xrot, Yrot, Zrot,[,关键字])

Voldata:体数据的数据;

Xsize(Ysize):获取切片数据的维数大小;

Xcenter(Ycenter,Zcenter):切片数据的中心点坐标;

Xrot(Yrot,Zrot):切片分别绕X(Y、Z)坐标轴旋转的角度;

注意SLICE3的处理数据是指针。

例子源码程序文件test_volumne

7.7 地图投影

IDL提供交互式和静态地图显示功能,您可以使用IMAP的交互方式来显示地图,如果需要静态展示,可以使用地图投影的函数,以下主要讲述地图投影的函数。

7.7.1 功能描述

投影的相关函数有下面几个:

MAP_SET – 确立地图投影的类型和范围;

MAP_IMAGE – 根据当前投影对图像进行纠正并返回图像(图像比窗口大);

MAP_PATCH – 根据当前投影对图像进行纠正并返回图像(图像比窗口小);

MAP_CONTINENTS – 在图像上叠加绘制大陆边界线、政治边界、海岸线、河流,投影信息由MAP_SET来设置。

MAP_GRID – 绘制地图投影上的经纬线;

LL_ARC_DISTANCE – 给1个点的弧度距离和方位角计算该点的经纬度; MAP_2POINTS – 函数返回1个二维的矢量的信息,可通过不同的关键字进行计算两点之间大圆的距离或方位,或2个点之间的大圆连线。

MAP_PROJ_FORWARD – 转换经纬度坐标到笛卡尔坐标;

MAP_PROJ_INVERSE – 转换地图坐标从笛卡尔坐标到经纬度坐标;

MAP_PROJ_IMAGE – 将图像从经纬度坐标纠正为指定的地图投影;

MAP_PROJ_INFO – 获得当前地图或投影的信息;

MAP_PROJ_INIT – 初始化地图投影,可调用IDL自身的投影或根据通用测绘转换包(GCTP)投影

7.7.2 举例

调试程序:Test_Map.pro

Test_map_image.pro

气象符号绘制Test_wf_draw

8 IDL图像处理

当今社会,医疗行业、天文学、物理学、化学、遥感、制造和国防等许多的领域基本都要依靠图像进行资料的存储、显示。科学家和工程师们所面临的挑战就是如何从原始图像数据中快速提取有价值的信息。这也是图像处理的主要目的-转换图像信息。

IDL自身包括了很多图像处理和分析的库程序,从而使得它的图像处理功能非常强大,通过使用IDL,你可以轻松的进行图像文件的读取和信息的提取。

8.1 图像文件的输入输出

图像文件的输入输出操作可以见4.3。

8.2 图像裁剪

剪裁图像是从原来的影像中提取矩形的感兴趣区域,需要对某一具体部分的地区形象特

别关注,那么基于图像剪裁与图像放大,可以放大某一部分的影像。从技术上说就是获取数组的一部分。

8.3 图像的尺寸修改

图像数据的维数修改也就对图像矩阵进行修改,IDL下面可以用congrid和rebin函数,系统的lib目录下有expand函数。

CONGRID:在处理一维或二维数组时默认是最近邻重采样方式,处理三维数组时默认是双线性内插值。

REBIN默认是双线性内插。

如使用CONGRID进行数据的大小修改,

IDL培训教材

8.4 图像的位置变换

图像的位置变换包括图像的水平翻转、竖直翻转和旋转,分别由函数来实现,包括shift、reverse、rotate和transpose。

SHIFT函数用来对数据做平移处理。

用法:Result = SHIFT(Array, S1, ..., Sn)

其中Si是i维的平移个数,若i=1则按照右平移方式进行,若i>1则数据按照矩阵的行、

70ENVI_IDL 培训教程2011_IDL

8.5 图形的域变换

域变换是图像和信号处理技术,首先是把图像的数据空间转换到图像的频域空间,然后在其频域空间中对图像进行频域处理,然后将频域空间转换到图像的数据空间,从而实现图像处理的过程。图像变换的目的是为了图像处理的过程简化,可以用来对图像进行平滑、锐化、降噪和特征提取等。

IDL下的域变换函数分下面3个部分快速傅里叶变换FFT,小波变换WTN,Hough和radon变换HOUGH、RADON,详细使用可参考Help中的章节:IDL Users' Guides > Image Processing > Transforming Between Domains。

8.6 图像的增强和滤波

8.6.1 图像增强

图像的增强包括字节拉伸和直方图拉伸。

8.6.1.1 字节拉伸

字节拉伸是指的对数据从1个范围拉伸到另1个数据范围内的处理,通过拉伸处理从而增强了对比度,IDL提供了BYTSCL函数进行拉伸处理。

调用格式为:Result = BYTSCL( Array [, MAX=value] [, MIN=value] [, /NAN]

[, TOP=value] )

MAX:拉伸后范围的最大值;

MIN:拉伸后范围的最小值;

TOP:拉伸数据的最大值;

Test_bytescal

8.6.1.2 直方图均衡化

图像的直方图表示的是图像范围内的某个像素值的像素个数,即图像中像素的分布情况。直方图均衡化包括2种方法:标准直方图均衡和自适应直方图均衡。

标准直方图均衡:使用函数HISTOGRAM()和HIST_EQUAL()。参考例子Test_EaualizingHist

自适应直方图均衡:使用函数HISTOGRAM()和ADAPT_HIST_EQUA()L。参考例子Test_AdaptiveEqualizing

8.6.2 滤波

图像滤波在图像的平滑,噪声消除和边缘检测中都非常有用,IDL提供了低通滤波、高通滤波、定向滤波及拉普拉斯滤波等滤波的方法。

低通滤波:在频率域中,低通信息畅通无阻,通过高频信息衰减的过程叫低通滤波。低通滤波在图像处理中抑制了反映灰度聚变边界特征的高频信息及孤立的噪声点,起到平滑图像去噪声的作用。

高通滤波:衰减或抑制低频分量,让高频分量畅通的滤波称为高通滤波。高通滤波使得图像得到了锐化处理。

定向滤波和拉普拉斯滤波:定向滤波和拉普拉斯滤波都为边缘检测打下一定的基础。 参考Test_Filtering

8.7 图像平滑

IDL中的图像平滑可以通过2种方式来进行,一是均值平滑,二是中值平滑。

8.7.1 均值平滑

由函数Smooth完成的,该函数调用格式为:

Result = SMOOTH( Array, Width [, /EDGE_TRUNCATE] [, MISSING=value] [, /NAN] ) Width:可以是单个长度或数组,如给定宽度是3*3,那么像素由它和周围8个像素值的平均值代替。

Edge_Truncate:该关键字可复制图像边缘附近的像素,以便实现整幅图像的平滑。如果不使用该关键字,图像边缘附近的像素仅仅是简单复制,而没有平滑。

8.7.2 中值平滑

由Median来实现,这个函数与Smooth不同之处在于Median命令计算相邻像素的中间值而不是平均值。这就有2个重要作用。第一,它能删除图像中的极端值。第二,它不使那些尺寸比邻域范围大的图像棱边或特征变模糊。

平滑的例子参考程序test_Smooth。

8.8 图像边界检测

边界检测是图形处理中对图像的灰度或纹理特征进行不连续性或突变的1种检测技术。边界检测可以通过滤波的定向滤波和拉普拉斯滤波来实现,IDL中还有下面的边界检测函数:EDGE_DOG、 EMBOSS、LAPLACIAN、PREWITT、ROBERTS、SHIFT_DIFF和SOBEL。

应用可以参考例子detecting_edges_doc.pro

8.9 图像形态学处理

数学形态学是由一组形态学的代数运算子组成的,它的基本运算有四个: 膨胀(或扩张)、腐蚀(或侵蚀)、开启和闭合, 它们在二值图像和灰度图像中各有特点。基于这些基本运算还可推导和组合成各种数学形态学实用算法,用它们可以进行图像形状和结构的分析及处理,包括图像分割、特征抽取、边界检测、 图像滤波、图像增强和恢复等。

IDL中的形态学处理和分析方法主要包括:腐蚀、扩张、开、闭、细化、边界检测和形状分析等。

8.9.1 腐蚀和膨胀

腐蚀通常减小对象的尺寸,并且可以消除毛刺和去除噪声。膨胀通常增大对象的尺寸,并且可以填充空洞和断开区域,图像的腐蚀和膨胀可以使用函数ERODE()和DILATE()。

参考程序:../examples/doc/image/ morpherodedilate.pro。

8.9.2 开运算

开运算是指先腐蚀再膨胀的运算,即开运算对图像先进行侵蚀运算,然后再进行膨胀运算。图像的开运算可以使用函数MORPH_OPEN()来实现,其用法为:

格式:Result =MORPH_OPEN( Image, Structure [, /GRAY])

参考程序:../examples/doc/image/morphopenexample.pro。

8.9.3 闭运算

闭运算是指先膨胀再腐蚀的运算,即开运算对图像先进行膨胀运算,然后再进行侵蚀运算。图像的闭运算可以使用函数MORPH_CLOSE()来实现,其用法为:

格式:Result =MORPH_CLOSE( Image, Structure [, /GRAY])

参考程序:../examples/doc/image/morphcloseexample.pro.

8.9.4 峰值检测

图像的峰值检测需要使用顶环运算MORPH_TOPHAT(亦称峰值检测器)。首先通过对图像进行开运算,并从原始图像中去除开运算的结果,该运算可以从原始的灰度图像中提取最亮的像素。

参考程序:../examples/doc/image/morphtophatexample.pro.

8.9.5 分水岭边界检测

分水岭边界检测算法可以检测灰度图像的边界。通常在检测图像的边界之前,先对图像进行平滑处理,消除图像中噪声。

基于分水岭的边界检测技术可以使用函数WATERSHED()来实现。该函数可以提取灰度图像的边界线。其用法为:

格式:Result = WATERSHED ( Image [, CONNECTIVITY={4 | 8} ] )

参考程序:../examples/doc/image/watershedexample.pro.

8.9.6 图像识别

图像识别是指按照指定的要求识别图像中的某个对象。数学形态学操可以通过构造不同的结构元素来识别二值图像或者灰度图像中的特殊形状。

图像识别在数学形态学中可以使用MORPH HITORMISS()函数,

格式:Result = MORPH_HITORMISS (Image, HitStructure, MissStructure)

参考程序:../examples/doc/image/morphhitormissexample.pro.

8.9.7 图像的梯度边界检测

梯度边界检测算法是根据图像中像素的梯度变来检测灰度图像的边界。

基于梯度的边界检测技术可以使用函数MORPH_GRADIENT()来实现。该函数可以提取灰度图像的边界线。其用法为:

格式:Result = MORPH_GRADIENT (Image, Structure)

参考程序:../examples/doc/image/morphgradientex.pro.

8.9.8 图像细化

图像细化是指用原图像减去原图像与指定结构元素的击中击不中变换的图像处理过程。 一般情况下细化运算被反复地运行,最后只留下图像对象的像素宽度的线性表示。当没有像素可以从图像中去除时,细化运算停止。

图像的细化可以使用函数MORPH_THIN()来实现。该函数可以提取图像的细化信息。其用法为:

格式:Result = MORPH_THIN ( Image, HitStructure, MissStructure )

参考程序:../examples/doc/image/morphthinexample.pro

8.9.9 图像分割

图像分割是指根据图像处理和分析的需要,把图像中指定的对象从图像中分割出来的图象处理技术。

参考程序:../examples/doc/image/EDIT removebridges.pro.

9 IDL对象图形法

传统的开发方法开发的程序重用性、可修改性及可维护性都比较差,对象法是IDL5.0引入面向对象编程概念后出现的,面向对象的基础也就是对象类的使用。对象类允许编程者将数据和方法封装成1个包,称之为对象。1个对象类可以重复利用生成多个对象。

在IDL的虚拟图形构架体系中有一套对象显示结构对象,而且提供了很多的对象图形原子,利用这些对象和对象图形原子之间可以进行互相的加载,相互作用形成显示对象,灵活的运用这些图形原子即可在视图中得到丰富多彩的图形或图像,甚至可以制作三维的动画。

9.1 对象层次结构

IDL

的对象层次是由一系列的对象类构成的,显示层次见图9-1。其中(Graphics atom)是原子对象,Model(IDLgrModel)是显示的框架,View(IDLgrView)是视图场景对象,Scene(IDLgrScene)。

参考RevolutionIDL

9.2 对象基本操作

9.2.1 创建对象

创建1个新对象的方法为:

9.2.2 方法调用

对象的方法调用的格式为Object->Method 或Object.Method9.2.3 销毁对象

销毁对象用过程Obj_Destroy,object

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

9.3 IDL图形基本对象

9.3.1 IDLgrWindow对象

IDLgrWindow可以看做是1个独立的对象,也可以看做是Widget_Draw。也就是说IDLgrWindow是1个显示的组件,介绍下它的retain、renderer参数。

9.3.1.1 retain参数

该参数是用来定义图像的绘制时是否进行备份的,如为0则不进行备份,为1时操作系统进行备份,为2时IDL进行备份,如设置了备份则显示刷新会变慢。

9.3.1.2

renderer参数

着色方式,如设置renderer为0,则显示绘制时采取OpenGL硬件加速,为1则绘制采取软件加速。

用其他Windows窗口遮挡后再查看该窗口,窗口显示的内容已经没有了。这是因为retain默认为0,如设置为2即IDL自动备份则显示正常。

9.3.2 IDLgrView对象

IDLgrView是1个矩形区域,图像元对象都可以在其中显示。常用关键字有dimension、depth_cue、double、eye 、Location、projection、viewPlane_rect、transparent及zClip等。

9.3.2.1 dimension、location和viewPlane_rect

dimension和location是view的维数和位置属性,默认单位是像素。而viewPlane_rect值是viewPort(显示区域),可以这么形象的理解,viewPort看做是1个照相机的镜头,我们可

IDL培训教材

以通过变焦和相机移动对镜头显示的内容进行更改,但镜头的大小和相对于照相机的位置是固定的。

实例:Viewimagedemo

9.3.2.2 Eye参数

Eye,可定义为视点的位置,示意图如下

9.3.2.3 projection

投影类型参数,这里的投影不是地图投影而是三维图像转二维显示时所用到的投影,分平行投影和透视投影2种。二者的定义可看下面两图

图:平行投影和透视投影

9.3.2.4 zClip三维剪切面

该关键字定义了view范围内的z方向的可视距离。

IDL培训教材

如设置ZCLIP 为 [2.0, -3.0](图中的两竖虚线位置的值),结果会是object1可见,object2不可见。

9.3.3 IDLgrModel对象

IDLgrModel是IDL对象图形法层次中的容器,它可以容纳所有类型的原子对象,然后才方便的对原子对象进行平移、旋转和放缩操作。 例子:显示一空矩形柱并进行缩放旋转显示。

9.3.4 原子对象

类名

IDLgrAxis

IDLgrColorbar

IDLgrContour

IDLgrFilterChain 坐标轴对象类,显示坐标轴。 色标对象类,显示色标。 等值线对象,可以对数据绘制等值线,支持IDLgrPattern对象类设置样式。 依据显卡shader对象执行图像滤波 功能描述

IDL培训教材

IDLgrFont

IDLgrImage

IDLgrLegend IDLgrLight

IDLgrPalette

IDLgrPattern

IDLgrPlot

IDLgrPolygon

IDLgrROI

IDLgrROIGroup IDLgrShader

IDLgrShaderBytscl

IDLgrShaderConvol3

IDLgrSurface

IDLgrSymbol

IDLgrTessellator

IDLgrText

IDLgrTextEdit

IDLgrVolume 字体对象类,设置不同的字体。 图像对象类,用来显示二维数据。 图例对象类,显示图像图例。 灯光对象类,设置显示场景内的灯光显示。 颜色表对象类,通过该对象使用颜色表。 样式对象类,多边形填充时可设置不同样式。 曲线对象类,可以显示曲线 多边形对象类,如果是凹多边形要使用IDLgrTessellator设置。 感兴趣区对象类,具备方法进行区域统计或点是否在ROI内的判断。 感兴趣区组类,实现多个ROI操作。 基于显卡GPU对图像进行操作的对象类。 基于显卡GPU对图像进行拉伸运行。 基于显卡GPU对图像进行卷积运算。 曲面对象类,显示三维曲面数据。 符号对象类,可在折线或多边形中应用相应符号。 对多边形的凹凸性进行判断。 文字对象类,用来显示字符串文字。 文字鼠标选择类,利用该类可实现文字鼠标选择的功能。 体数据对象类,渲染显示三维实体数据。

9.4 二维图形显示

IDL的对象图形法的操作性,使得二维图形的绘制及控制非常容易,我们分别讲述线、多边形、坐标轴及图像的显示及部分处理。

准备工作,先建立1个显示的体系结构,在后面的基本对象构建时都在该显示体系中显9.4.1 线对象

IDL培训教材

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

9.4.2 多边形

多边形是IDLgrPolygon对象,当然了,IDLgrPolyline的东西也是可以用IDLgrPolyline来代替的。可参考章节9.5。

9.4.3 文本

9.4.3.1 文字对象IDLgrText

对象用来创建文本,并可以在任意空间位置、任意平面上,产生任意大小、粗细、走向的文字。常用关键字:Color,align,vertical_align,baseline,updir,char_dimensions,onglass,location,recompute_dimension,palette,strings,envable_formatting。

IDL> oText = Obj_New('IDLgrText','IDL7.1!') IDL> oWindow->Draw,oView

IDL> oText = Obj_New('IDLgrText','IDL7.1!') IDL> oModel->Add,oText IDL> oWindow->Draw,oView

颜色修改color

IDL> oText->SetProperty, color=[255,0,0] IDL> oWindow->Draw,oView

IDL培训教材

多文字时

IDL> oText->SetProperty, strings = ['IDL7.1','ENVI4.6.1'] IDL> oWindow->Draw,oView

IDL> oText->SetProperty, location = [[0,0],[.5,.5]] IDL> oWindow->Draw,oView

baseline定义的是文字的基准方向,由二维或三维的矢量组成。 IDL> oText->SetProperty, BASELINE =[6,1] IDL> oWindow->Draw,oView

IDL> oText->SetProperty, BASELINE =[1,1] IDL> oWindow->Draw,oView

IDL培训教材

IDL> oText->SetProperty, BASELINE =[1,1,.8] IDL> oWindow->Draw,oView

IDL> oText->SetProperty, BASELINE =[0,1] IDL> oWindow->Draw,oView

char_dimension指的是文字占的大小

IDL> oText->SetProperty,baseline=[1,0],updir =[0,1], CHAR_DIMENSION = [.5,.5] IDL> oWindow->Draw,oView

IDL培训教材

VERTICAL_ALIGNMENT是指文字在y方向的位置,为0则文字的下边靠近基准面,为1则文字的顶部靠近基准面。

IDL> oText->SetProperty,VERTICAL_ALIGNMENT=1 IDL> oWindow->Draw,oView

DRAW_CURSOR关键字,设置是否文字中间有那个光标的,相关的关键字还有SELECTION_START和SELECTION_LENGTH。

IDL> oText->SetProperty,draw_cursor =1 IDL> oWindow->Draw,oView

IDL> oText->SetProperty, SELECTION_START=1,SELECTION_LENGTH =1 IDL> oWindow->Draw,oView

IDL培训教材

9.4.3.2 字体对象 IDLgrFont

字体的基础知识在直接图形法中已经进行了介绍,对象法下的字体获取跟直接图形法下的字体获取有些类似,如下:IDLgrWindow-> GetFontnames

获取字体列表 获取字体个数 设置字体

直接图形法

DEVICE, GET_FONTNAMES=fontnames, SET_FONT='*' DEVICE, GET_FONTNUM=numfonts, SET_FONT='*' DEVICE, SET_FONT='字体名', /TT_FONT

对象图形法

IDLgrWindow-> GetFontnames

oFont=Obj_New(‘IDLgrFont’,字体名) oText->Setproperty,font = oFont

字体查看工具

EFONT,SHOWFONT

创建1个新的字体对象用下面的命令:

IDL> myFont = OBJ_NEW('IDLgrFont', 'times', SIZE=20) IDL> oText->Setproperty, strings ='IDL7.0',font = oFont IDL> oWindow->Draw,oView

9.4.4 坐标轴

坐标轴类用IDLgrAxis, Major:标号个数;

Minor:标号中间的间隔;

TextPos:坐标轴的文字位置控制;

轴类型 X Y Z

TextPos=0 标注于X轴下方 标注于Y轴左方

标注于Z轴左方,与X轴负方向一致

TextPos =1 标注于X轴上方 标注于Y轴右方

标注于Z轴右方,与X轴正方向一致;

TickDir坐标轴标注的控制;与TextPos的控制一致;

TextAlign:坐标轴标注的位置控制,由1个二维矢量[xPos,yPos]来控制,其中xPos和yPos的范围均为[0,1]

TextBaseline=[-1,0,0]

参考程序 test_IDLgrAxis

9.4.5 曲线

跟直接图形法的plot功能类似,对象法下也有IDLgrPlot对象绘制曲线,详细可参考:test_IDLgrPlot

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

9.5 三维图形显示

IDL的三维坐标系使用的是右手笛卡尔坐标系,与Microsoft Direct3D的左手坐标系相区别,示意图如下。

参考程序:Test_3D.pro

9.6 坐标统一

了解了对象图形法,下面专门介绍下坐标系统,因如要显示图像图形则需要先明确1个显示范围。不论你使用什么坐标系,要明确1个基准的坐标系统,所有的对象对该范围进行相对坐标定位,这样就能相应的显示了。

如不同对象有不同的坐标体系,则需要进行坐标转换。

为了方便的进行坐标变换,IDL下的对象自带坐标变换的方法。每个对象通过坐标变换可以修改对象的位置和放缩,这点在坐标变换时非常有用。

如系统View的坐标使用归一化坐标,对象的数据范围在该范围内则能完整的显示,否则需要进行坐标转换。

X[YZ]COORD_CONV的格式为 [s0, s1],,通过其转换后的坐标为v= s0 + s1 * oriV,如果转换为归一化坐标,也就是[0,1],如数据的最大最小值为

Xmax和Xmin,那么转换因子应为[-Xmin/(Xmax-Xmin),Xmax/(Xmax-Xmin)]。

9.7 对象的交互操作

IDL的原子对象正确的显示之后,我们需要对其进行一系列的操作,比如选择操作,鼠标位置的数据值获取等操作。

运行分析实例程序sel_obj.pro,SURF_TRACK.pro

9.8 编写类

9.8.1 编写新对象类

创建对象类,创建于类名一致的结构体,IDL中规定创建的格式如下:

PRO ClassName__DEFINE

struct = { ClassName, data1:value1, … , dataN:valueN }

END

注意:类的名称ClassName和过程的名称ClassName__DEFINE的关系,必须严格按照上述格式。即:过程的名称是由类的名称、2个下划线“__”和“DEFINE”组合而成。

用户在设计方法的时候,IDL提供了1个方便控制对象本身的隐含对象,即:对象SELF。 分析程序show3obj__define.pro。

IDL培训教材

9.8.2 编写继承类

根据类的继承性,可以使用基本类(即基类)创建子类。创建子类可以使用包含基类和指定结构变量,并且具有如下格式的过程:

格式:PRO ClassName__DEFINE

struct={ClassName,INHERITS BaseClass, $

data1:value1,…,dataN:valueN}

END

参考例子AnnotateDemo。

9.9 地图投影

对象法下的地图投影可以参考例子,Projectiondemo,该例子的学习参考部分有以下几个方面:

? 对象图形法系统的编写方式;

? 坐标系统的统一;

? 图像、矢量叠加显示;

? 图像及矢量的平移及缩放操作;

? 继承类的使用;

? 投影参数选择与投影创建;

? 图像及矢量的投影转换;

10 快速可视化

10.1 概述

IDL8.0版本开始增加了数据或图像快速可视化的系列函数。调用相关函数可以通过很简单的代码进行曲线、曲面、等值线、图像、地图等图形的快速显示和交互式修改。 如果直接点击IDL工作台的菜单[文件]-[打开文件],选择IDL支持的文件类型如jpg、png、gif、tif、shape等格式时,IDL会自动启动响应的快速可视化函数来显示文件。 10.2 可视化函数

10.2.1 可视化函数

可视化函数是进行快速可视化时的函数(下表),该类函数调用简单、快捷,可视化效果也易于编辑修改。

可视化函数

函数名称

AXIS

BARPLOT

COLORBAR

CONTOUR

ELLIPSE

ERRORPLOT

GETWINDOWS

IMAGE

LEGEND

MAP MAPCONTINENTS MAPGRID PLOT PLOT3D POLARPLOT

POLYGON

POLYLINE

STREAMLINE

SURFACE

TEXT

VECTOR

WIDGET_WINDOW

WINDOW 在已有图形上绘制坐标轴 绘制矩形棒 添加颜色色标 绘制二维等值线 绘制椭圆注记 绘制误差图 获取已经绘制图形的窗体句柄 绘制图像 绘制2D或3D的图例 绘制地图数据 叠加显示地图边界 显示地图网格 绘制曲线 绘制3D曲线 绘制极坐标曲线 绘制多边形注记 绘制曲线注记 绘制流线型曲线 绘制 添加文本 绘制矢量或风向标 创建图形界面 创建一空白图形界面 功能

IDL培训教材

10.3 应用举例

10.3.1 曲线绘制

10-1快速可视化显示曲线

10.3.2 地图显示

图10-2快速可视化Map效果

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

10.3.3 曲面显示

图10-3快速可视化Contour效果

10.4 控制与参数

可视化界面支持鼠标对各个可视化对象的选择平移操作,选择不同的对象,可以通过工具栏上的对应工具进行参数修改。工具栏有打印、保存、恢复视图、撤销、标注、文字标注、颜色填充、线型、符号和箭头等功能。

图10-4快速可视化界面工具栏

IDL培训教材

11 智能化工具iTools

11.1 iTools概述

iTools是IDL6.0以后版本提供的功能强大的交互式分析工具。IDL初学者可以利用这套智能工具快捷轻松地实现数据读入,数据分析和数据可视化,并且可以输出制作令人眩目的精美图形图像。有经验的IDL程序员使用它,可以减少程序开发工作量,甚至可以在iTools框架的基础上创建全新的可视化应用环境。

iTools(intelligent tools)的出现是IDL走向易用性和易扩展性的重要1步。我们可以引用Mohsen Farid 博士的一句话给予iTools1个精确描述:“iTools are excellent interactive visualization tools that allow complete interactivity and control over datasets. iTools are well suited for exploratory type work。”

以往版本的IDL对于数据的可视化工作对采用直接图形法和命令行的方式,虽然简单快捷并且得到了一批用户的认可,但是面对计算机应用水平的不断提高,更多的用户选择基于鼠标就可以完成的简单操作,而不是需要键入指令,iTools则应运而生。iTools是由一批工具箱组成,其中包括iPlot、iSurface、iContour、iImage、iVolume等等。IDL使用者可以通过鼠标进行拖放就可以完成数据的可视化以及分析工作。

iTools 目前提供了下面几种智能工具,如下表所示:

iTools预定义智能工具一览表

工具名称

iPlot iSurface iContour iImage iVolume iMap iVector

用于二维和三维图形。

曲面分析,用于2D数组数据和不规则取样数据。 等值线、等高线的绘制、展示和操作。

图像数据的显示、研究,感兴趣图像区域的圈定和基本操作。 对体数据的剖析和展示工具

用户显示矢量和具有地理坐标的影像数据 用于显示和编辑矢量数据

工具用途

11.2 iTools的使用

11.2.1

数据导入和导出

iTools作为智能化工具,可以方便的进行可视化,但可视化的前提是有数据,数据的导入有下面方式。

11.2.1.1 数据导入

1) 使用文件打开

运行iimage启动可视化界面,然后在菜单[File]中选择Open,弹出如下对话框,选择需要打开的文件就可以。

2) 使用导入向导

点击菜单[FILE]→Import,弹出导入向导。 (1) 从文件导入

a.

选择输入文件名

b. 根据导入数据选择进行可视化的类型

c.

点击Finish完成数据导入

(2) 从IDL下的变量导入

a. 当前IDL系统下的变量列表

b. 根据向导选择从变量导入

IDL培训教材

c.

选择要导入的变量名

d. 根据导入数据选择进行可视化的类型

e.

点击Finish完成数据导入

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

11.2.1.2 数据导出

点击菜单[FILE]→Export,弹出导入向导。 1) 导出为文件

a. 选择导出为文件

b. 选择导出的变量

c.

设置导出的文件名

2) 导出为IDL下变量

a. 选择导出为文件

IDL培训教材

b. 选择导出的变量

c.

设置导出后变量名

11.2.2 数据和对象属性的查看

从菜单[Window]下选择[Data Manager]及[Visualization Browser],分别弹出数据属性窗口和对象属性窗口。

IDL培训教材

11.2.3 显示操作

11.2.3.1 对象选择 选用工具栏上的; 11.2.3.2 撤销/重做 点击工具栏上11.2.3.3 旋转 点击工具栏上

进行旋转处理;

11.2.3.4 数据缩放

的或菜单下[Edit]→[UnDo/ReDo];

11.2.3.5 视图缩放

11.2.3.6 平移 选择工具栏上的

按钮进入鼠标平移状态。

11.2.3.7 视图窗口控制

选择菜单[Window]→[Window Layout]在下面窗口界面中进行个数及位置的设定。

11.2.4

添加标注

11.2.4.1 添加图例

选择菜单Insert → New Legend. 11.2.4.2 添加标注 1) 文字标注

选择工具栏上的进行文字的标注; 常用快捷键:

Ctrl+Enter回车换行; Ctrl+U输入上标文字; Ctrl+D输入下标文字;

Ctrl+N输入正常状态文字; 2) 线标注 选择工具栏上的3) 矩形标注 选择工具栏上的4) 椭圆标注 选择工具栏上的

进行椭圆绘制; 进行矩形绘制; 进行线绘制;

5) 多边形标注 选择工具栏上的6) 自由画线标注 选择工具栏上的11.2.5 公共操作 ? ? ?

? ? ? ? ? ?

文件菜单 旋转操作 图像变换 滤波

形态学处理 直方图 统计分析 ROI操作 打印操作

进行自由画线绘制; 进行多边形绘制;

11.2.6 iPlot使用

使用iPlot可以进行二维或三维曲线的绘制,直接在命令行中输入iPlot就可以出现iPlot主界面,可直接创建数据或章节10.2.1的数据导入功能导入数据。

11.2.6.1 创建二维的曲线 IDL> iPlot, RANDOMU(seed, 20)

11.2.6.2 创建三维曲线

IDL> iPlot, FINDGEN(20), FINDGEN(20), RANDOMU(seed, 20)

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

11.2.6.3 添加图例

选择Insert → New Legend

11.2.6.4 添加颜色棒 Insert → Colorbar 11.2.6.5 曲线滤波处理

首先选择曲线,然后进行滤波处理,下面列出不同滤波方法对应的操作。 平滑滤波:Operations → Filter → Smooth 卷积滤波:Operations → Filter → Convolution 中值滤波:Operations → Filter → Median.

11.2.7 iContour使用

11.2.7.1 交互式绘制等值线

IDL> file = FILEPATH('convec.dat', SUBDIRECTORY = ['examples', 'data']) IDL> data = READ_BINARY(file, DATA_DIMS = [248, 248]) % Compiled module: READ_BINARY. IDL> iContour, data

IDL

培训教材

11.2.7.2 颜色设置

填充设置

11.2.7.3 等值线滤波处理

首先选择曲线,然后进行滤波处理,下面列出不同滤波方法对应的操作。 平滑滤波:Operations → Filter → Smooth 卷积滤波:Operations → Filter → Convolution 中值滤波:Operations → Filter → Median..

11.2.8 iImage使用

11.2.8.1 显示图像

IDL> iimage, dist(200,200)

IDL培训教材

多数据显示时先设置窗口数,选择菜单Window → Layout.

选中第二个view后再点击open,显示效果如图

11.2.8.2 使用图像控制面板

感兴趣区(ROI)工具

常用的矩形、椭圆、多边形和任意曲线来对处理的图像进行感兴趣区的创建和处理。 编辑调色板

使用该功能对灰度图像的进行伪彩色的显示,弹出的颜色表设置界面如下。

显示控制窗口

通过对直方图的调节,调节显示的亮度、对比度,如RGB三通道数据则可以进行单通道的修改。

11.2.8.3 添加颜色棒 Insert → Colorbar.

11.2.8.4 添加坐标轴 Insert → Axis

11.2.8.5 图像处理 1) 重采样

Operation → Transform → Resample.

2) 旋转:数据的旋转

Operations-Rotate or Flip-

有左翻转、右旋转、按角度旋转、竖直翻转和水平翻转等几种方式。

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

3) 显示的旋转 Operations-transform-rotate

4) 滤波 Operations → Filter

IDL培训教材

5) 形态学

可以提供膨胀,侵蚀,变形开放,形态接近,变形梯度等形态学处理。

11.2.8.6 添加等值线 Operations → Contour

IDL培训教材

11.2.8.7 添加曲面 Operations → Surface

11.2.9 iMap使用

11.2.9.1 创建兰伯特投影

IMAP, MAP_PROJECTION='Lambert'

IDL培训教材

11.2.9.2 创建全球的Mollweide投影数据

file = FILEPATH('avhrr.png', SUBDIRECTORY=['examples','data'])data = READ_PNG(file, r, g, b)IMAP, data, LIMIT=[-90,-180,90,180], $ MAP_PROJECTION='Mollweide', RGB_TABLE=[[r],[g],[b]], $ IMAGE_TRANSPARENCY=50, GRID_UNITS=2, $ IMAGE_LOCATION=[-180,-90], IMAGE_DIMENSIONS=[360,180]

11.2.9.3 在其基础上添加等值线

clons = FINDGEN(360) - 179.5clats = FINDGEN(180) - 89.5cdata = SIN(clons/30) # COS(clats/30)IMAP, cdata, clons, clats, /CONTOUR, /OVERPLOT, $ RGB_TABLE=39, GRID_UNITS=2, $ N_LEVELS=10, C_THICK=REPLICATE(2,10)

IDL培训教材

11.2.9.4 导入数据 1) 选择控制点标类型;

2) 选择影像坐标范围默认全球的。

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

3) 点击Finish后纠正后图像

4) 可选期右侧Map面板上的Edit Projection进行投影转换

IDL培训教材

11.2.10 iSurface使用

11.2.10.1 命令行下启动iSurface

file = FILEPATH('surface.dat', $ SUBDIRECTORY = ['examples', 'data'])data = READ_BINARY(file, DATA_DIMS = [350, 450], DATA_TYPE = 2, $ ENDIAN = 'little')ISURFACE, data, TITLE = 'Maroon Bells Elevation', $ COLOR = [255, 128, 0]

11.2.10.2 iSurface打开数据 1) 先启动iSurface

2) 然后点击菜单file→open,选择examples/data/idemosurf.dat 3) 参数设置如下图

IDL培训教材

4) 点击OK

11.2.10.3 iSurface导入数据

1) 选择菜单[File]下的Impot,在向导界面中选择From a File。

2) 选择\examples\data\irreg_grid1.txt为输入文件名

IDL培训教材

3) 根据结果选择显示为Surface

4) 启动ASCII文件导入向导

5) 定义分隔符位空格

IDL培训教材

6) 设定导入后的变量名及类型

7) 启动插值向导界面

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

8) 待插值点信息

9) 设定插值维数参数

10) 选择插值算法

IDL培训教材

11) 点击Finish,插值完成

11.2.11 iVolume使用

1) 命令行下启动iVolume

IDL> file = FILEPATH('head.dat', $

IDL> SUBDIRECTORY = ['examples', 'data'])

IDL> data = READ_BINARY(file, DATA_DIMS = [80, 100, 57]) IDL> IVOLUME, data

2) 进行三维切片

Operations → Volume → Image Plane

11.2.12 iVector使用

1) 矢量场显示

IDL> x = (y = FINDGEN(21) - 10)

IDL> u = REBIN(-TRANSPOSE(y),21,21) IDL> v = REBIN(x,21,21)

IDL> IVECTOR, u, v, x, y, AUTO_COLOR=1, $ IDL> RGB_TABLE=39, SCALE_ISOTROPIC=1

2) 风场标示

IDL> x = (y = 2*FINDGEN(11) - 10)

IDL> u = 9*REBIN(-TRANSPOSE(y),11,11) IDL> v = 9*REBIN(x,11,11)

IDL> IVECTOR, u, v, x, y, VECTOR_STYLE=1

3) 流线型

IDL> u = RANDOMU(1,20,20) - 0.5 IDL> v = RANDOMU(2,20,20) - 0.5

IDL> IVECTOR, u, v, /STREAMLINES, $

IDL> X_STREAMPARTICLES=10, Y_STREAMPARTICLES=10, $ IDL> HEAD_SIZE=0.1, STREAMLINE_NSTEPS=200

IDL培训教材

11.3 开发

iTools是1个完整的框架,从下图可以看出来。当然,理解这样的框架是需要一定的时间的。

有兴趣的读者可参考help的IDL Programmers' Guides > iTool Programming 部分。

70ENVI_IDL 培训教程2011_IDL

12 IDL程序的部署与发布

12.1 IDL的部署

12.1.1 Runtime许可发布

IDL的Runtime发布使得IDL程序可以脱离开发环境,独立运行IDL自身的数据分析和显示功能,使用前IDL的代码都必须编译并发布为二进制的sav文件格式。

需要注意的是,Runtime发布需要独立的Rumtime许可才能运行,其次是程序不能进行编译执行IDLpro源代码文件。

12.1.2 虚拟机免费发布

IDL的虚拟机是1种免费发布可执行IDL的.sav程序的方式。虚拟机可以运行在IDL支持的所有软件平台上,这种方式可以使得IDL程序可以自由、免费的运行在其他人的电脑上。

虚拟机发布存在以下限制:

1)虚拟机必须通过ITT Visual Information Solutions.提供的程序进行安装,不允许进行更改;

2)启动时会弹出虚拟机启动画面;

3)虚拟机只能运行IDL6.0或更高版本的IDL生成的sav文件;

4)不允许执行EXECUTE函数;

5)不支持Callable技术;

6)虚拟机不安装DataMiner, IDLffDicomEX feature, IDL-Java bridge等功能组件,如果用到了这些组件需要安装IDL的完全版。

12.2 IDL的发布

12.2.1 Sav文件

IDL自6.0版本之后的程序和数据都可以保存在sav文件中,sav文件可用虚拟机来执行,创建sav文件有2种方式。

12.2.1.1 单个或多文件创建sav

对已经编译过的单个或多个pro文件生成sav时,可以用save函数。如自定义的函数myFun.pro已经编译,可以用下面命令进行sav的生成。

IDL>SAVE, /ROUTINES, 'myFun', FILENAME = ‘c:\myfun.sav'

12.2.1.2 工程创建sav

对工程的sav文件创建,首先需要在工程的属性中选择创建save文件,如下图。

图12-1工程的构建属性设置

然后选择菜单工程-构建(Ctrl+B)或工具栏上的快捷方式进行工程的构建,在控制台上会对生成的文件名进行输出。

图12-2工程构建的控制台信息

12.2.2 可执行文件(Windows下的exe)

12.2.2.1 单独IDL程序

IDL自7.0版本起下用MAKE_RT命令代替了Export功能,可以依照下面步骤进行。

1) 首先收集相关信息:

A. 选择你要运行的程序的名字;myApp

B. 确定发布的完整输出路径存在,否则make_rt会报错;OutDir

C. 知道包含你程序所有代码的sav文件完整路径;savefile

2) 运行

MAKE_RT过程

MAKE_RT, 'myApp', OutDir, SAVEFILE=savefile

图12-3 make_rt的使用方式

3) 添加额外文件到发布的程序中;

程序中使用到了某些配置文件或基础数据文件则需要拷贝到对应的目录下。如运行系统中没有安装IDL,则需要先安装1个文件来确保其运行。32位系统运行systemdll32_setup.exe,64位系统运行systemdll64_setup.exe,这2个文件的对应目录为IDL_PATH\ bin\make_rt。

4) 修改启动脚本-myApp.ini;

myApp.ini 包含的内容

[DIALOG]

Show=False ;对话框界面是否弹出<True和False>

BackColor=&H6B1F29 ;对话框的背景颜色

Caption=<any string> ;对话框的标题文字

Picture=.\splash.bmp ;对话框需要显示的图像,标准大小480 x 335,若图像大则大的部分显示背景色;

DefaultAction=<path to application> ;运行时执行的代码;

图12-4 修改启动脚本文件

12.2.2.2 程序中调用ENVI

如果IDL程序中使用了ENVI的函数,则在IDL7.0下发布的操作步骤为:

1) 重启idl编译器进程

点击按钮

入.Reset_Session 。 或在IDL的命令行中输

2) 编译当前pro

IDL>.compile myApp.pro

3) 编译系统的基本function

IDL>Resolve_All, /continue_on_error, skip_routines='envi'

4) 保存sav文件

IDL>SAVE, file=' myApp.sav', /routines

5) 后面用make_rt发布

IDL>MAKE_RT, ' myApp ', Outdir, SAVEFILE= saveFile

6) 修改发布后文件夹里面的myApp.ini文件

把文件中[Dialog]下的DefaultAction后面修改为系统安装IDL的IDLrt.exe的完整路径,例如:C:\Program Files\ITT\IDL706\bin\bin.x86\Idlrt.exe -rt=myApp.sav。

图12-5 修改启动脚本文件

12.2.3 COM和JAVA

使用对象导出向导可以将IDL对象输出到COM和JAVA环境中,进而直接缩短接口开发时间,参考12.2中的对象输出助手章节部分。

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

13 混合调用

13.1 IDL功能扩展

13.1.1 直接调用SPAWN

使用SPAWN方式。SPAWN产生1个子的过程来执行1个命令或一系列的命令。如执行系统的画图程序可以用下面命令:

IDL> spawn,'mspaint'

系统会自动启动1个Dos的命令行界面并启动画图程序;

加/NOSHELL,不启动Dos命令行界面;

加/LOG_OUTPUT,启动的程序会最小化;

IDL> spawn,'mspaint',/NoShell

IDL> spawn,'mspaint',/NoShell,/LOG_OUTPUT

也可直接调用文件通过系统默认程序来打开,若格式未知则需要手动选择程序打开; IDL> spawn,'c:\ IDL-test.docx '

13.1.2 IDL调用ActiveX

IDL可以调用微软的组件对象模型(COM)和ActiveX控件,通过这种方式实现IDL功能的扩展弥补IDL某些方面的不足。com组件的调用是IDLcomIDispatch类实现的,ActiveX控件的调用是IDLcomActiveX类实现的。

13.1.2.1

Media Player控件调用

根据Demo 程序[\chapter12\ Test_activex_mediaplayer]分析调用ActiveX的方法步骤。

图13-1 IDL调用Windows Media Player控件

使用ActiveX控件的重点在2个地方:

1) 组件调用为 Result = WIDGET_ACTIVEX( Parent, COM_ID);

使用WIDGET_ACTIVEX的方式跟IDL使用其他组件的方式一样,调用返回的Result为IDLcomActiveX类对象,该类继承了COM组件类IDLcomIDispatch,提供了SetProperty和GetProperty2种方法,并可根据组件的接口描述文件调用组件相关的方法。

2) 组件自身里面的属性和方法,可以按照下面的方式查看其接口描述文件。

该组件的MSDN帮助里面有详细的说明,链接如下

ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/wmplay10/

IDL培训教材

mmp_sdk/interfaces.htm如下图

图13-2 MSDN中的控件信息

通过OLE/COM Object Viewer查看所调用的ActiveX控件,将信息转存为接口描述语言(.IDL)文件,该文件是ASCII码文件,直接打开查看就可以。

图13-3查看信息

IDL培训教材

图13-4 保存显示信息

图13-5 在VisualStudio中查看IDL文件

该描述文件的接口内容分下面几类:

(1) 定义中包含 retval的带返回值的方法在IDL中作为函数进行调用,如下面格式;

[id(0x00000001)]

HRESULT GetCLSID([out, retval] BSTR* pBstr);

(2) 定义中不含retval的无返回值的方法在IDL中作为过程进行调用;

[id(0x00000033), helpstring("Begins playing media")]

HRESULT play();

[id(0x00000034), helpstring("Stops play of media")]

IDL培训教材

HRESULT stop();

(3) 定义中包含propget的方法在IDL中通过IDLcomIDispatch::GetProperty来返回获得

1个对象,如下面的:

[id(0x00000001), propget, helpstring("Returns or sets the URL")]

HRESULT URL([out, retval] BSTR* pbstrURL);

[id(0x00000004), propget, helpstring("Returns the control handler")]

HRESULT controls([out, retval] IWMPControls** ppControl);

(4) 定义中包含propput的属性则可以通过IDLcomIDispatch::SetProperty方法设置1个

对象;

[id(0x00000001), propput, helpstring("Returns or sets the URL")]

HRESULT URL([in] BSTR pbstrURL);

(5) 方法的定义中如包括可选择性输入,如下面例子,包括

optional关键字的参数是可

选择性的;

[id(0x00000004)]

HRESULT Msg1or2InParams( [in] BSTR str,[in, optional] int val,

[out, retval] BSTR* pVal);

(6) 方法中如果提供了defaultvalue()而不是optional,那么后面的参数在调用该方法时

是必须的。如下,第二个参数的默认值为15:

HRESULT

Msg1or2InParams([in] BSTR str, [in, defaultvalue(15)] int val, [out, retval]

BSTR* pVal)

(7) 如果方法的返回是HURSULY,那么该方法是不需要调用的。

1) 在MediaPlayer例子中的应用

获得组件的控制组件部分,即control、setting和版本等信息,其中接口部分

图13-6 控件的主控接口

(1) control下的列表

IDL培训教材

图13-7 控制部分的接口

(2) setting下的接口列表

图13-8 设置部分的接口

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

13.1.2.2 日期选择控件调用

参考程序[\chapter12\ test_inputDate ]

图13-9日期选择控件Demo界面

13.1.3 IDL调用DLL

13.1.3.1 VC++创建动态连接库(DLL)

1) 打开VC++编译器

2) 创建1个Win32 Dynamic-Link Library

Project Name:imageProcess;

动态库类型选择:A simple DLL project。

3) 编写线性拉伸的函数

(1) new1个class,起名为ClinearStretch

4) 将IDL安装路径下的\external\include\ idl_export.h文件拷贝的工程路径下。并将idl_export.h文件添加到工程中。

接着定义C语言的接口类型,添加如下代码

接下来写接口函数,注意,输入参数都在argv[]数组里,由于IDL的所有变量都是矩阵形式,也就是数组,所以输入变量在C语言里都是指针变量,因此应该定义指针变量接收外部参数。

7) Build

13.1.3.2 IDL下调用动态连接库

将imageProcess.dll拷贝到IDL安装路径下:\bin\bin.x86\imageProcess.dll,如不放置则调用的时候dll应写完整路径。

test_UsingVCDLL

13.1.4 IDL使用DLM

DLM是Dynamically Loadable Modules的缩写,它的组成是包括VC等编译器建立的1个动态库(DLL)和1个DLM的ASCII文件。可以进行标量,数据,字符串,结构等的互相传递和共享。

IDL启动时可以自动的载入DLM,只需将dll和dlm2个文件拷贝到bin目录,而且使用的时候DLM中的函数或方法IDL可以直接的进行调用,故此种方式是扩展IDL功能的最好的方式。

例编写1个对灰度图像做线性拉伸的动态库文件和DLM文件,流程如下:

13.1.4.1 编写动态连接库和DLM

1) 打开VC++编译器

2) 创建1个Win32 Dynamic-Link Library

工程名字:imageStretch;

动态库类型选择:An empty DLL project。

IDL培训教材

4) 将X:\....\external目录下的export.h加入到工程中。

5) 将X:\...\bin\bin.x86目录下的IDL.lib加入到工程中。

IDL培训教材

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

IDL培训教材

10) 最后该工程的结构如下图:

编译运行该工程,Debug目录下会生成imageStretch.dll。

13.1.4.2 IDL调用DLM

首先拷贝前面工程中Debug目录下的imageStretch.dll和工程目录下的imageStretch.dlm

X:\...\bin\bin.x86下,然后启动IDL,在IDL命令行中写如下代码,测试DLM:

IDL培训教材

运行程序test_usingDLM对拉伸效果进行检验。

13.2 其他语言与IDL

13.2.1 对象输出助手

可以将IDL的数据可视化与分析的功能添加到其他应用软件中,能够很容易地将IDL对象输出到Java和COM环境,可以通过程序的自动化处理直接缩短接口开发。

13.2.1.1 输出为COM组件

1) 可视化控件ocx输出

traning\chapter12目录下的3个类文件idlitwindowexample__define.pro、

idlitdirectwindowexample__define.pro和idlgrwindowexample__define.pro输出成COM组件并在.net环境下调用步骤如下:

(1) 确保导出对象类程序能正确的运行;

(2) 设置IDL源码路径

源码路径的解决方案有2种

? 文件放在IDL安装路径的相关目录下,如..\IDL708\examples\doc\bridges ;

? 将源码所在路径添加到IDL的路径配置下,添加方法为:

菜单[窗口]→[首选项]窗口中左边[IDL]→[路径]下添加pro所在的路径并进行勾选。

(3) 添加编译器路径到环境变量

IDL培训教材

在系统变量中添加.net编译器的路径,我的电脑右键属性 高级→环境变量 →系统变量 path中添加: C:\Program Files\Microsoft Visual Studio 8\Common7\IDE

(4) 启动导出助手

在IDL命令行中输入IDLEXBR_ASSISTANT回车,启动输出助手界面。

(5) 导出IDL对象类

以IDLgrWindowExample__define为例进行COM导出。

(1) 在输出助手界面中新建COM工程。

IDL培训教材

(2) 选择pro文件

(3) 设置输出参数

同样方式进行另外2个对象的导出,最终的目录如下图所示

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

(6) 对com组件进行注册

一是用regsvr32命令在运行中进行,如下图

二是运行目录下的[com注册添加右键]下的register_in_menu.reg,然后在组件的右键菜单中会添加1个选项Register,点击就可以。

组件提示注册成功。

依次对其他2个组件进行注册。

(7) 引用组件

a. 在.net环境下新建一Windows标准程序

IDL培训教材

b. 添加刚刚注册的组件到控件列表中

c. 将控件拖放到界面上并进行排列

d. 运行效果如下

IDL培训教材

2) DLL组件

以helloworldex__define.pro为例看一下导出为dll并进行数据传递的例子。查看分析下源码中的方法。

(1) 在输出助手界面中新建COM工程。

(2) 设置HelloFrom的输出参数

(3) 发布后注册注册组件

(4) 调用组件

a. 新建Windows应用程序

b. 添加dll的引用

c. 在程序中添加一按钮Button

添加代码后程序界面

70ENVI_IDL 培训教程2011_IDL

e. 运行程序

f. 点击button,正确返回信息

13.2.1.2 输出为JAVA类

与COM类似,可参考IDL Programmers' Guides > IDL Connectivity Bridges > Part II: Exporting from IDL-Using Exported Java Objects

13.2.2 IDLDrawWidget组件

IDLDrawWidget Activex方式是之前版本调用IDL的主要方式,逐渐被com组件方式替代了。但其简单实用,仍然是开发混合调用系统常用的方法。

13.2.2.1 该方法具备下面的特点:

1) 能够通过控件直接显示直接图形或对象图形;

2) 自身提供了鼠标事件的响应;

3) 能够与外部进行数据的交换传输;

13.2.2.2 数据传递方法

通过SetNamedData在C#下进行IDL中变量的创建;

通过SetNamedArray在C#下进行IDL中变量数组的创建;

通过GetNamedData在C#下进行IDL中变量的读取;

ExecuteStr进行命令行的执行,同时也能传递数据;

13.2.2.3 C#下的使用步骤:

1) 建立一windows应用程序;

2) 在工具箱上右键→选择项→COM组建选中;

3) 拖动IDLDrawWidget Control 3.0控件到窗体上 ;

4) axIDLDrawWidget1.IdlPath = 设定IDL库文件目录;

5) 初始化IDL控件

Int n= axIDLDrawWidget1.InitIDL((int)this.Handle);

axIDLDrawWidget1.CreateDrawWidget();

axIDLDrawWidget1.ExecuteStr(“”);执行IDL命令

例子源码WindowsApplication

13.2.3 COM_IDL_CONNECT

COM_IDL_CONNECT与IDLDrawWidget类似,都提供了其他语言下调用IDL的功能。区别在于该组件不提供显示窗口,且在函数功能调用上,COM_IDL_CONNECT的兼容性更好一些。

13.2.3.1 组件调用

以在Visual Studio2005 C#下调用该组件为例,组件的基本步骤。

1) 新建项目

项目类型选择Visual C#下Windows程序,模版选择Windows应用程序,项目名称设置为“UsingCOM_IDL_CONNECT”。

新建工程

2) 引用添加

在解决方案的“引用”上单击右键,弹出菜单中选择[添加引用]。

添加引用

3) 组件选择

弹出界面中弹出的选择工具

项界面中点击[COM]界面,列表中找到

[COM_IDL_CONNECT]并点击确定。如果系统中安装了多个版本的IDL,注意选择你要调用的版本对应的控件。若列表中不存在该组件,点击[浏览]查找IDL目录“…\IDL\IDL80\resource\bridges\export\COM”下的“com_idl_connect.dll”文件。

选择COM_IDL_CONNECT组件

4) 添加界面组件

Form

窗体上添加以个

Button控件,设置Button控件参数并调整控件大小和布局,左侧按钮Name为“UsingCom”,Text为“UsingCom”。

添加界面组件

5) 引用初始化

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

调用组件

13.2.3.2 组件方法

COM_IDL_CONNECT组件提供常用的功能方法(表13.1)。

表13.1 COM_IDL_CONNECT组件方法

方法名称

Abort CreateObject CreateObjectEx DestroyObject ExecuteString

GetIDLObjectClassName GetIDLObjectVariableName GetIDLVariable GetLastError GetProcessName SetIDLVariable SetProcessName

功能描述

中断运行中当前的IDL某个方法 IDL组件对象的初始化

可传参数的IDL组件对象初始化 IDL组件对象销毁

IDL命令执行,功能相当于IDL中的命令行 获取IDL中对象类的名字 获取IDL中对象的名称 获取IDL中变量的值 获取最近一次出错的错误信息

获取IDL中procedure的名称 创建IDL下的变量

设置包含IDL对象的程序名称

13.2.4 Callable IDL

Callable技术是指的利用动态链接库的方式调用IDL的方法。通过该技术,外部程序可以像在IDL环境中一样执行命令行语句和调用相关程序或函数。

1) 建立1个工程

程序中添加IDL_Expot.h,指定输出目录到IDL的路径\bin\bin.x86下,这样运行的时候不需要拷贝动态库到输出目录中,如下图:

IDL培训教材

2) 初始化IDL

int IDL_Initialize(IDL_INIT_DATA *init_data) 3) 执行命令

int IDL_Execute(int argc, char *argv[]);

其中: argc是指在argv[]中的命令数;argv[]是由IDL命令字符串组成的字符串数组。 int IDL_ExecuteStr(char *cmd);其中: cmd是1个IDL命令字符串。 4) 退出IDL

int IDL_Cleanup(int just_cleanup);

参考Demo[chapter12\Callable\ Callable.dsw]

IDL培训教材

14 ENVI功能扩展

ENVI作为功能强大的遥感软件,扩展ENVI的功能包括创建波段和波谱数学函数、自定义数据输入、交互式用户程序和ENVI二次开发等。

ENVI的扩展,包括波段和波谱运算函数,自定义的空间、波谱,或是感兴趣区域(ROI)的处理,用户函数,自定义文件输入程序,批处理,以及其它如报告和绘图工具等。ENVI提供了一系列工具为程序员使用,能够极大地简化自定义程序的开发,并保持和

ENVI一致的外观。

14.1 ENVI波段运算和波谱运算

对于用户来说,扩展ENVI的功能最简单方法就是使用波段和波谱运算函数。用户可以交互式通过波段和波谱运算表达式对话框输入大多数的波段和波谱运算函数。波段运算函数允许用户从任何波段或是文件中输入数据,处理数据,并输出整个波段。波谱运算函数允许用户从图表或文件中输入波谱数据,处理数据,并输出1个波谱。这种模式下,所有的数据的输入输出、获取、波段或波谱函数的调用及结果的输出都由ENVI中控制。因此使用波段或波谱函数进行处理时,用户不需要修改菜单、不必创建参数输入部件,不用执行I/O操作,只需在用户编写的函数中提供数据的计算处理功能。

14.1.1 波段运算

下图通过3个波段的相加说明了波段运算的处理过程。表达式中的每1个波段都对应于1个输入的影像波段,对这3个波段求和并输出结果影像。

这个表达式中的每个变量不仅可以对应于单一波段,也可以对应与1个文件。例如:在表达式b1+b2+b3中,如果b1映射为文件而b2,b3映射为单一波段则结果为b1所对应的文件的所有波段分别和b2、b3进行求和。

波段运算可以方便的进行特定波段的自定义处理,快速高效的使用波段运算需要用户能灵活的应用IDL下的数学运算,参考下表运算符。

Series and Scalar 数学

加 (+) 减 (-) 乘 (*) 除 (/) 最小运算符 (<)

三角函数 正弦 (sin(x)) 余弦 (cos(x)) 正切 (tan(x)) 反正弦 (asin(x)) 反余弦 (acos(x))

其它波段运算选项

关系运算符 (EQ、NE、LE、LT、GE、GT) 逻辑运算符 (AND、OR、XOR、NOT)

类型转换函数(byte, fix, long,float,double,complex) IDL 返回数组结果的函数 IDL 返回数组结果的程序

IDL培训教材

最大运算符 (>) 绝对值 (abs(x)) 平方根 (sqrt(x))

指数 (^) 自然指数 (exp(x)) 自然对数 (alog(x)) 以10为底的对数 (alog10(x))

反正切 (atan(x)) 双曲正弦 (sinh(x)) 双曲余弦 (cosh(x)) 双曲正切 (tanh(x))

User IDL 函数和程序

波段运算时变量的定义必须以“b”或“B”开头,后面为数字且数字位数不超过5。ENVI

波段运算工具的使用有2种方式,数学表达式和波段运算函数。 1.1.2 数学表达式

编写数学表达式进行波段运算的步骤如下:

1) 在ENVI主菜单下,选择[Basic Tools]→[Band Math],在弹出的BandMath界面中,在[Enter an Expresion]里面输入表达式。

2) 点击Add to list按钮,然后在[Previous Band Math Expressions]里面选择输入的表达式点击OK。

3) 在弹出的界面中选择表达式中变量赋需要计算的波段。

IDL培训教材

1.1.3 波段运算函数

编写波段运算函数跟数学表达式相比,在操作上更灵活,函数中可以添加更多的控制,如运算中的错误检测等。

波段运算函数的编写非常简单,接受输入波段,处理数据,并返回结果。以下面的方式定义:

Function bm_func,b1,[b2,…,bn, parameters and keywords] processing steps return,result end

以编写(b1+b2)/ (b1-b2)功能为例,编写波段运算函数步骤如下:

编译函数

编译函数的方法有2种,一是直接编译pro,一是拷贝函数或保存的sav文件到相应的目录下重启ENVI+IDL。

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

1) 在ENVI的主菜单下,选择[File]→[Compile IDL Module],选择函数进行编译; 2) 把bm_ratio.pro或sav文件放入ENVI安装目录下的..\ envi46\save_add下,

重新启动

ENVI+IDL就可以。 3) 执行函数

在ENVI主菜单下,选择[Basic Tools]→[Band Math],在弹出的BandMath界面中,在[Enter an Expresion]里面输入函数调用点击[OK]执行。

14.1.2 波谱运算

下图3个波谱的相加来说明波谱运算的过程。表达式中的每1个变量都被映射为1个输入波谱,对这3个波谱求和并将结果输出到绘图窗口。表达式中的变量也可以映射为文件而不仅是单一波谱,在这种情况下,结果将是一幅新的影像。

波谱运算的操作步骤跟波段运算基本一致,不同之处有:

1) 变量命名以“S”或“s”开头;

2) 执行时ENVI主菜单下,选择[Basic Tools]→[Spectral Math]

14.1.3 几个例子

1) 波段中数据小于0的赋予0

2) 波段中数据值小于0的赋予-999

IDL

培训教材

3) 3个波段求平均值,要求:如该波段小于0则不参加运算。即:某点b1:4;b2:6;b3:0;那

么平均值ave = (b1+b2+b3)/(1+1);

4)

两波段图像b1和b2,波段b1中的云部分(象元值大于200)用波段b2代替

5) 对图像波段,需做以下运算,如b1<0则b1=0,如0<=b1<=10那么b1=b1*100,如b1>10

则b1=b1*10

14.2 用户函数

14.2.1

用户函数介绍

用户函数允许用户为ENVI添加新的功能并通过ENVI菜单进行访问。可以添加任意数量的用户函数,并且每个函数都可以获得它自己的菜单选项。当用户通过菜单选择该函数对应的菜单项时,将会执行这些函数,就如同ENVI的自身函数一样。

用户函数可以是pro或sav,如是pro则与普通的IDL程序无任何区别,一般放到ENVI安装目录下的Save_add目录中,启动ENVI+IDL时用户函数可以被自动编译,单独启动ENVI时pro源码不被编译识别。如果是sav文件,启动ENVI就可以识别。

用户函数pro代码可以随时进行修改,修改后ENVI只需重新编译函数就可以,不需要重新启动。

14.2.2 ENVI菜单介绍

ENVI的菜单系统,包括主菜单和显示窗口菜单,是由ENVI安装目录下menu目录下的envi.men和display.men这2个ASCII码文件定义的。Windows系统上menu的路径为itt\idlxx\products\envixx\menu。

1) envi.men文件结构

该文件定义了ENVI主菜单中的选项,display.men文件定义了显示窗口菜单中的选项。每次ENVI启动的时候,这2个文件被读入并根据其内容构建ENVI的菜单。在菜单中添加内容,只需在这2个文件中添加相应的内容并重启ENVI就可以。

使用任何文本编辑器即可打开envi.men文件。在文件的顶部有些介绍的注释文本。注释结束后,就是如下的文件的结构:

0 {File}

1 {Open Image File} {open envi file} {envi_menu_event} 1 {Open Vector File} {open vector file} {envi_menu_event} 1 {Open Remote File} {open remote file} {envi_menu_event} 1 {Open External File} {separator} 2 {Landsat}

3 {Fast} {open eosat tm} {envi_menu_event}

每一行开始的数据定义了菜单项的层次。0表示最顶层,1表示一级子菜单,2表示二级子菜单,如此类推。

{Open Image File}第1个大括号括起来的部分定义了显示在菜单上的内容。

IDL培训教材

{open envi file}第二个大括号括起来的部分定义了为菜单项所赋给的用户值。用户值在同一用户函数处理多个菜单项时非常有用,可以区别那个菜单项被选中。

{envi_menu_event}第3个大括号定义了菜单项事件处理程序的名称,即编写的用户函数名。该处使用的是用户函数名,而不是用户函数所在的文件名,所以没有后缀。

2) 修改方法

一是可以直接修改菜单配置文件envi.mem中添加“自定义函数”和“文件信息”菜单选项。 二是用函数来修改,ENVI自身有个ENVI_DEFINE_MENU_BUTTON,是这么使用的,如扩展功能函数名称为Envi_file_info,event,那么只需添加个功能过程PRO

Envi_file_info_define_buttons, buttonInfo,然后菜单的添加工作即可在这个过程下完成了。

ENVI_DEFINE_MENU_BUTTON的调用格式如下: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 -作为parent的已存在菜单名; SIBLING -是否创建同级菜单; 参考Envi_file_info_define_buttons

14.2.3 ENVI组件介绍

用户函数可以实现扩展ENVI的功能部分,如果实现仅仅是无用户交互的简单功能函数编写就足够了,但如果涉及到了用户的交互式操作,如参数输入等模块,就会显得复杂了。虽然IDL可以编写通常的组建来满足需求,但在ENVI的功能扩展下面事件的控制就显得不那么方便了。

ENVI提供了以WIDGET_开头的20多个功能组件来满足用户的需要,很多部件都包括“OK”和“Cancel”等按钮方便用户进行交互操作。

14.2.3.1 ENVI下组件介绍 1) ENVI_PICKFILE组件 该组件进行文件选择操作。

IDL培训教材

2) ENVI_SELECT组件

于ENVI中一样,该组件提供文件的波段和范围选择操作。

3) WIDGET_EDIT组件

4) WIDGET_GEO组件

5) WIDGET_MAP组件

IDL培训教材

6) WIDGET_MENU组件

7) WIDGET_MULTI组件

8) WIDGET_OUTF组件

9) WIDGET_OUTFM组件

10) WIDGET_PARAM组件

11) WIDGET_PMENU组件

70ENVI_IDL 培训教程2011_IDL

IDL培训教材

12) WIDGET_RGB组件

13) WIDGET_SLABEL组件

14) WIDGET_SLIST组件

15) WIDGET_SSLIDER组件

16) WIDGET_STRING组件

17) WIDGET_SUBSET组件

18) WIDGET_TOGGLE组件

14.2.3.2 事件管理

IDL编写程序时,界面组件要先用Widget_Base创建顶组件,然后需要用XMANAGER程序进行事件的传递和获取。

ENVI下自动管理事件的组件容器则需要用WIDGET_AUTO_BASE来创建顶级容器(Top Level Base)和AUTO_WID_MNG函数进行事件的管理,此时组件需要添加关键字AUTO_MANAGE。这种方式的应用使得ENVI下的函数扩展看起来比IDL简单的多。

14.2.4

编写实例

以2个例子的方式讲述了简单函数和界面组件函数扩展ENVI的步骤。

14.2.4.1 扩展ENVI简单函数编写

编写1个显示数据文件名及基本信息的功能模块。

1) 修改ENVI下的菜单

在ENVI的菜单配置文件envi.mem中添加“自定义函数”和“文件信息”菜单选项。

3) 添加功能函数

将功能函数添加到系统的\ save_add下有2种方式,一是将pro源码文件拷贝到\ save_add目录,一是保存为sav文件放入\ save_add目录。

a) 源码文件(*.pro)保存sav文件的步骤

i. IDL进程重启

IDL> .Reset_Session

ii. 编译函数

点击菜单[运行]→[编译*.pro]或鼠标点击工具栏上编译按钮

按快捷键Ctrl+F8或在命令行中输入.COMPILE ‘*.pro’;

编译函数中调用到的函数:

IDL> Resolve_All, /continue_on_error, skip_routines='envi'

iii. 保存为save文件

SAVE, file='*.sav', /routines

14.2.4.2 编写ENVI组件事件管理模块

编写1个显示数据文件名及基本信息的功能模块。

1) 修改ENVI下的菜单

在ENVI的菜单配置文件envi.mem中添加“自定义函数”和“文件信息”菜单选项。 ;

3) 添加功能函数

将功能函数或生成的sav文件拷贝到系统的\ save_add下。

14.3 ENVI的二次开发

ENVI的二次开发能够让用户在命令模式下使用ENVI。这种方式在以下几种情况下非常有用:

1) 用户主要使用IDL工作但偶尔需要用到ENVI的函数;

2) 用户希望创建定制的应用程序其中混合了IDL代码和ENVI函数;

3) 用户希望进行大量的ENVI处理而无需人工干预时。

二次开发是通过一系列特定的函数库来执行ENVI的功能,因此为了获取ENVI库函数,有必要了解一下ENVI程序的结构。

ENVI 的功能函数分散在大约50个IDL的 二进制save文件中,这些二进制文件存放在ENVI安装路径下的Save目录下, 在Windows上这些sav文件存放在

ITT\idlxx\products\envixx\save目录下。核心save文件包括了ENVI的基本功能函数,动态运行函数及ENVI函数运行所需的内部变量。

14.3.1 二次开发模式

ENVI二次开发模式的初始化是恢复ENVI的二进制save文件并调用ENVI的命令

ENVI_BATCH_INIT。步骤如下:

1) 启动1个新的IDL编译器,并输入以下命令:

IDL>ENVI, /restore_base_save_files

如果无关键字RESTORE_BASE_SAVE_FILES,最终会启动ENVI;

2) 调用ENVI_BATCH_INIT 程序

调用ENVI_BATCH_INIT等于启动了1个没有GUI的新ENVI。

下面的是批处理初始化的例子:

如果希望在运行ENVI_BATCH_EXIT时不希望IDL也关闭,那么可以在ENVI的主菜单[File]→[Perference]→[Miscellaneous]选项,并确定Exit IDL on Exit from ENVI选项设置为No。

14.3.2 常用关键字及函数

当您熟练使用ENVI二次开发时,将会注意到有几个关键字基本上所有的程序都是具有的,这些关键字涉及了文件的输入和输出。

14.3.2.1 FID

文件ID(FID)是1个长整型的标量。FID为ENVI的程序员提供了1个命名变量,可以被数个ENVI程序所使用,来打开或选择文件。ENVI程序对该文件进行的所有操作都是通过FID完成的。但是,如果用户同时使用IDL直接读取文件,请注意FID和LUN不是等同的。

14.3.2.2 R_FID和M_FID

ENVI处理程序所产生的影像结果也包括1个R_FID,或者称为返回FID关键字。如果结果是存在内存中的,设置R_FID关键字是访问该数据的唯一方法。在掩模处理程序还包括

70ENVI_IDL 培训教程2011_IDL

1个M_FID,或者称为掩模FID关键字,用于确定用作掩模波段的文件。

如果打开文件发生错误,FID将被设置为-1。值为-1的FID是无效的,不能进行进1步的处理。因此在ENVI中进行编程时,总是要检查FID、R_FID以及M_FID是否有效。当遇到1个无效的FID,通常从当前的处理程序中返回。

14.3.2.3 DIMS

DIMS关键字是1个五个元素长整型数组。它定义了处理数据的空间子集。当需要确定FID的时候,用户必须同时使用DIMS关键字确定该文件的空间子集。

DIMS[0]:用于存储指向1个打开的ROI区域的指针,仅在ROI被定义的时候使用,其它时候设为-1

DIMS[1]:采样的起始位置(1个基于0的IDL数组下标)

DIMS[2]:采样的终止位置

DIMS[3]:行的起始位置

DIMS[4]:行的结束位置

14.3.2.4 POS

POS关键字定义了用于处理的波段位置。POS关键字是1个变长的长整型数组。因为ENVI处理的文件可能具有多个波段,而使用POS矢量来确定用于处理的波谱子集。波段从0开始(band1=0,band2=1,…);例如,要处理多波段文件的第三波段和第四波段数据,POS=[2,3]。

14.3.3 文件管理函数

ENVI文件处理函数为程序员提供了相当大的灵活性。有以下的函数可供编程使用,用户可以根据所需的情况选择所需的函数。

14.3.3.1 ENVI_PICKFILE

ENVI_PICKFILE函数产生1个提示用户选择文件的对话框。该函数产生的界面和使用ENVI主菜单选择File->Open Image File一样的界面。该函数并不真正的打开文件,它只是以字符串的形式返回用户所选择的全路径文件名。

14.3.3.2 ENVI_SELECT

ENVI_SELECT产生对话框提示用户从ENVI中已经打开的文件中选择1个文件。该函数产生ENVI标准的文件选择对话框,其中包括空间和波谱子区裁剪按钮,以及掩模波段选取按钮。

14.3.3.3 ENVI_OPEN_FILE

该函数返回1个文件的FID,它是打开ENVI文件的最直接和简单的方法。默认情况下它将文件信息添加到可用波段列表中,可以使用NO_REALIZE可以阻止文件信息加入到可用波段列表中。

注:如果可用波段列表已打开,该关键字无效。

14.3.3.4 ENVI_FILE_MNG

该函数可以打开、关闭或者删除硬盘上的文件。无需用户交互。

14.3.3.5 ENVI_GET_FILE_IDS

该函数返回所有当前打开的文件的FID。

14.3.4 打开文件函数

ENVI能够读取相当广泛的数据格式,虽然ENVI_OPEN_FILE仅能够打开具有ENVI头

文件的影像文件。ENVI也提供了一些特定的处理程序能够打开和返回外部格式的文件:

ENVI_OPEN_DATA_FILE

该函数打开ENVI所支持的外部文件(通过关键字指定文件类型)并返回FID,无需用户交互。

14.3.5 获取数据函数

当影像文件非常大时,不宜使用IDL的READU命令将它全部读入到内存中。因此,ENVI提供了2个处理函数能够以小的、易管理的数据块方式读取影像数据。这2个函数也提供了数据逻辑组织,一次1个波段或是一次光谱切片。

14.3.5.1 ENVI_GET_DATA

该函数从1个打开的文件中获取影像数据。它每次只返回某一波段的数据。如果所需的空间数据不止1个波段,必需多次调用该程序以获得该相应波段的数据。数据的范围由DIMS关键字控制。

14.3.5.2 ENVI_GET_SLICE

该函数从1个打开的文件中获取波谱影像数据,它返回影像某一行所有波段的数据值。结果以BIP或BIL的格式返回。

14.3.6 感兴趣区函数

很多ENVI函数提供了使用ROI进行影像的空间选取选项。在ENVI的函数中,DIMS关键字用于定义空间选取。DIMS变量的第1个元素称为ROI指针,如果它被定义,则表明影像是基于ROI进行空间选取的。如果ROI指针设置为-1,表示没有使用ROI。用户可用使用ENVI_GET_ROI_DIMS_PTR正确的设置ROI指针。

14.3.7 数据保存函数

ENVI影像格式可能是最简单的数据格式。它是二进制文件,栅格影像数据以二进制数据流方式按BSQ、BIL或是BIP的存储顺序存储。文件中只有影像数据,头信息没有嵌入到文件中。当使用WRITEU程序将二维或三维影像数据写入到磁盘时,IDL自动生成二进制格式文件。ENVI格式的影像文件可用使用任意的名称,并且无需扩展名。

同时每1个二进制文件都伴随有1个ASCII格式的头文件,这个头文件描述了影像的基本特征以及附加信息。为了ENVI能够识别这个头文件,它必需和影像文件具有同样的文件名,并以.hdr做为扩展名。

14.3.7.1 将影像数据保存到内存

当用户函数的结果是包含在IDL数组中的影像数据时,这些数据可用以内存方式被ENVI所使用。

ENVI_ENTER_DATA

该函数将IDL数组中的数据输入到可用波段列表中,该程序自动的设置ENVI的头文件,该文件同样也存储在内存中,并返回内存影像的FID。一旦影像出现的可用波段列表中,它即可像其它ENVI影像一样使用,也能够被存入磁盘。

14.3.7.2 将影像数据存入硬盘

由于IDL的WRITEU函数能够产生ENVI格式的文件,ENVI没有提供单独的程序来将

IDL培训教材

14.3.7.3 ENVI_SETUP_HEAD

使用该函数写某个已存入磁盘的影像数据的ENVI头文件。使用OPEN关键字,允许将影像文件输入到可用波段列表。ENVI_SETUP_HEAD函数也能够返回磁盘上影像文件的FID。

14.3.7.4 添加投影坐标信息

对数据文件添加投影信息,也就是将投影信息写到ENVI数据的头文件中去。明确ENVI的头文件信息数据中投影坐标信息的内容和格式。

以1个全球的数据[180,90]为例,如写入WGS-84的经纬度投影信息,则需要明确下面的内容。

mc = [0.5D,0.5D,-180,90];这里的前面2个值代表的是图像的起点位置,[0.5,0.5]表示的是左上角第1个像素的中心位置为起点;[-180,90]表示左上角该点对应的地理坐标信息,我们想显示全球的数据,故设为[-180,90]。

ps = [2,2; 代表的是像素的分辨率,经纬度投影默认以度为单位,[180,90]的数据代表的是全球[36,180],故设置为[2,2]。

创建经纬度的投影类型:proj = ENVI_PROJ_CREATE(/geographic)

创建经纬度的map信息: mapInfo = ENVI_MAP_INFO_CREATE( $

name = 'Geographic', $

mc = mc, ps = ps, $

proj = proj, /GEOGRAPHIC)

IDL培训教材

14.3.8 实例编写

14.3.8.1 调用ENVI实现自动校正

参考ENVI帮助中的envi_auto_tie_points_doit和envi_register_doit,调用数据[chapter13\自动配准];

14.3.8.2 批处理格式转换函数实现

创建简单界面,自动对文件进行重命名,能够批处理将文件转换为tif格式。

三 : 2014年山东省初中教师课例研究全员研修

2014年山东省初中教师课例研究全员研修

英语学科课程简报

第二期

监制:梁承锋 于月清

责任编辑:崔怀亮

制作:崔怀亮王丽珠王建涛李爱燕 刘菊

“磨课的目的绝不是让每个研修组去打造一节优质课,而是要发现从实然状态走向应然状态存在的问题和障碍,进而用研修组的团队力量,用远程研修的协同智慧、专家智慧寻找问题的解决之道。”

张志勇

认识你自己---古希腊德尔菲阿波罗神庙上的三句箴言之一

离每个人最远的,就是他自己

尼采

要想知道这个世界时什么样子,首先要知道自己是什么样子。康德

课堂观察---作为教师,认识自己的最好途径


去芜存菁汲取智慧

首席专家于月清

在学习杨教授的《课例研究中的课堂观察技术应用》视频讲座之后,老师们需要提交的作业是设计一份运用课堂观察技术的课例研究方案。杨教授以“学生小组合作观察设计表”为例,给出了完成该作业需要思考的5个引导性质的问题。在此,我们就青岛第43中樊涛老师的《学生小组合作观察设计表》进行点评,希望老师们能从中得到启发。

1、对表格项目要求的理解情况

《设计表》通过5个引导性质的问题,引导我们观察量表设计前进行系统的思考和准备,这是顺利完成课堂观察任务的基础。因此,理解表格项目要求是我们完成这份作业的前提。从表格内容可见,樊涛老师对该表项目问题理解比较准确。

2、观察内容明确、具体

观察内容的确定是课堂观察前重要的工作,也是一切观察研究的基础。“课例研究组成员之间如何分工”就是每个研究成员在课堂观察活动中分别承担什么工作,也就是说,每个人分别负责观察什么,因此,明确表述观察维度、视角和观察点是做好分工的重点。樊涛老师从4个维度设计了自己的观察内容,分别是学生学习维度、教师教学维度、课堂文化维度和目标达成维度,以及每个维度下的观察点,比如学生发言、参与度;教师合作任务的设计、教师指导情况;学生表现、师生互动;知识目标达成、重难点突破。虽然个别地方表述还需要进1步完善,但观察内容已经十分明确、具体。

3、成员分工详实

樊涛老师从每个维度有几个人,每个观察点有几个人,甚至坐在什么地方都详细真实的做了分配,十分清晰。

4、表格内容陈述情况

表格中“大致想法(意图)”和“具体做法(措施)”,是对表格五项引导性问题的落实,也是检验我们是否能够清晰解决课例研究与观课密切关联的基本问题。樊涛老师的设计在该方面存在的问题是:第二项和第三项问题的“具体办法”陈述不够全面,应该对要观察的各项内容分别进行介绍。

5、记录符号发明情况

符号就是记录观察信息的1种快捷形式。发明符号要坚持易写、易记的原则。要根据观察内容的分类,对符号进行分类,同时也要通过符号体现观察信息的层级。樊涛老师通过黑白2种“”号对学优生和学困生提前加以区分,这个在课堂上不需要用,对小组合作中学生每次任务的参与度统计氛围4个层次,并分别表示为:

很好

较好

一般

较差

其中前3个符号不易写,不能实现快捷的目的。因此,这样设计符号有些不妥。另外,对其他内容的记录符号在表中没有显示。

6、语言表达情况

樊涛老师的设计内容语言表达条理、清晰,表述言简意赅。

详情请见下表

学生小组合作观察设计表

青岛第43中樊涛

课例研究中的问题:学生小组合作的有效性

你的大致想法(意图)

你的具体办法(措施)

课例研究组成员之间如何分工(假定有10位成员)

假如该班级有40名学生,将学生按照四人一组分为十个小组,按照观察内容为10位老师分配任务。

观察维度设计为4个方面:

1.学生学习维度(6位):

(1位)教师坐于讲台一侧,统计学生的发言情况;

(5位)坐于2个学生小组之间,倾听、观察小组讨论情况,记录参与度,并对完成任务情况进行记录;

2.教师教学维度(1位):

(1)记录教师设计合作任务,各小组完成情况;

(2)记录教师指导小组合作情况。

3.课堂文化维度(2位):

(1位)坐于讲台另一侧,观察学生在合作中的表现情况,课堂表现状态。

(1位)师生语言的互动情况记录;

4.目标达成维度(1位):

(1)知识目标完成情况,根据检测情况统计结果;

(2)观察课堂中重难点的突破情况。

使用哪些符号代表不同的合作状态(即发明一些大家统一使用的符号代表某种含义)

采用符号和纪实性语言相结合的办法进行统计。

1.学生发言情况统计:

课前教师拿到本班全体学生座次表,并对表中学生情况进行标注:学优生

学困生

然后每位学生发言就在其座次上打√

2.小组合作中学生每次任务的参与度统计:

很好

较好

一般

较差

3.课堂中学生参与的状态也可以用这些符号表示,而且教师也容易记录。

如何做记录(即如何使用上面的符合在课堂中收集信息)

设计成观察量表,由教师根据具体内容进行统计。

1.学生发言情况,教师针对座次表进行打钩统计,非常方便;

2.课堂中学生小组合作的任务可能有两次以上,教师用圆圈覆盖面的多少,记录每次任务中小组内学生的参与情况,正好是四人组,便于记录;

3.观察学生上课状态亦是如此,通过园覆盖面来展示学生参与的深度和广度。

如何汇总记录的结果(即记录的结果如何整理或表达)

将数据和图像转化成描述性语言。

课后,负责观察课堂的10位教师先对各自负责的内容进行整理,然后召开评课会议,对课堂观察情况进行集中梳理。

怎样反映学生小组合作的有效性(即整理后的数据结果说明什么)

召开上课教师和观察教师会议,对结果进行反馈,发现问题,提出整改意见,便于下1步实践。

1.学生发言情况统计:因为之前有座次表,并标明了学优生和学困生,负责此项数据的教师课后进行统计:全班学生发言覆盖面百分之几、最多几次、最少几次、每个小组发言几次、其中学优生几次、学困生几次,通过数据可以看出学生的参与度的同时,更能体现小组的合作情况及教师面向全体的情况;

2.负责“教师教学维度”的教师陈述记录的每次小组合作任务内容及教师参与指导的情况,负责观察“学生学习维度”的5位教师分别陈述每次任务中小组合作及完成情况,共同分析教师合作任务设计的是否恰当,形成统一修改意见。

3.负责“课堂文化维度”的教师陈述整体学生参与的情况,每次任务中学生的状态,同时陈述教师激励性语言的运用情况,学生的奇思妙想。

4.最后负责“目标达成维度”的教师反馈学生检测情况,特别是重难点的突破情况。

根据以上观察数据,全组教师提出修改意见。

静心思考、摒弃浮躁

——运用课堂观察技术作业点评

杨玉东(上海市教育科学研究院)

在学习了《课例研究中的课堂观察技术应用》以后,作业要求是这样表述的:“假定你所在课例研究组(备课组或教研组),想要研究“学生小组合作的有效性”,请设计一份该课例研究中运用课堂观察技术的方案。”为了便于老师们思考,特意设计了1个便于思考和填写的“学生小组合作观察设计表”,表中给出了完成该作业需要思考的5个引导性质的问题。

在浏览了学员们的部分作业后,惊讶地发现1个方向性的理解错误:那就是有小部分老师居然把这份研修作业当成了老师要布置给学生的作业,设计的是如何在课堂教学中把学生分成小组、让学生自己记录小组合作的情况!更让我惊讶的是,有极个别指导教师也这样错误地理解了!好在,大部分指导教师没有这种理解上的失误,有些学科指导小组还理解得很透彻,在给学员的指导意见中说得那么清晰明白!引用《初中语文学科4号公告》中对该作业的解读:

今天的作业是:“假定你所在课例研究组(备课组或教研组),想要研究“学生小组合作的有效性”,请设计一份该课例研究中运用课堂观察技术的方案。”提醒老师们注意,这是一份“运用课堂观察技术”的方案设计,要求设计者站在1个观察小组的组织者的角度,去落实组内成员如何去观察一节课的小组合作的得失:你打算怎样明确10位课例研究组成员的观课分工,从哪些维度观察小组合作的进程,哪些人员负责哪个维度;用什么样的方式去记录观察的内容,如何去整理观察得到的数据,如何对这些数据做出理性的分析,等等,一定不要做出“我是如何进行小组合作的”的设计。(引自:张会,《初中语文学科4号公告

课例研究本来就是教师开展教研活动的1种形式,课堂观察技术又是课例研究中方法角度的支持,直白一点说,就是一群老师坐在教室里观察课堂、研究课堂教学中的某个问题。一小部分老师对这个作业的定位不清,很明显,没有看到学习导引中对该作业的要求。这让我想到,越是远离现场的学习,越需要静下心来,耐心细致地按照要求阅读学习材料,而不是为了急于完成研修任务,直接跳跃到“作业”部分。我深信,看过学习导引、看过要求阅读的ppt或者录像的老师,不会在这份作业中暴露出这份作业的主体是谁还搞不清楚的问题。

接下来,我想对这份作业中学员们设计的方案发表一些感受(或称之为评论)。这份作业其实让学员站在课堂观察“策划者”的角色思考:课堂中学生之间的小组合作如何被观察课堂的老师记录下来并最终反馈该小组合作的有效性究竟如何?该作业的难点在于,要发明记录“符号”——用不同的记录“符号”表明小组内合作的各种情况。

在我所看到的发明的大多数符号中,采用了简单化的处理,即把ABCD等同于分数或等级,例如:

A表示合作好;

B表示合作比较好;

C表示合作一般;

D表示合作较差或基本没有合作沟通。

这样的符号本身就是1种等级(其实A等同于“优秀”、B等同于“良好”、C等同于“合格”,D等同于“不合格”),这样以来,其实面对学生的合作状况,无异于直接“宣判”了他们小组合作水平或者有效性,与依据经验直接判断没有什么本质的差异。

运用课堂观察技术,在理念上有1个基本的站位:学会基于观察事实发表观点。因此,1个好的记录方法,应当是由符号记录不同情况事实状态(记录)、通过汇总各种符号表达的事实性的结果(数据整理)、最终得到1个判断(结果或结论)。尽管这个判断也是带有经验色彩的,但毕竟把记录到的事实前置到了经验性判断之前。例如,有老师采用了如下符号体系:

A表示学生的合作交流讨论状态

A1积极参与小组讨论

A2偶尔参与讨论,不是很积极

A3不参与讨论

B表示学生的合作动手操作状态

B1积极参与动手

B2偶尔参与,不是很积极

B3不参与动手

C表示学生在合作交流时对他人观点的态度

C1悉心听取他人正确意见

C2适中

C3听不进别人意见

(引自:孟庆峰,济南党家中学)

该记录的符号体系就是1种基于观察事实的记录方法(尽管还可能有需要修改完善的地方)。首先区分了A、B、C3类在小组合作中可被观察到的行为类别,每个类别里又分别发明了1号、2号、3号3种水平。实际上这个方法首先揭示了学生的行为类别、其次判断该行为类别的程度,最终通过百分比的形式来反映该小组合作在不同维度上的有效性。这种“有效性”就不是简单得说“优秀”或“合格”,而是区分了事实性的类别,并通过记录结果的汇总得到。

当然,也还有更加完善和优秀的设计,例如李文彦老师(济南第二十七中学)设计的方案由一系列文件构成,很具有操作性但背后也有可以理论角度解读的深度。但不管是哪种设计方案,只要能够牢牢地把握核心:发明符号对事实分类记录、基于事实汇总得到数据并进而做出判断,而不是直接地表面化地应用符号给1个经验性判断。

总之,课堂观察技术的核心就在于分类、分层。只要能够分出类型、层级,就能够对教学现象做出区分和程度的划分,进而就能得到汇总的数据,做到基于观察发表观点。


“任务单”带来的思考

省专家 杨淑平

每年看作业的过程都是1个令人心潮澎湃的过程,澎湃于某些老师对于研修的敷衍态度,又澎湃于很多老师对于研修沉迷的境界,最澎湃于老师们思考层次的极大差别。这种差别让我深深叹息每个人在研修中的收获会给自身的成长带来的影响,会给我们的学生发展所带来的影响,每每于此,便会在心中叹息。于是,便写出自己的想法,与大家共享:

一、任务单的生成过程

基于问题的课例研究是1个研修组集体协作的过程,那么任务单也应该是1个研修组集体智慧的碰撞与生成。它的生成过程可以如下设计并操作:

1.学习研修内容,理解基于问题解决的课例研究的流程与目标。

2.研修组长集中研修组成员进行讨论,用话题进行导引,生成任务单。

研修组长要针对讨论目标(任务单)设计讨论过程,用话题导引讨论过程。如,在此讨论中可以设计如下话题:

(1) 反思我们的教学实践,提出你认为最严重和最急待解决的问题。

(2) 站在学生主体的角度,请老师们对问题进行描述。

(3)很多教师认为某问题是我们日常教学中最严重、最急待解决的问题,那么我们就这个问题进行现状分析—问题及原因剖析。

(4)针对问题和问题形成的原因,基于各年级学生的不同水平,请大家提出适合自己学生的问题解决策略。

(5)针对蒋院长对于基于问题解决的课例研究,谈谈大家的磨课计划。

3.研修组成员在话题导引下进行问题研讨。

围绕话题1的研讨,汇集问题、梳理问题。通过话题2的研讨,锁定研究问题、表述研究问题。通过话题3的研讨,针对研究问题进行归因分析。通过话题4的研讨,选择解决问题的策略。通过话题5的研讨,进行磨课安排。也就是说,研修组长在讨论中至少要发布5-六个话题,当然也可适当整合。

4.教研组长汇集梳理老师的研讨内容,填写任务单。

二、任务单各项目之间的关系

任务单主要包括4个项目:希望研究和解决的教学问题、对问题及原因的剖析、问题解决策略的选择、下学期问题解决的磨课安排。

希望研究和解决的教学问题(研究问题):要注意表述准确规范,让大家易于理解,同时要注意基于学生行为进行问题描述;关注研究问题的聚焦度,问题定位不能过于宽泛,从而保障研究过程的可操作性,问题解决程度的可观测度。同时,尽量保证研讨中研修组成员的参与度从而保障研修组成员对研究问题的知晓率,为下阶段的校本研修做好铺垫。既然大家集体碰撞锁定了问题,那么这些问题是如何产生的呢?进入对问题归因的环节。

对问题及原因的剖析:要来源于对日常教学实践的反思,并清晰条理地阐释这些原因。原因分析直接决定解决问题的策略选择。锁定了研究问题、对问题进行了归因之后,如何解决这个问题呢?生成解决问题的策略,并进行有效策略的选择。

问题解决策略的选择:策略的选择要有针对性,针对问题和问题产生的原因选择有效的教学策略解决问题。有了教学策略,也就有了解决问题的措施,有了课堂某些突破问题环节的活动设计。那么,如何让老师在课堂中,通过运用这些策略解决所期待解决的问题呢?安排课例打磨,聚焦问题解决。可采取三次备课两轮打磨的基本式课例打磨方式。

这是1个完整的问题解决的过程设计。

三、制定任务单的目的。

制定任务单的过程是1个发现问题、梳理问题、锁定问题、归因问题的过程,也是1个预设问题解决的过程。它是磨课计划的雏形或者表格式表述方式,在下阶段的研修中它将会转化成磨课计划,是校本研修的第1步。因此,任务单的各项目都要注意可操作性、可观测性,以免课例打磨过程无法进行。同时,在任务单的生成过程中,引领老师们体验通过反思发现问题、通过研讨梳理锁定问题,通过碰撞生成解决问题策略的过程,也会使老师们更深刻的感受到集体协作的优势,掌握集体研讨和反思、梳理问题的方法。

四、案例分析,深入理解任务单的生成过程和作用

案例1:

2014年初中全员远程研修问题解决任务单

希望研究和解决的教学问题

如何激发学生学习英语的兴趣,使学生能够自觉自主学习英语

对问题及原因的剖析

英语属于语言应用性学科,而在我们的现实生活中却很少用到,而且英语单词数量庞大,零散,语法繁琐,使学生对英语学习厌烦。

问题解决策略的选择

1、丰富教学内容,增加英语课堂的趣味

2、增加英语的使用频率,带学生认识英语的实用性

3、迎合学生兴趣,组织学生观看英语电影(电影由学生推荐,教师审查,选择合适的电影)

下学期问题解决的磨课安排

9月19日,下午,组织学生观看电影,之后讲解其中比较酷,比较有使用价值的句子

10月17日下午,组织学生用电影中,课本中学到的对话进行表演

备注

英语课堂可用到的一些教学方法

点评:本研修组的任务单内容完整。但是,从任务单的内容看,老师们对于任务单制定的目的理解不到位。任务单是通过研修组的集体碰撞梳理日常教学中的问题,然后通过基于此问题解决的课例打磨呈现问题解决的策略。因此,策略选择应该是课堂教学策略的选择,磨课安排应该是课例打磨的安排,而不是解决此问题的课外活动安排。修改建议如下:

问题表述:“如何激发学生学习英语的兴趣,使学生能够自觉自主学习英语”这是1个教师行为问题的描述。问题描述如果是对学生学习行为的描述会更好,可以如下陈述:学生学习兴趣低下,不能自觉自主地进行英语学习。

那么,针对此问题进行原因分析时,首先要抓住几个关键词:兴趣低下、自觉学习英语、自主学习英语。那么造成学生兴趣低下的原因和学生不能自觉学习英语是有相关的,而自主学习则属于学习能力的范畴。因此,原因分析就要针对这2个方面展开,教学策略选择也要针对这2个方面进行碰撞和选择。

对问题及原因的剖析:

1.造成学生学习兴趣低下,不能自觉学习的原因:脱离情景进行教学,造成学习过程枯燥无味。教学内容脱离学生生活实际,造成学生对语言理解的障碍。

2.造成自主学习能力不够的原因:在学习活动设计时,忽视引领学生进行学习策略的体验,因此学生欠缺策略意识,难以高效地进行自主学习。

问题解决的策略选择:

基于教材内容和学生经验,创设情境,引导学生在情境中进行体验式学习和运用。

挖掘教学资源,整合教学内容,引领学生从生活走入课堂,从课堂回归生活。

在学习活动设计中,关注学习策略的体验,让学生逐渐掌握自主学习的方法。

下学期磨课安排:

1.磨课对象:初一、初二、初三针对此研究问题,针对学情各打磨一节课例,展示在不同的年级解决此问题的策略,观察问题的解决度,形成3个年级间有效策略的对比。

2.活动及时间安排:1个月完成1个课例的打磨,选择10月份的第1个模块的听说课。

第一星期:确定课例和授课人,进行个人备课。

第二周:备课组集体研讨,形成基于同伴互助的备课。

第三周:上课、观评课,观测研究问题的解决,分析策略的有效度。

第四周:形成三次备课,备课组写出总结反思。

第五周始:3个年级间的研讨,进行方法推广。

学期最后1个月:进行调研分析和课堂测评,监测策略落实情况。

除了以上问题外,还有以下几个共性的问题,需要大家注意,仍以案例的方式呈现。

案例2:

2014年初中全员远程研修问题解决任务单

希望研究和解决的教学问题

如何正确表达英语句子。

对问题及原因的剖析

在实际教学过程中,很多学生受汉语的影响,不能写出正确的英语句子。究其原因:1.分析不透句子成分。2.词性了解太少。语法太薄弱。

问题解决策略的选择

1.加强句子结构的教学。

2.教单词时,注重让学生掌握词性。

下学期问题解决的磨课安排

预定下学期4.5周根据七年级第4单元和第5单元 内容展开混合式课例研究。

备注

对于基于问题解决的课例研究,想与专家和同行交流的想法。

点评:"如何正确表达英语句子",这个问题的表述存在问题,如果用“学生难以运用较为准确的英语进行语言表达”会更好。再者,要提高学生的英语表达能力,还是需要在语境中引领学生在体验语言、总结规律、练习和运用语言的过程中生成语言能力的。因此,建议徐老师和研修组的老师进行再研讨,定位研究问题、选择有效策略、安排磨课过程,为下阶段的校本研修做好铺垫。

案例3:

2014年初中全员远程研修问题解决任务单

希望研究和解决的教学问题

如何培养英语学习兴趣和提高学生自信心,进而提高课堂效率。

对问题及原因的剖析

1.教师讲得多,学生练习少。

2.由于学生水平不同步,个别学生基础差,底子薄,从小学就存在信心不足,有畏难心理。

3.教师教法单一枯燥,学生兴趣不足。

问题解决策略的选择

1.巧妙设计课堂环节,诱发学生学习兴趣。

2.精心创设情景,激发学生兴趣。

3.运用电教手段,寓教于乐。

4.发展亲密师生关系,亲师信道。

5.创设成功机会,提高自信心。

下学期问题解决的磨课安排

暑假开学后,我们打算每周安排两节磨课,集中评课,然后上公开课。

备注

对于如何更好提高,还有待于同行们提供宝贵经验及专家老师的悉心指导。

点评:本研修组提交的案例中有几个亮点可以共享:1. 研究问题:兴趣和信心对学习效率的支撑。2.原因剖析:从教的主体、学的主体和教学过程进行了实实在在的现状分析。3.策略选择围绕研究问题的解决,针对教学现状的改善,实效性强。但是,磨课安排不足以支撑问题的解决,此过程设计需进行进1步的思考和改进。建议杨老师带领研修组成员进行二次碰撞,实效地安排磨课活动,完善本任务单。那么,这将是一份儿非常具有可操作性的任务设计。

我们看到那么多研修组长都在积极参与、深入思考,但是也有不少研修组没有按照要求做作业,有的直接将现成的论文上传为作业。有的研究问题定位则过于宽泛,是1个课例打磨难以承载解决的问题,而是需要课前、课中、课后整个教学过程的优化才能承载的。

只是自己的一点儿想法,但愿能给大家带来些许的启示,期待大家完善后的精彩作业。

为什么我们需要课堂观察?

省专家 崔怀亮

一看到这个问题,马上就会有人反应:作为教师,我们每天都在课堂中,都在教育学生,我们对我们的课堂再熟悉不过了,还需要观察我们的课堂做什么?

其实,我们未必真的了解我们的课堂。如果不信,请您回答下列问题:

1.我们的课堂是由什么构成的?其核心部分是什么?我们的课堂之所以存在的原因和目的是什么?在我们的课堂上,每天都在发生着什么?我们经常为课堂中的什么所困扰?

2.如果我们的课堂是为了学生的学习而存在,那么在课堂中,他们的学习真得发生了吗?如果发生了,那么是如何发生的?他们有多长的时间是在学习?除了学习,他们都还在做什么?

3.如果我们组织学生进行小组合作学习,如何评价他们的学习效果?每个小组有多少人参与了小组合作学习?每个人对于小组合作学习效果的贡献怎样?如何才能保证小组合作学习的效率?

4.教师在课堂中应该处于1个什么位置,充当什么角色,起什么作用?教师如何使学生的学习更有效?

5.教师的中心工作到底是什么?它在哪里发生?如果是在课堂上,那么,在一节课中,我们的课堂上到底一共发生了哪些事件,有哪些现象?这些事件或者现象对于学生学习有什么影响?

如果我们觉得这些问题较大,较抽象,那么,请思考如下问题:

1.我们了解自己每天在课堂中的行走路线和话语习惯吗?这对于学生学习有何影响?

2.提问在几乎每一节课上都要发生。那么,我们提出问题的目的是什么?提问了哪些同学?我们提问的学生是不是就是固定的哪些人?我们是不是只提问了一些考察学生记忆,复制或者回找的问题?我们有没有下意识地让学生思考?或者提问了10个问题,而学生只是在回答“是”或者“不是”,“对”或者“否”?最重要的,我们在提问后是不是给学生流出了足够的思考时间?

3.对于我们的学生,我们了解吗?在上课前,你是:

A先了解学生再上课;B先上课,在上课的过程中了解学生;C我讲我的,管他们呢?

4.我们有没有抱怨过:这道题我讲了十遍了,学生们还不会,真笨,气死我了?我们的抱怨有理由吗?

5.我们有没有思考过,首先了解学生的现有基础,然后才可以开始教学?

6.在学校的教研活动中,我们做了什么?应该做些什么?应该得到一些什么样的指导?

7.我们是不是只有在参加优质课讲课之际,才真正地需要别人对我们的课堂教学提出帮助?

要解决以上问题,我们必须仔细地观察我们的课堂,特别是可以邀请我们的同事一起来“合作观察”(当然,也可以自己观察);我们需要懂一些课堂观察的知识。

从“任务单”作业再谈“任务单”

省专家 王崇

盛夏的齐鲁大地,到处是一派研修的景象,校园小路、办公室、电脑旁……处处是老师们忙碌的身影和研讨的欢声笑语,研修已过两天,老师们研修已渐入佳境。

“基于问题解决的课例研究”是今年山东初中教师全员远程研修的主题,研究的课例是老师要上的课,研究的问题是老师们自已实际教学中需要解决的问题,问题解决任务单的填写成了研修组老师的第一套大餐,凝聚着研修组老师智慧的任务单如约传上了研修平台,各指导老师、研修专家被老师们积极的学习态度所感动,感动于老师们研修的热情、灵动的智慧,也从各地填写的任务单发现了一些问题,借简报一角与各位老师从“任务单”作业再谈“任务单”。

首先,任务单中研究的问题应是教学实践中遇到的问题,而且是教研组全体教师所共同关注、有困惑和亟需解决的,因为课例研究是1种最基本的聚焦课堂、提高教研活动质量的有效研修方式,从促进教师专业水平提升的1种有效研修方式看,可以把“课例”简洁地定义为“以课为例讲道理”,即以实际发生的课堂教学内容为载体,因此研究问题切忌大而全、面面俱到,不要试图通过一次课例研究解决教学中的许多问题,而是追求通过一次课例研究加深对1个小的研究问题的认识,“小”才有可能“深”,有的研修组确定的研究问题非大即空,如:如何提高农村学生的听力和口语水平?如何提高学生的英语运用水平?如何提高学生写作能力?在新课改形势下,如何整合教材?……。

其次,还有的研修组对研究问题归因分析不到位,对研究过程的预设可操作性和目标指向性不强,没有汇集本组老师的集体智慧。建议老师们在问题归因时一定要始终聚焦课堂,从教和学2个方面深挖问题出现的根源。

最后,在问题解决策略方面,各研修组应针对归因提出有针对性的解决策略,这也是全组老师共同提出来的。众所周知,课例不仅仅展现出一节课的授课过程,更需要指出为何这样授课、为何如此改进的研究思路,从而有利于其他教师从一节课感悟到1类课的道理。因此,课例研究实际上也就是“研究课例”的过程,课例研究以学科教学的内容(某节课)为载体,而非一般性的教育问题来表达某个教学研究主题,部分研修组提出了研究的问题,但在问题解决策略方面没有征求别的老师的意见,只是简单地凭自己的主观意识罗列了几条,既没有针对性而且操作性也不强,因此,最终导致磨课计划的安排只能简单地罗列时间,没有具体人员分工和具体时间安排。

当然,还有一定数量的老师没有认真学习研修网提供的各种资源,没有认真关注每期简报的内容,随意用一篇论文代替了任务单,没有收到研修预期的效果。

老师们,天气炎热,但是我们研修的热情依然高涨,相信此次研修必将进1步丰富我们专业生活的新方式,加油!


优秀作业点评

省专家:刘笃军 点评

刘老师在认真学习视频内容的基础上,非常用心的完成了这份作业。在记录、诊断、评价3个层面,将不同的课堂观察技巧运用到课例研究中。观课前,课例研究组成员分工明确,既有观察小组成员对全班分组活动进行宏观观察,也有成员对各小组活动进行微观观察,既有对教师的观察,也有对学生的观察,点面结合,立体交叉。观课中,统一符号,设计表格,可操作性强,通过收集和记录课堂信息,对师生互动程度、学生投入状态做初步分析。观课后,以符号或分数的直观形式汇总记录结果,对教学任务认知水平和学生学习情况进行分析、诊断、评价。这样的观课研究,会让老师们在日常教学中基于观察事实发表观点,基于学习效果诊断课堂,有助于老师们从学识型教师逐步成长为科研型教师。唯一的不足是,在学生小组合作的有效性方面针对性不突出,直接影响到了观察效果的实效性。

为了帮助大家更好的完成作业,省专家王建涛特意根据杨玉东教授的讲座,设计思维导图,帮助大家理清思路。


远程研修,一路上有你

写在2014远程研修

基本情况:华栩,一级教师,36岁,青岛启元学校英语教师。青岛市教学能手,青岛市青年教师优秀专业人才,四方区德育先进个人,四方区学科带头人,四方区教学能手,山东省优质课一等奖,青岛市优质课一等奖,青岛市公开课,四方区公开课,山东省教科研成果二等奖。青岛市英语学科中心组成员,2009年获“全国优秀中小学英语教师出国留学奖学金项目”,赴英国布莱顿大学研修十二周。

又是一年仲夏,远程研修如约而至。“教不研则浅;研不教则空”,远程研修让我们在研修中收获,在研修中提升,在研修中更加脚踏实地的成长。

还记得2010年,第一次参加远程研修的我都还在产假中,因为有过一些教学比赛、公开课的经历和成绩,我对远程研修起初还有些不以为然。然而,随着研修的推进,越来越发现自己其实只是井底之蛙,远程研修向我们展示了1个“山外有山、人外有人”的精彩世界,督促、激励着我们不断学习、进步。

2012年的第二次远程研修中,我荣幸地成为指导教师,指导所在组的两位老师作业都受到了省专家组的肯定,两位老师不仅两次获得省推荐,并且各有一份作业成为全省仅有的两份资源之一。其他老师的作业也纷纷受到专家点评和推荐,研修成果在全市及全省名列前茅。我和所有参与研修的老师们都深受鼓舞,努力将研修的成果运用在教学实践中,不断反思自我、突破自我!

2013年,因为身体原因无法参加前期培训,原本担任指导教师的我重新作为学员参与了远程研修,身体没有痊愈的我还是坚持完成了全部的学习任务,三篇作业均获指导老师推荐,且其中一篇获得省专家的推荐。远程研修再次带我我进步的力量与动力!

今年,我再次作为指导教师踏上了远程研修的征途,我愿与所有的老师一起并肩作战,“路漫漫其修远兮,吾将上下而求索”。

苏霍姆林斯基说过:如果教师要使劳动能够给自己带来乐趣,使天天上课不至于变成1种单调乏味的义务,那教师必须走上从事研究这条幸福的道路上来。感谢远程研修,让我们走在教学研究的道路上,体会着教师真正的幸福。

享受研修,快乐成长

基本情况:李新婷来自济南市历城双语实验学校,曾荣获:全国英语教师技能大赛一等奖;济南市学科中心组成员;济南市优质课一等奖;国家远程研修优秀指导教师;城区教学能手;历城区骨干教师等。

连续几个暑假以来一直担任远程研修指导教师的工作。本以为早已经没有了前几年的欣喜与热情。没想到坐在电脑前依然兴奋不已。指导教师们聚集到一起,我马上被大家学习讨论的氛围所感染,被专家团队提供的实用丰富的研修内容所吸引,被老师们研修的认真态度所感动。我迫不及待的投入到热火朝天的研修中。

我们的研修越来越实用务实。指导教师和学员都不用再为数量而忙碌,更注重质的要求。这次远程研修我们从中观走向课堂,在课标的指引下基于课例的问题研究。这就需要我们把浮躁抛在一边,沉下心来,从积极的角度出发,以认真的态度,来对待我们的研修。相信我们肯定会满载而归。

研修是一颗会开花的树

基本情况:袁吉誉,汶上县第二实验中学英语教师,中共党员,自1997年至今精心致力于初中英语教学教研,连续三年担任省远程研修英语指导教师,多次被评为省研修优秀学员、优秀指导教师和教师教育先进个人。

研修寄语:教师好好学习,学生天天向上。

一样的七月,不一样的流火;一样假期,不一样的生活;一样的相聚,不一样的自我。又是一年研修时,依旧激情澎湃,依然期待满怀。

从09年研修观摩名师上课视频,到2012年模块学习,到2013年的思维导图,再到今年的混合式课例研究,一直作为指导教师的我感觉省课程团队给我们提供了系统的从具体到一般、从方法到过程、从个性到共性、从宏观到微观的学习内容。这其中既有简单的模仿,又有系统的学习;既有方法的传递,又有思维的碰撞;既有传统的传承,又有观念的裂变。一路走来,觉得自己就像一颗小树在研修的催生下根系慢慢丰盈,躯干渐趋强大。

今年的“混合式课例研究”,是从研修组自主制订磨课活动计划开始,将教学的协同研究贯穿在多次备课、上课、观课、议课的过程交替之中。课例研究的内容设计、任务确定和协同研究均由研修组自主商定,再在网上的计划模板生成研修组课例研究任务。要搞好课例研究,“三轮备课,两轮打磨”就显得尤为重要。通过学习,结合已有的教学经验,其实这种活动形式可以归结为:

一人多轮备课需要“磨”。

两人同课异构需要“磨”。

多人协同备课需要“磨”。

团队跟踪听课需要“磨”。

教师个性上课还要“磨”。

有人说,研修为我们搭起一座桥,一座传递知识之桥,一座连接友谊之桥,一座通向未来之桥。但,我想说,研修是肥沃的土壤,是清冽的甘泉,是明媚的阳光,我们的人生之树会在土壤的涵养下、在甘泉的浸润下、在阳光的照耀下逐渐欣欣向荣、茁壮成长、枝繁叶茂。我相信有一天这棵树一定会在枝头绽放出最灿烂的花朵。

让青春绽放在研修的平台上

基本情况:宁福祥,烟台蓬莱小门家中学英语教师,中学高级教师,连续六年是远程研修的优秀指导老师。在平日的教学中,积极组织英语课堂教学研究,多次获得烟台市优质课、公开课,多篇教学论文发表在国家、省、市刊物上。

当学生把在学校里、书本上所学来的东西都忘掉,剩下的东西就是他所受到的教育。当学生把在老师那里学到的知识都忘掉,剩下的东西就是他所感受到的老师的魅力。教师的魅力何存,它存在于作为教师,我们自身的努力学习和不断的反思中。

——题记

忙碌的影子转过身之际,我又一次踏上了学习的征程。今年的研修是个不俗的时刻,我同时抓住了2个学习进步的机会,1个是在鲁东大学工读教育硕士,另1个就是在这里细心地参加全省网络研修。在酷日炎炎的日子里,我通过网络这个平台和许许多多教师一起听课,一起讨论交流。这次学习交流,我依然能感受到自己和名师以及专家团队之间的差距。以前总以为兢兢业业干工作,无愧于心,无愧孩子就是好老师了,在教学理论学习上没有下足功夫,不注意搞教研,因而自己的教学水平进步很小,不能成为专业型和科研型的教师,通过网络这个即时工具看到了我的差距,如梦初醒,再不提升自己,就可能被时代淘汰,因此我要借助这个两条腿走路的大好机会,提升自己的专业理论水平,丰富自己的文化底蕴,加强师德修养建设,我们不再做燃烧自己照亮别人的蜡烛,而要做的是点燃孩子学习、生活、进步的明灯。

对于远程培训,我满怀期待,做好笔记,认真反思,我相信只有努力付出才有回报。我更相信,要想取得超人的成绩,必须付出超人的代价。只有在互相学习中才能有收获、有提升,才能碰撞出激情的火花,才能触动我们真实的内心,才能在实践中有所成。能够和亲爱的朋友们、指导教师、和专家团的朋友们,共享教学资源,不断地学习,思考,总结,每一次专题讲座都认真观看,对每1个案例都互相探讨,对每一份作业都认真的审阅和查改。明白了很多自己平时没钻研、想不透的问题,通过做作业,也开始对教学中出现的问题进行深入的思考,好好的总结解决问题的策略,一些课例给大家展示了不同的视角对新课标有了崭新的认识,将更好的应用到实践之中。在学员的工作室里浏览。品读老师的感言,让人受益匪浅;畅所欲言、思维活跃,展示自我,互相探讨,丰富了知识,获得了体验,分享了成果,感受了远程研修的魅力。

2014远程研修,我们有备而来

基本情况:刘爱荣,潍坊高新区北海学校初中英语教师,兼任高新区初中英语教研员,中学一级教师,研究生学历,潍坊市初中英语教学能手。先后荣获潍坊市第八届教学成果个人二等奖;潍坊市教育教学方法创新奖、燎原奖;潍坊市首届科普园丁奖;高新区优秀教师等。

我们都有这样的经验,如果学生课前对所学知识做了充分的预习,明确了自己将要学习什么,对这部分知识还存在哪些疑问和困惑,然后,学生带着疑问走进课堂,他的学习会更有针对性,思考会更有深度,课堂效率会成倍提高。这就是我们所欣赏的会学习的好学生。

2014年远程研修,我们也要有备而来,做会学习的好学生。高新区教研室就本次远程研修的内容,多次组织全区的指导教师、研修组长、各学校研修负责人及全体参训教师进行培训学习,使每一位研修学员、研修组长和指导教师都提前明确了本次远程研修的主题——基于问题解决的课例研究,并对课例研究的基本流程有了初步认识,因此今年的研修大家不仅学习热情高涨,而且进入角色更快,学习效率更高。

我们还明确的感受到:与往年相比,今年的研修更加强调培训的质性与实效。例如,取消了对评论数量的要求,减少了作业的数量;注重对学员作业的质性评价,淡化量的考察,这无疑有利于提高培训的实效性。同时,本次培训以“校本研修”为落脚点,正如张厅长所言“集中研修是导向、是专业发展的引领,校本研修就是看我们集中研修的理念、途径、方法是否扎根、落地。”所以本此集中研修最终将形成校本研修方案,并在后期的校本研修中依据此方案实施,整个过程一以贯之,因此,我们只有认真做好研修的每个环节,才能确保后期校本研修的顺利开展。

亲爱的老师们,把我们的问题拿出来研讨,把我们研讨的成果付之于行动。让我们一路同行,共同研讨,共同提高!
今年的研修“不简单”

潍坊八中马静

伴随着高温暑热,2014年山东省暑期研修如约而至。几年来,我们的暑期研修从课标学习到技术方面的培训,再到今年的混合式课例研究,与我们的日常教学完美接轨。今年的研修真的是“很不简单!”何谓“不简单”?其一:难;其二:了不起。此处的“不简单”二者兼具。

内容不简单——接地气

混合式课例研究这个名称可能会把一些老师给搞懵了,经过学习我们就明白了其实它就是我们在日常的教学工作中经常做的事情。经过本次的学习,我们会把日常的教学行为做的更加有计划、更加规范化、更加有效果!省项目组的专家团队以长远发展的目标为我们设计了连贯性的学习内容,与我们的日常教学息息相关,让我们重新看待教研活动,重新审视自己的教学行为,经过专家的引领和我们自身的努力,必将带动课堂的进步。这个学习接地气!

完成学习不简单——分散

今年由于我们学校整修校舍,教学楼内一片狼藉:墙皮被刮下来了,网线被撤下来了,地面脏的一塌糊涂。介于这种情况,学校领导向区教育局提出申请,老师们远程研修期间在家自己学习。如果说之前的几年大家自己在家学习没有问题的话,我感觉今年是最应该集中学习的。因为课例研究就是需要群组协作完成的,而今年我们做不到!虽然现在各种联系方式都很方便,但它毕竟不如面对面交流的效果更好。昨天直到下午六点才完成任务单的提交,我很想听听每位老师的想法,可有些老师在QQ上一直保持静默。感谢昨天下午积极参与QQ讨论的老师们!

填表不简单——源头所在

第一份作业是以研修组为单位提交一份《问题任务单》,弄清楚作业要求以后,我知道这个一旦确定,就是我们今后一段时间之内需要去研究解决的问题。这个问题确定的是否恰当、是否有价值就直接关系到我们后边的课例研究是否能够顺利开展。虽然每一位老师都会想到很多实际教学中不尽如人意的问题,但我们不能随便找1个即可了。我先通过飞信和QQ,集中了一下老师们的意见,然后归纳出了大家想法比较集中的3个问题,又召集老师们进行研讨,最终确定了我们的研究问题。“小小一张表,费时真不少!”看似1个很简单的表格,它包含的内容是我们之后一段时间的教研活动的灵魂和源头所在,所以我们认真对待!

今天学习的关于课堂观察技术方面的内容更是至关重要的,对于老师们应该是全新的,我们一起加油!相信经过本次培训,老师们也会变得不简单!

品味研修

莱州市郭家店中学王君志

把一杯香茗,端坐电脑前,任丝丝幽香冲淡浮尘,沉淀思绪,品味研修。忙碌的十指敲击着键盘,充实的心灵品味着茶香,让茶香润泽心灵,让茶味超尘脱俗。

凝神静气,思索:“中观设计”导引下的“课时设计”、以解决“课堂教学实际问题”为主线的研究模式、以“学生学习为中心”的课堂观察……第一遍,异常纠结;第二遍,豁然开朗;第三遍时,已是信手拈来。低首看茶,恍然大悟,这不正如杯中的茶,人们常说:“第一道茶苦如生命,第二道茶香如爱情,第三道茶淡如清风”,我们品味“课时设计”,不就如品茶?茶如研修,你不可能都喜欢。在品味研修的过程中,会不自觉得回味着研修带给你的那份,浓浓的甜、涩涩的苦、淡淡的香。回味研修过程中的点点滴滴,感受着那种来自心灵交融的颤栗。品味研修,品味每一份作业,得到指导老师推荐时,那种受宠若惊的颤动;推荐为〇时,那种失望与落寞,不正如功名利禄来来往往,炎凉荣辱浮浮沉沉。还是拥一份淡泊,守一份宁静吧,如此才能品出研修中的真正味道,让研修变得更加贴切,更加实用吧。也让我们的人生更有底蕴!研修又如一杯白开水,好像没有味道,平淡无奇,却包容了一切味道;看似非常平淡,却蕴藏着波澜。这就是对研修进行三遍思考之后的感觉,那是1种香后的淡。

品茶之味,悟茶之道,就是要用雅性去品,要用心灵去悟。品味研修亦如此。品茶,讲究的是心情。研修,讲究的也是1个怡然的心情,一段视频,心烦意乱的去看,你收获的几乎为零,但是携一份淡定与从容,你看到的就不仅仅是一段文字,而是一副画,一份报告,甚至是1个非常富有内涵的故事……唯有如此,才能品出研修的韵味!唯有如此,才能感受到知识的增多,技能的提高,境界的提升,而不仅仅是酸痛难忍的肩膀,疲惫不堪的身体……

夜已深,闻着淡淡的茶香,悠然自得得敲击着键盘,写下自己心灵深处的柔软与宁静,那样,在烦闷的研修之夜也会是:拥着一份静养之心,没了一点矫饰和浮躁,忘却一切得失和荣辱,只为弄懂什么是观课研究,课后如何评议,如何总结评价……。在这个功利的世界,人人都在为生存而奔波,忙忙碌碌,去实现和拼搏自己的梦想和希望。生活的压力和紧绷的心弦,让人无法释怀那份轻松的心情。人们渴望心静、心安、心清的状态,却好像水中捞月,祈盼远离尘嚣,回归自然的愿望,恰如海市蜃楼。静心沉思,蓦然回首,于研修中觅一方宁静又何尝不可?

茶可清心,淡淡的一丝香甜,柔柔的一缕心音,暖暖的一份真情,那份幽香,那份清醇,那份淡雅,都在默默地品味之中。研修如茶,句短味长。

“研修”初体验

青岛市崂山区第三中学 董海蓉

2013年12月9日-19日,我怀着满腔的期许与憧憬,踏上了有“北方水城”美誉的聊城大地,在齐鲁名校聊城大学参加了山东省中小学英语骨干教师高级研修班的培训。这次研修班的主要任务是对混合式课例研究的学习和探究,同时为2014年暑期中小学教师远程研修开发资源。

我有幸作为研修团队的一员,与许多专家、优秀教师一同经历了混合式课例研究的全过程。在这一过程中,我亲身感经历了研修团队从磨课计划的制定、教案设计、课堂教学、分工观课、课后评议等一系列研讨活动,充分体验了研修群组协同自主的行动研究,从而在之后的教学活动中得到很大提升,个人教学行为也有了很大的改进。真是受益匪浅!研修团队开发的每1个课例都基于教学实践中普遍存在的问题,为老师们提供了良好的问题解决思路和教学方法,值得我们认真学习及用于实际!同时,研修的过程也展示了教师如何发现研究问题,聚焦研究问题,开展专业的观课评课的专业研究过程,为提升教师研究品质提供了良好的研究路径。

在这儿我根据这次研修的学习,简单谈一下个人对这次暑期研修模式及内容的认识。在高研班的学习中,我们首先聆听了专家的讲座,认识了“课例研究”这一新的教研领域。了解到本次研修是基于教师教学中出现的实际问题,以问题为主线的混合式课例研究。与以往的研修有所区别,它旨在双对接教学实践和教学研究。即通过分散与集中、线上与线下相结合的混合式协同研究,寻求教学问题的进1步解决方案,提高教学质量,同时发展整个研修团体的协作解决问题能力。研究问题和研究目标的确定是决定本次研修成果的重要因素之一。以上两点的确立要求立足课标,找出并探求解决教师在服务于学生学习中遇到的普遍性、亟需解决的具体教学问题。其难点在于促进教师具备专业思考能力,从而形成专业行动能力,提高参训教师在课标理解和课标贯彻方面的能力和水平。混合式课例研究让研修不止步于课堂教学的观摩,而要贯穿在教学准备、教学实施和教学评价全过程;让老师不局限于悉教学之术,而要究教学之理,悟教学之道,学会用研究者的态度对待教学工作。

课例研究在流程方面主要是指三轮备课,两轮打磨,并借助现代技术手段在网络平台上全程展示。回顾我们研修团队当时课例打磨的全过程,感触颇深。无论是从所呈现的磨课计划、备课研讨、观课准备、到上课、观课、课后评议,到再次备课、总结自评、在线研讨记录、教案修改文本、课堂观察量表等大量的文字材料,都体现了全组老师作为1个学习共同体科学、规范、严谨的研究过程。值得我们在日常的教学过程中实践运用。其中观课量表的设计、使用和分析是最大的亮点也是最大的难点。它和传统上我们经常进行的听课、议课、评课不同,正是有了观课量表的介入,促使教师课例研究向专业化、科学化方向大大的前进了1步。然而,这部分也恰恰是整个磨课过程中最为困难的一部分。建议同一研修组老师团结协作,最后制定出最为有效的观课量表。

研修中同一研修组老师们的合作学习是老师们进步及教学水平和能力提高的能源。在研讨中老师们必然会经历集中—分散--集中的过程,“课例打磨”过程中“裸备--研讨--再备--实践--研讨—再备…”也必然是1种碰撞、激活、提升的过程。相信通过这个过程,每位教师都会在一次次的颠覆、重整、反思、修改中,像蚕一样地蜕变,最终吐丝结茧,化茧成蝶,脱胎换骨…

脑海中依然回荡着研修带队专家于月清教授说的话,她说:“课例研究”过程就是学习过程、研究过程,学习和研究的内容不仅是发现好的问题,提出好的策略,设计好的活动,还有如何科学地操作机器完成你的工作,如何规范表达你的观点,如何恰当阐述你的理由等等以及在磨课中所做的一切,包括大家如何分工合作,如何和睦相处。当这个项目完成之后,你会发现我们每个人都发生了一次蜕变,我已不再是原来的我,我已经从1个教育者变为1个研究者,从1个课程执行者变成课程开发者,从1个不善于思想的懒惰者变成1个能想善变的智者;我学会了理解、宽容、谦让、虚心,更学会了勤奋与执着;我体会了团队合作之魔力,体会了勇于承担之自信,还有在付出汗水之后的痛快!

研修,磨练我们的意志,更磨出我们教育的智慧;付出,使我们辛劳,更付于我们力量!衷心希望老师们在本次远程研修中积极参与、认真学习、深入思考,真正获得专业成长!

研修,一路与你同行

威海市荣成蜊江中学 梁茜

伴着电闪雷鸣、雨声淅沥,我们的远程研修也在如火如荼进行中。一路上,有满怀希望的期待,也有焦急不安的等待;期待思维的碰撞、认识的提高;等待专家的点评,同行的交流。这里,我静静的观看专家讲座,一颗浮躁的心因为研修而安静;这里,我细细地品味着同行们优秀的作业,一颗求知的心因为研修而满足。

研修,让我又回到了我的学生时代,上课、作业、夜晚、孤灯、电脑,每天都在不断的充电,每天又在不断的实践、反思,讨论、交流。大家都是我的老师,我与大家同呼吸,共进步,一句句真诚的话语,1个个激励的回帖,让我充满前进的动力!

研修,给我提供了这么1个平等互助的学习平台,在专家的引领下,在同行的帮助中,我深深(www.61k.com]地感到了自身专业知识的匮乏,也更深切地认识到:要想适应时代的要求,做家长和学生放心的教师,就应该不断地充电,才能尽快实现自己的专业化发展。

享受研修,每次上网畅游,我会泛起最真的微笑,仿佛饱受干枯的小草,喜临一场春雨的润泽。享受研修,因为这里,没有保留、没有羞涩、也没有等级,有的只是心与心的交流、作品与作品的比较、理解与理解的变化。

一根网线,1个鼠标,连起了研修中的你我他,感动于大家的认真执着、畅所欲言,感觉一路走的好惬意,我享受着研修中的美好的时光。

研修,一路与你同行!

但为君故 沉吟至今

青岛第五十六中学 英语组

久违了——2104年山东省暑期教师远程研修!

四年如一,不改初心,青岛56中学倾全校之力,将研修时光谱写成一首激情昂扬的岁月之歌!——题记

领导重视 理念传承

青岛56中的领导们,一直本着“将远程研修当作学校工作的重中之重”的理念,四年来,研修政策制定、研修前动员等等无不细致到位。研修——但为君故,青岛56中学的领导们,将理念传承之歌,沉吟至今!

教师投入 激情四射

不慕度假,悉心研修。青岛56中的英语老师们,把每一次暑期研修看作是一次难得的“充电”机会。四年来,学校成绩优异,硕果累累!

今年研修第一天,老师们准时到达研修室。不再有时间说说家长里短,不再有精力聊聊三餐口味。珍惜这难得的研修时光,成为大家的共识。这一天,老师们或独自埋头研究,或三两交流讨论。我朝周遭张望,那些熟悉的谈笑身影,都在荡漾:火一般的培训热情,如饥似渴地汲取先进理念知识;我在心底品味,那些熟悉的谈笑身影,

都似静止:目光紧紧地盯着电脑屏幕,心无旁骛地学习优秀教学方法。

窗外,骄阳似火烘烤着大地;室内如火如荼难抑培训热情!

研修——但为君故,青岛56中学的全体英语老师们,将研修激情之歌,沉吟至今!

久违了——2104年山东省暑期教师远程研修!四年如一,不改初心,青岛56中学全体英语老师将研修之歌,沉吟至今!!!

张店区实验中学英语研修纪实

研修才刚刚开始,我们一如既往,用我们火热的情,将 “研修”演绎这段如约而至的别样的美丽。

一、按时到位,认真研修。

尽管是三伏天,老师们都提前到位,做好研修的准备。研修开始,网络出现问题,老师们没有慌乱,组长合理安排,利用ppt,word等形式学习混合式研究课例的相关内容。小组之间,组员之间积极互帮互助,有效地利用了时间,为保质保量完成学习任务提供了保障。

二、群策群力,硕果累累

在宋主任的认真指导之下,我们在观看专家视频后,用心完成问题任务单的设计。过程中,每个组员都积极参与,提出自己最需要解决的教育教学问题,并对彼此的问题提出个性化的见解。最终根据我校的实际情况确定各小组的主题,并完成问题任务单的撰写。本研修部共5个小组,就有4个小组的作业被区指导教师推荐为优秀作业,分别是英语一组,英语二组,英语三组。

三、无私奉献,感动你我

第一天的研修,除了高效,另1个关键词便是感动。首先是我们组的几个特殊情况,张浩老师生病做手术,曾莉老师照顾生病的家人,无法当校参与研讨,英语组的同事就主动帮助她们完成学习任务,观看视频,发表评论,提问问题无一落后。再有,就是实验技术处的老师,为了帮助解决视频播放问题,忙得满头大汗。为了营造舒适的环境,牺牲自己的休息时间为我们打扫卫生、维护电脑,真得让我们感动。

汗水与激情齐飞 收获与快乐同舞

—沂源县燕崖中学远程研修工作生活纪实

这一天,远程研修如期相约,别开洞天:名师课堂里撷一缕清新,专家引导中掬一抔甘甜,网络平台上揽一怀深情,同行交流时采一朵奇葩,如清风拂过脸颊惬意,如花香沁人心脾温馨,如泉水叮咚作响清脆。我们燕崖中学老师冒着酷暑,带着激情,学习着快乐着。但愿汗水与激情齐飞,收获与快乐同舞。

亓建国老师是本次远程培训中我校年龄最大的教师,他在这次培训中身体力行,率先垂范,对待培训兢兢业业。七月流火,燃烧了他学习的热情,他今天早早的来到校微机室,坐在那儿,很有定力,纹丝不动,认真观看视频,撰写评论,妙语惊人。他认真学习,掌握技巧,掌握新的教法,能按照专家的指导去做,深受同行们的赞叹。

有人说世间最美的是春天,我们老师们正在创造着燕崖中学的春天;远程培训就是盛夏里飘香的莲花,我们愿把你深深种在心间。


四 : 初中语文教师远程培训研修日志

初中语文教师远程培训研修日志

姚安县大龙口中学 张洁

作为云南省中小学学科教师远程培训项目初中语文二班的一名学员,在学习中,我自始至终以认真负责的态度,按照学习流程和要求,全程参与了初中语文全部专题内容的学习;保质保量地全部完成或超额完成了必修、选修作业、与其他学员开展互动评论。[www.61k.com]通过学习研修,开阔了教学眼界,拓宽了教学视野,增长了教学知识,交流了教学经验,提升了教学技巧和能力。为新课改的进一步实施和扎实推进,打下了较好基础。现将主要学习及感受情况汇报总结如下:

一、通过对专家引领性课程的学习,让我更加明确了学习目标,这对于从事一线教学老师来说无疑是一个福音。通过一系列系统的讲授与学习,我作为学习者的角度来说,觉得这样的培训方式与内容更易于接受,更加能集中一点加以突破,达到研修和目的和效果。

二、经过这10多天的平台培训,让人没想到远程研修却是如此的丰富,仿佛又回到了以前的学校的学习生活:上课做作业,还有指导老师的精彩点评更上让人心生敬佩之心。在这一平台上,有一线教师的上课实录来弥补理论的空洞,有教授的理论为我们导航,有各地同仁的精辟点评,有专家的即时评说,有课后反思研讨,有困惑的解答,有鲜明热烈的在线研讨所有的这一切都是我未曾料想的。

三、通过研修,我深深感到了自己的不足。当看到别的老师旁征博引,理论结合实际,侃侃而谈的时候,我发现自己的理论积累实在是浅薄得可怜;当看到别的老师洋洋洒洒,或做散文或诗情勃发时,我发现自己的文笔生涩得很;当别的老师激情万丈的时候,我有时却难免会偷偷懒,这一切都让我十分惭愧。是啊,我确实需要把自己的一桶水注满,才能给学生一杯水。

初中语文研修日志 初中语文教师远程培训研修日志

四、我通过这次学习,不仅是对语文教学专业知识上的收获,一种潜心学习、按时完成作业的学习态度,更重要是一种教学态度,一种教学意识。[www.61k.com)相信通过这次学习之后,我可以更好地将本次学习的知识运用于教学实践中去。

本文标题:山西省2011年初中教师远程全员培训-2011年全国主要省市初中教材版本使用情况
本文地址: http://www.61k.com/1179564.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1